openapi: 3.1.0
info:
  title: Notory
  description: |
    Notory REST API. The stable surface lives under `/api/v1` and is versioned - a
    breaking change would ship as a new version path, so integrations built against
    `/api/v1` keep working.

    **Authentication**
    - Browser sessions use HttpOnly cookies (+ CSRF token).
    - Programmatic clients send `Authorization: Bearer <api-token>`. Tokens may carry
      `read` / `write` scopes.
    - Identity providers provision users via SCIM 2.0 at `/scim/v2`.

    **SDKs** - the machine-readable spec is served at `/api/openapi.json`; generate a
    typed client in any language with an OpenAPI generator (no separate SDK needed).
  termsOfService: https://notory.io/agb
  contact:
    name: Notory
    url: https://notory.io/
  license:
    name: Proprietary
  version: 1.3.0
paths:
  /api/v1/auth/me:
    get:
      tags:
        - Authentication
      summary: Get Me
      description: Return the currently authenticated user (frontend-compatible shape).
      operationId: get_me_api_v1_auth_me_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeResponse'
      security:
        - HTTPBearer: []
  /api/v1/auth/me/language:
    patch:
      tags:
        - Authentication
      summary: Set My Language
      description: Persist the current user's preferred UI language.
      operationId: set_my_language_api_v1_auth_me_language_patch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LanguageUpdate'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/auth/login:
    post:
      tags:
        - Authentication
      summary: Login
      description: Authenticate a user and establish the session via HttpOnly cookies.
      operationId: login_api_v1_auth_login_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/register:
    post:
      tags:
        - Authentication
      summary: Register
      description: Register a new user account.
      operationId: register_api_v1_auth_register_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterRequest'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/refresh:
    post:
      tags:
        - Authentication
      summary: Refresh
      description: Rotate the session from the refresh cookie (sets fresh auth cookies).
      operationId: refresh_api_v1_auth_refresh_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
  /api/v1/auth/totp/devices:
    get:
      tags:
        - Authentication
      summary: List Totp Devices
      description: List the current user's registered TOTP devices.
      operationId: list_totp_devices_api_v1_auth_totp_devices_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/TotpDeviceResponse'
                type: array
                title: Response List Totp Devices Api V1 Auth Totp Devices Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Authentication
      summary: Add Totp Device
      description: Start enrolling a new named TOTP device; returns the secret and QR code.
      operationId: add_totp_device_api_v1_auth_totp_devices_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TotpDeviceCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TotpDeviceSetupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/auth/totp/devices/{device_id}/verify:
    post:
      tags:
        - Authentication
      summary: Verify Totp Device
      description: Confirm a pending TOTP device with a valid code.
      operationId: verify_totp_device_api_v1_auth_totp_devices__device_id__verify_post
      security:
        - HTTPBearer: []
      parameters:
        - name: device_id
          in: path
          required: true
          schema:
            type: string
            title: Device Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TotpVerifyRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/totp/devices/{device_id}:
    delete:
      tags:
        - Authentication
      summary: Delete Totp Device
      description: Remove one of the current user's TOTP devices.
      operationId: delete_totp_device_api_v1_auth_totp_devices__device_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: device_id
          in: path
          required: true
          schema:
            type: string
            title: Device Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/password/change:
    post:
      tags:
        - Authentication
      summary: Change Password
      description: Change the current user's password.
      operationId: change_password_api_v1_auth_password_change_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordChangeRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/auth/password/reset:
    post:
      tags:
        - Authentication
      summary: Reset Password
      description: Request a self-service password reset e-mail (if enabled for this instance).
      operationId: reset_password_api_v1_auth_password_reset_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/password/reset/confirm:
    post:
      tags:
        - Authentication
      summary: Confirm Password Reset
      description: Complete a password reset using a token from the reset e-mail.
      operationId: confirm_password_reset_api_v1_auth_password_reset_confirm_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetConfirmRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/logout:
    post:
      tags:
        - Authentication
      summary: Logout
      description: Clear the session cookies. Works regardless of token validity.
      operationId: logout_api_v1_auth_logout_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
  /api/v1/auth/sso/discover:
    post:
      tags:
        - Authentication
      summary: Sso Discover
      description: 'Home-realm discovery: enabled SSO providers for the e-mail''s tenant.'
      operationId: sso_discover_api_v1_auth_sso_discover_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SsoDiscoverRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SsoDiscoverResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/sso/{config_id}/start:
    get:
      tags:
        - Authentication
      summary: Sso Start
      description: 'Begin OIDC login: redirect to the IdP and stash the PKCE/nonce state cookie.'
      operationId: sso_start_api_v1_auth_sso__config_id__start_get
      parameters:
        - name: config_id
          in: path
          required: true
          schema:
            type: string
            title: Config Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/auth/sso/callback:
    get:
      tags:
        - Authentication
      summary: Sso Callback
      description: 'OIDC redirect target: validate, establish the session, return to the app.'
      operationId: sso_callback_api_v1_auth_sso_callback_get
      parameters:
        - name: code
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Code
        - name: state
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: State
        - name: error
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Error
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/api-tokens:
    get:
      tags:
        - API Tokens
      summary: List Tokens
      description: List the current user's API tokens (without secret values).
      operationId: list_tokens_api_v1_api_tokens_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ApiTokenResponse'
                type: array
                title: Response List Tokens Api V1 Api Tokens Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - API Tokens
      summary: Create Token
      description: Create a new API token. The plaintext value is returned exactly once.
      operationId: create_token_api_v1_api_tokens_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiTokenCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiTokenCreated'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/api-tokens/{token_id}:
    delete:
      tags:
        - API Tokens
      summary: Revoke Token
      description: Revoke (delete) one of the current user's API tokens.
      operationId: revoke_token_api_v1_api_tokens__token_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: token_id
          in: path
          required: true
          schema:
            type: string
            title: Token Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/dashboard/stats:
    get:
      tags:
        - Dashboard
      summary: Dashboard Stats
      description: Aggregate counts, asset distribution and recent activity for the tenant.
      operationId: dashboard_stats_api_v1_dashboard_stats_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Dashboard Stats Api V1 Dashboard Stats Get
      security:
        - HTTPBearer: []
  /api/v1/assets:
    get:
      tags:
        - Assets
      summary: List Assets
      description: List assets with filtering and pagination.
      operationId: list_assets_api_v1_assets_get
      security:
        - HTTPBearer: []
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
            title: Page
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            default: 25
            title: Page Size
        - name: asset_type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Asset Type
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Status
        - name: search
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Search
        - name: department
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Department
        - name: location
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Location
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetListResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
        - Assets
      summary: Create Asset
      description: Create a new asset (subject to the license's asset limit).
      operationId: create_asset_api_v1_assets_post
      security:
        - HTTPBearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assets/export:
    get:
      tags:
        - Assets
      summary: Export Assets
      description: Export assets as JSON or CSV.
      operationId: export_assets_api_v1_assets_export_get
      security:
        - HTTPBearer: []
      parameters:
        - name: fmt
          in: query
          required: false
          schema:
            type: string
            pattern: ^(json|csv)$
            default: json
            title: Fmt
        - name: asset_type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Asset Type
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Status
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assets/assigned-to-me:
    get:
      tags:
        - Assets
      summary: List My Assignments
      description: |-
        The current user's active (not yet returned) asset assignments.

        Available to any authenticated user so employees can see which devices are
        currently issued to them ("Meine Geräte").
      operationId: list_my_assignments_api_v1_assets_assigned_to_me_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/MyAssignmentResponse'
                type: array
                title: Response List My Assignments Api V1 Assets Assigned To Me Get
      security:
        - HTTPBearer: []
  /api/v1/assets/trash:
    get:
      tags:
        - Assets
      summary: List Trashed
      description: List assets currently in the recycle bin (trash).
      operationId: list_trashed_api_v1_assets_trash_get
      security:
        - HTTPBearer: []
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
            title: Page
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            default: 25
            title: Page Size
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetListResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assets/trash/empty:
    post:
      tags:
        - Assets
      summary: Empty Trash
      description: Permanently delete every asset currently in the trash.
      operationId: empty_trash_api_v1_assets_trash_empty_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
      security:
        - HTTPBearer: []
  /api/v1/assets/{asset_id}:
    get:
      tags:
        - Assets
      summary: Get Asset
      description: Get a single asset by ID.
      operationId: get_asset_api_v1_assets__asset_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: asset_id
          in: path
          required: true
          schema:
            type: string
            title: Asset Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Assets
      summary: Update Asset
      description: Update an existing asset.
      operationId: update_asset_api_v1_assets__asset_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: asset_id
          in: path
          required: true
          schema:
            type: string
            title: Asset Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Assets
      summary: Delete Asset
      description: |-
        Delete an asset.

        Moves it to the recycle bin when the trash is enabled (default); with
        ``permanent=true`` - or when the trash is disabled for the tenant - it is
        removed for good.
      operationId: delete_asset_api_v1_assets__asset_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: asset_id
          in: path
          required: true
          schema:
            type: string
            title: Asset Id
        - name: permanent
          in: query
          required: false
          schema:
            type: boolean
            description: Bypass the trash and delete the asset permanently.
            default: false
            title: Permanent
          description: Bypass the trash and delete the asset permanently.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assets/{asset_id}/restore:
    post:
      tags:
        - Assets
      summary: Restore Asset
      description: Restore an asset from the trash.
      operationId: restore_asset_api_v1_assets__asset_id__restore_post
      security:
        - HTTPBearer: []
      parameters:
        - name: asset_id
          in: path
          required: true
          schema:
            type: string
            title: Asset Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assets/{asset_id}/qr:
    get:
      tags:
        - Assets
      summary: Get Asset Qr
      description: Generate and return a QR code image for an asset.
      operationId: get_asset_qr_api_v1_assets__asset_id__qr_get
      security:
        - HTTPBearer: []
      parameters:
        - name: asset_id
          in: path
          required: true
          schema:
            type: string
            title: Asset Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assets/import/template.csv:
    get:
      tags:
        - Assets
      summary: Import Template
      description: Download an example CSV showing the exact columns for an asset import.
      operationId: import_template_api_v1_assets_import_template_csv_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      security:
        - HTTPBearer: []
  /api/v1/assets/import:
    post:
      tags:
        - Assets
      summary: Import Assets
      description: Import assets from a CSV or JSON file.
      operationId: import_assets_api_v1_assets_import_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_import_assets_api_v1_assets_import_post'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/tenants:
    get:
      tags:
        - Tenants
      summary: List Tenants
      description: List all tenants (super-admin / admin only), each with its owner.
      operationId: list_tenants_api_v1_tenants_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/TenantResponse'
                type: array
                title: Response List Tenants Api V1 Tenants Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Tenants
      summary: Create Tenant
      description: Create a new tenant with its owner (super-admin / admin; subject to the license limit).
      operationId: create_tenant_api_v1_tenants_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenantCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/tenants/{tenant_id}:
    get:
      tags:
        - Tenants
      summary: Get Tenant
      description: Get a single tenant by ID.
      operationId: get_tenant_api_v1_tenants__tenant_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: tenant_id
          in: path
          required: true
          schema:
            type: string
            title: Tenant Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Tenants
      summary: Update Tenant
      description: Update a tenant.
      operationId: update_tenant_api_v1_tenants__tenant_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: tenant_id
          in: path
          required: true
          schema:
            type: string
            title: Tenant Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenantUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Tenants
      summary: Delete Tenant
      description: |-
        Delete a tenant and all of its data (super-admin / admin only).

        A user cannot delete the tenant they belong to (this would also delete
        their own account via the cascade). Deletion removes all tenant-scoped
        rows; audit-log entries are retained.
      operationId: delete_tenant_api_v1_tenants__tenant_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: tenant_id
          in: path
          required: true
          schema:
            type: string
            title: Tenant Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/tenants/{tenant_id}/branding:
    put:
      tags:
        - Tenants
      summary: Update Branding
      description: Update tenant branding (logo, colours).
      operationId: update_branding_api_v1_tenants__tenant_id__branding_put
      security:
        - HTTPBearer: []
      parameters:
        - name: tenant_id
          in: path
          required: true
          schema:
            type: string
            title: Tenant Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenantBrandingUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users:
    get:
      tags:
        - Users
      summary: List Users
      description: List users. Super-admins see every tenant; others only their own.
      operationId: list_users_api_v1_users_get
      security:
        - HTTPBearer: []
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
            title: Page
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            default: 25
            title: Page Size
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserResponse'
                title: Response List Users Api V1 Users Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
        - Users
      summary: Create User
      description: Create a new user. Super-admins may target a specific tenant; others use their own.
      operationId: create_user_api_v1_users_post
      security:
        - HTTPBearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/{user_id}:
    get:
      tags:
        - Users
      summary: Get User
      description: Get a single user by ID (super-admins may read users in any tenant).
      operationId: get_user_api_v1_users__user_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Users
      summary: Update User
      description: Update a user. Super-admins may edit users in any tenant.
      operationId: update_user_api_v1_users__user_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Users
      summary: Delete User
      description: Deactivate a user (soft delete).
      operationId: delete_user_api_v1_users__user_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/{user_id}/totp:
    delete:
      tags:
        - Users
      summary: Disable User Totp
      description: 'Remove all of a user''s 2FA devices (support: lost device / lockout).'
      operationId: disable_user_totp_api_v1_users__user_id__totp_delete
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/{user_id}/password:
    post:
      tags:
        - Users
      summary: Set User Password
      description: 'Admin: set a user''s password directly (support / onboarding).'
      operationId: set_user_password_api_v1_users__user_id__password_post
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminSetPasswordRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/users/{user_id}/password-reset-link:
    post:
      tags:
        - Users
      summary: Send User Password Reset Link
      description: 'Admin: e-mail a password-reset link to the user''s stored address.'
      operationId: send_user_password_reset_link_api_v1_users__user_id__password_reset_link_post
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/roles/permissions:
    get:
      tags:
        - Roles
      summary: List Permissions
      description: The catalogue of assignable permission codes (for the role editor).
      operationId: list_permissions_api_v1_roles_permissions_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionCatalogResponse'
      security:
        - HTTPBearer: []
  /api/v1/roles:
    get:
      tags:
        - Roles
      summary: List Roles
      description: 'List roles visible to the caller: global roles + the caller''s tenant.'
      operationId: list_roles_api_v1_roles_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/RoleResponse'
                type: array
                title: Response List Roles Api V1 Roles Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Roles
      summary: Create Role
      description: Create a global (super-admin only) or tenant-scoped role.
      operationId: create_role_api_v1_roles_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoleCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/roles/{role_id}:
    put:
      tags:
        - Roles
      summary: Update Role
      operationId: update_role_api_v1_roles__role_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: role_id
          in: path
          required: true
          schema:
            type: string
            title: Role Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoleUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Roles
      summary: Delete Role
      operationId: delete_role_api_v1_roles__role_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: role_id
          in: path
          required: true
          schema:
            type: string
            title: Role Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/roles/assignments/{user_id}:
    get:
      tags:
        - Roles
      summary: Get User Roles
      description: Return the IDs of the custom roles assigned to a user.
      operationId: get_user_roles_api_v1_roles_assignments__user_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                title: Response Get User Roles Api V1 Roles Assignments  User Id  Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Roles
      summary: Set User Roles
      description: Replace a user's assigned roles (each must be global or same-tenant).
      operationId: set_user_roles_api_v1_roles_assignments__user_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRolesUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                title: Response Set User Roles Api V1 Roles Assignments  User Id  Put
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/vlan-groups:
    get:
      tags:
        - Network
      summary: List Vlan Groups
      operationId: list_vlan_groups_api_v1_network_vlan_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/VLANGroupResponse'
                type: array
                title: Response List Vlan Groups Api V1 Network Vlan Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Vlan Group
      operationId: create_vlan_group_api_v1_network_vlan_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VLANGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VLANGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/vlan-groups/{group_id}:
    get:
      tags:
        - Network
      summary: Get Vlan Group
      operationId: get_vlan_group_api_v1_network_vlan_groups__group_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            title: Group Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VLANGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Vlan Group
      operationId: update_vlan_group_api_v1_network_vlan_groups__group_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            title: Group Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VLANGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VLANGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Vlan Group
      operationId: delete_vlan_group_api_v1_network_vlan_groups__group_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            title: Group Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/vlans:
    get:
      tags:
        - Network
      summary: List Vlans
      operationId: list_vlans_api_v1_network_vlans_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/VLANResponse'
                type: array
                title: Response List Vlans Api V1 Network Vlans Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Vlan
      operationId: create_vlan_api_v1_network_vlans_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VLANCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VLANResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/vlans/{vlan_uuid}:
    get:
      tags:
        - Network
      summary: Get Vlan
      operationId: get_vlan_api_v1_network_vlans__vlan_uuid__get
      security:
        - HTTPBearer: []
      parameters:
        - name: vlan_uuid
          in: path
          required: true
          schema:
            type: string
            title: Vlan Uuid
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VLANResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Vlan
      operationId: update_vlan_api_v1_network_vlans__vlan_uuid__put
      security:
        - HTTPBearer: []
      parameters:
        - name: vlan_uuid
          in: path
          required: true
          schema:
            type: string
            title: Vlan Uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VLANUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VLANResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Vlan
      operationId: delete_vlan_api_v1_network_vlans__vlan_uuid__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: vlan_uuid
          in: path
          required: true
          schema:
            type: string
            title: Vlan Uuid
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/ips:
    get:
      tags:
        - Network
      summary: List Ips
      operationId: list_ips_api_v1_network_ips_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/IPAddressResponse'
                type: array
                title: Response List Ips Api V1 Network Ips Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Ip
      operationId: create_ip_api_v1_network_ips_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IPAddressCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IPAddressResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/ips/{ip_id}:
    get:
      tags:
        - Network
      summary: Get Ip
      operationId: get_ip_api_v1_network_ips__ip_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: ip_id
          in: path
          required: true
          schema:
            type: string
            title: Ip Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IPAddressResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Ip
      operationId: update_ip_api_v1_network_ips__ip_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: ip_id
          in: path
          required: true
          schema:
            type: string
            title: Ip Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IPAddressUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IPAddressResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Ip
      operationId: delete_ip_api_v1_network_ips__ip_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: ip_id
          in: path
          required: true
          schema:
            type: string
            title: Ip Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/wifi:
    get:
      tags:
        - Network
      summary: List Wifi
      operationId: list_wifi_api_v1_network_wifi_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/WifiAccessPointResponse'
                type: array
                title: Response List Wifi Api V1 Network Wifi Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Wifi
      operationId: create_wifi_api_v1_network_wifi_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WifiAccessPointCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WifiAccessPointResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/wifi/{ap_id}:
    get:
      tags:
        - Network
      summary: Get Wifi
      operationId: get_wifi_api_v1_network_wifi__ap_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: ap_id
          in: path
          required: true
          schema:
            type: string
            title: Ap Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WifiAccessPointResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Wifi
      operationId: update_wifi_api_v1_network_wifi__ap_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: ap_id
          in: path
          required: true
          schema:
            type: string
            title: Ap Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WifiAccessPointUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WifiAccessPointResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Wifi
      operationId: delete_wifi_api_v1_network_wifi__ap_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: ap_id
          in: path
          required: true
          schema:
            type: string
            title: Ap Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/wlan-groups:
    get:
      tags:
        - Network
      summary: List Items
      operationId: list_items_api_v1_network_wlan_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/WLANGroupResponse'
                type: array
                title: Response List Items Api V1 Network Wlan Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Item
      operationId: create_item_api_v1_network_wlan_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WLANGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WLANGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/wlan-groups/{item_id}:
    get:
      tags:
        - Network
      summary: Get Item
      operationId: get_item_api_v1_network_wlan_groups__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WLANGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Item
      operationId: update_item_api_v1_network_wlan_groups__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WLANGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WLANGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Item
      operationId: delete_item_api_v1_network_wlan_groups__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/ip-ranges:
    get:
      tags:
        - Network
      summary: List Items
      operationId: list_items_api_v1_network_ip_ranges_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/IPRangeResponse'
                type: array
                title: Response List Items Api V1 Network Ip Ranges Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Item
      operationId: create_item_api_v1_network_ip_ranges_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IPRangeCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IPRangeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/ip-ranges/{item_id}:
    get:
      tags:
        - Network
      summary: Get Item
      operationId: get_item_api_v1_network_ip_ranges__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IPRangeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Item
      operationId: update_item_api_v1_network_ip_ranges__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IPRangeUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IPRangeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Item
      operationId: delete_item_api_v1_network_ip_ranges__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/ports:
    get:
      tags:
        - Network
      summary: List Items
      operationId: list_items_api_v1_network_ports_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PortServiceResponse'
                type: array
                title: Response List Items Api V1 Network Ports Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Item
      operationId: create_item_api_v1_network_ports_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortServiceCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortServiceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/ports/{item_id}:
    get:
      tags:
        - Network
      summary: Get Item
      operationId: get_item_api_v1_network_ports__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortServiceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Item
      operationId: update_item_api_v1_network_ports__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortServiceUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortServiceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Item
      operationId: delete_item_api_v1_network_ports__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/vpn-groups:
    get:
      tags:
        - Network
      summary: List Items
      operationId: list_items_api_v1_network_vpn_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/VPNGroupResponse'
                type: array
                title: Response List Items Api V1 Network Vpn Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Item
      operationId: create_item_api_v1_network_vpn_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VPNGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VPNGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/vpn-groups/{item_id}:
    get:
      tags:
        - Network
      summary: Get Item
      operationId: get_item_api_v1_network_vpn_groups__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VPNGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Item
      operationId: update_item_api_v1_network_vpn_groups__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VPNGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VPNGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Item
      operationId: delete_item_api_v1_network_vpn_groups__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/vpn:
    get:
      tags:
        - Network
      summary: List Items
      operationId: list_items_api_v1_network_vpn_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/VPNTunnelResponse'
                type: array
                title: Response List Items Api V1 Network Vpn Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Item
      operationId: create_item_api_v1_network_vpn_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VPNTunnelCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VPNTunnelResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/vpn/{item_id}:
    get:
      tags:
        - Network
      summary: Get Item
      operationId: get_item_api_v1_network_vpn__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VPNTunnelResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Item
      operationId: update_item_api_v1_network_vpn__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VPNTunnelUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VPNTunnelResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Item
      operationId: delete_item_api_v1_network_vpn__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/network/operating-systems:
    get:
      tags:
        - Network
      summary: List Items
      operationId: list_items_api_v1_network_operating_systems_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/OperatingSystemResponse'
                type: array
                title: Response List Items Api V1 Network Operating Systems Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Network
      summary: Create Item
      operationId: create_item_api_v1_network_operating_systems_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatingSystemCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatingSystemResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/network/operating-systems/{item_id}:
    get:
      tags:
        - Network
      summary: Get Item
      operationId: get_item_api_v1_network_operating_systems__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatingSystemResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Network
      summary: Update Item
      operationId: update_item_api_v1_network_operating_systems__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatingSystemUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatingSystemResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Network
      summary: Delete Item
      operationId: delete_item_api_v1_network_operating_systems__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/categories:
    get:
      tags:
        - Categories
      summary: List Items
      operationId: list_items_api_v1_categories_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/CategoryResponse'
                type: array
                title: Response List Items Api V1 Categories Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Categories
      summary: Create Item
      operationId: create_item_api_v1_categories_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CategoryCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/categories/{item_id}:
    get:
      tags:
        - Categories
      summary: Get Item
      operationId: get_item_api_v1_categories__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Categories
      summary: Update Item
      operationId: update_item_api_v1_categories__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CategoryUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Categories
      summary: Delete Item
      operationId: delete_item_api_v1_categories__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/ssh-keys:
    get:
      tags:
        - SSH Keys
      summary: List Items
      operationId: list_items_api_v1_ssh_keys_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SshKeyResponse'
                type: array
                title: Response List Items Api V1 Ssh Keys Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - SSH Keys
      summary: Create Item
      operationId: create_item_api_v1_ssh_keys_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SshKeyCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SshKeyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/ssh-keys/{item_id}:
    get:
      tags:
        - SSH Keys
      summary: Get Item
      operationId: get_item_api_v1_ssh_keys__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SshKeyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - SSH Keys
      summary: Update Item
      operationId: update_item_api_v1_ssh_keys__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SshKeyUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SshKeyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - SSH Keys
      summary: Delete Item
      operationId: delete_item_api_v1_ssh_keys__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/custom-fields:
    get:
      tags:
        - Custom Fields
      summary: List Items
      operationId: list_items_api_v1_custom_fields_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/CustomFieldResponse'
                type: array
                title: Response List Items Api V1 Custom Fields Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Custom Fields
      summary: Create Item
      operationId: create_item_api_v1_custom_fields_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFieldCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/custom-fields/{item_id}:
    get:
      tags:
        - Custom Fields
      summary: Get Item
      operationId: get_item_api_v1_custom_fields__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Custom Fields
      summary: Update Item
      operationId: update_item_api_v1_custom_fields__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFieldUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Custom Fields
      summary: Delete Item
      operationId: delete_item_api_v1_custom_fields__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assignments:
    get:
      tags:
        - Asset Assignments
      summary: List Assignments
      operationId: list_assignments_api_v1_assignments_get
      security:
        - HTTPBearer: []
      parameters:
        - name: asset_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Asset Id
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Status
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AssignmentResponse'
                title: Response List Assignments Api V1 Assignments Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assignments/checkout:
    post:
      tags:
        - Asset Assignments
      summary: Checkout Asset
      description: |-
        Issue (check out) an asset to a person/employee.

        Rejects if the asset is already checked out. An optional ``assigned_user_id``
        links the handover to a real user/employee; ``assignee_name`` stays the
        free-text recipient (e.g. for external parties).
      operationId: checkout_asset_api_v1_assignments_checkout_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutRequest'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssignmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/assignments/{assignment_id}/checkin:
    post:
      tags:
        - Asset Assignments
      summary: Checkin Asset
      description: Return (check in) a checked-out asset.
      operationId: checkin_asset_api_v1_assignments__assignment_id__checkin_post
      security:
        - HTTPBearer: []
      parameters:
        - name: assignment_id
          in: path
          required: true
          schema:
            type: string
            title: Assignment Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssignmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assignments/{assignment_id}/receipt.pdf:
    get:
      tags:
        - Asset Assignments
      summary: Assignment Receipt
      description: Stream the handover/return receipt PDF for an assignment.
      operationId: assignment_receipt_api_v1_assignments__assignment_id__receipt_pdf_get
      security:
        - HTTPBearer: []
      parameters:
        - name: assignment_id
          in: path
          required: true
          schema:
            type: string
            title: Assignment Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/assignments/{assignment_id}/receipt/email:
    post:
      tags:
        - Asset Assignments
      summary: Email Assignment Receipt
      description: E-mail the receipt PDF to the recipient (employee). 503 if no SMTP.
      operationId: email_assignment_receipt_api_v1_assignments__assignment_id__receipt_email_post
      security:
        - HTTPBearer: []
      parameters:
        - name: assignment_id
          in: path
          required: true
          schema:
            type: string
            title: Assignment Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/maintenance:
    get:
      tags:
        - Maintenance
      summary: List Items
      operationId: list_items_api_v1_maintenance_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/MaintenanceResponse'
                type: array
                title: Response List Items Api V1 Maintenance Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Maintenance
      summary: Create Item
      operationId: create_item_api_v1_maintenance_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/maintenance/{item_id}:
    get:
      tags:
        - Maintenance
      summary: Get Item
      operationId: get_item_api_v1_maintenance__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Maintenance
      summary: Update Item
      operationId: update_item_api_v1_maintenance__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Maintenance
      summary: Delete Item
      operationId: delete_item_api_v1_maintenance__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/departments:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_departments_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DepartmentResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Departments Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_departments_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepartmentCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/departments/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_departments__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_departments__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepartmentUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_departments__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/location-groups:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_location_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/LocationGroupResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Location Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_location_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LocationGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/location-groups/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_location_groups__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_location_groups__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LocationGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_location_groups__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/locations:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_locations_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/LocationResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Locations Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_locations_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LocationCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/locations/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_locations__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_locations__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LocationUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_locations__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/datacenters:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_datacenters_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DatacenterResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Datacenters Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_datacenters_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatacenterCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatacenterResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/datacenters/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_datacenters__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatacenterResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_datacenters__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatacenterUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatacenterResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_datacenters__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/rack-groups:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_rack_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/RackGroupResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Rack Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_rack_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RackGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/rack-groups/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_rack_groups__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_rack_groups__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RackGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_rack_groups__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/racks:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_racks_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/RackResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Racks Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_racks_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RackCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/racks/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_racks__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_racks__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RackUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_racks__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/contact-groups:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_contact_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ContactGroupResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Contact Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_contact_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/contact-groups/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_contact_groups__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_contact_groups__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_contact_groups__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/contact-roles:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_contact_roles_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ContactRoleResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Contact Roles Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_contact_roles_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactRoleCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRoleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/contact-roles/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_contact_roles__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRoleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_contact_roles__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactRoleUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRoleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_contact_roles__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/contacts:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_contacts_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ContactResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Contacts Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_contacts_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/contacts/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_contacts__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_contacts__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_contacts__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/support-contracts:
    get:
      tags:
        - Infrastructure
      summary: List Items
      operationId: list_items_api_v1_infrastructure_support_contracts_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SupportContractResponse'
                type: array
                title: Response List Items Api V1 Infrastructure Support Contracts Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Item
      operationId: create_item_api_v1_infrastructure_support_contracts_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupportContractCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupportContractResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/support-contracts/{item_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Item
      operationId: get_item_api_v1_infrastructure_support_contracts__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupportContractResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Item
      operationId: update_item_api_v1_infrastructure_support_contracts__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupportContractUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupportContractResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Item
      operationId: delete_item_api_v1_infrastructure_support_contracts__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/infrastructure/tenant-groups:
    get:
      tags:
        - Infrastructure
      summary: List Tenant Groups
      operationId: list_tenant_groups_api_v1_infrastructure_tenant_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/TenantGroupResponse'
                type: array
                title: Response List Tenant Groups Api V1 Infrastructure Tenant Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Infrastructure
      summary: Create Tenant Group
      operationId: create_tenant_group_api_v1_infrastructure_tenant_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenantGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/infrastructure/tenant-groups/{group_id}:
    get:
      tags:
        - Infrastructure
      summary: Get Tenant Group
      operationId: get_tenant_group_api_v1_infrastructure_tenant_groups__group_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            title: Group Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Infrastructure
      summary: Update Tenant Group
      operationId: update_tenant_group_api_v1_infrastructure_tenant_groups__group_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            title: Group Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenantGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Infrastructure
      summary: Delete Tenant Group
      operationId: delete_tenant_group_api_v1_infrastructure_tenant_groups__group_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            title: Group Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/notification-groups:
    get:
      tags:
        - Notifications
      summary: List Items
      operationId: list_items_api_v1_notification_groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/NotificationGroupResponse'
                type: array
                title: Response List Items Api V1 Notification Groups Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Notifications
      summary: Create Item
      operationId: create_item_api_v1_notification_groups_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationGroupCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/notification-groups/{item_id}:
    get:
      tags:
        - Notifications
      summary: Get Item
      operationId: get_item_api_v1_notification_groups__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Notifications
      summary: Update Item
      operationId: update_item_api_v1_notification_groups__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationGroupUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationGroupResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Notifications
      summary: Delete Item
      operationId: delete_item_api_v1_notification_groups__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/notifications:
    get:
      tags:
        - Notifications
      summary: List Items
      operationId: list_items_api_v1_notifications_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/NotificationResponse'
                type: array
                title: Response List Items Api V1 Notifications Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Notifications
      summary: Create Item
      operationId: create_item_api_v1_notifications_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/notifications/{item_id}:
    get:
      tags:
        - Notifications
      summary: Get Item
      operationId: get_item_api_v1_notifications__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Notifications
      summary: Update Item
      operationId: update_item_api_v1_notifications__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotificationUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Notifications
      summary: Delete Item
      operationId: delete_item_api_v1_notifications__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/journal:
    get:
      tags:
        - Journal
      summary: List Items
      operationId: list_items_api_v1_journal_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/JournalResponse'
                type: array
                title: Response List Items Api V1 Journal Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Journal
      summary: Create Item
      operationId: create_item_api_v1_journal_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JournalCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/journal/{item_id}:
    get:
      tags:
        - Journal
      summary: Get Item
      operationId: get_item_api_v1_journal__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Journal
      summary: Update Item
      operationId: update_item_api_v1_journal__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JournalUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Journal
      summary: Delete Item
      operationId: delete_item_api_v1_journal__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/vulnerabilities:
    get:
      tags:
        - Vulnerabilities
      summary: List Items
      operationId: list_items_api_v1_vulnerabilities_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/VulnerabilityResponse'
                type: array
                title: Response List Items Api V1 Vulnerabilities Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Vulnerabilities
      summary: Create Item
      operationId: create_item_api_v1_vulnerabilities_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VulnerabilityCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VulnerabilityResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/vulnerabilities/{item_id}:
    get:
      tags:
        - Vulnerabilities
      summary: Get Item
      operationId: get_item_api_v1_vulnerabilities__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VulnerabilityResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Vulnerabilities
      summary: Update Item
      operationId: update_item_api_v1_vulnerabilities__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VulnerabilityUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VulnerabilityResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Vulnerabilities
      summary: Delete Item
      operationId: delete_item_api_v1_vulnerabilities__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/notifications-unread-count:
    get:
      tags:
        - Notifications
      summary: Unread Count
      operationId: unread_count_api_v1_notifications_unread_count_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Unread Count Api V1 Notifications Unread Count Get
      security:
        - HTTPBearer: []
  /api/v1/notifications/{notification_id}/read:
    post:
      tags:
        - Notifications
      summary: Mark Read
      operationId: mark_read_api_v1_notifications__notification_id__read_post
      security:
        - HTTPBearer: []
      parameters:
        - name: notification_id
          in: path
          required: true
          schema:
            type: string
            title: Notification Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/reporting/network-diagram.png:
    get:
      tags:
        - Reporting
      summary: Network Diagram
      description: Render a simple network overview as a PNG image.
      operationId: network_diagram_api_v1_reporting_network_diagram_png_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      security:
        - HTTPBearer: []
  /api/v1/monitoring/agent/metrics:
    post:
      tags:
        - Monitoring
      summary: Ingest Metrics
      description: Ingest a metric push from an enrolled agent (upserts the agent host).
      operationId: ingest_metrics_api_v1_monitoring_agent_metrics_post
      security:
        - HTTPBearer: []
      parameters:
        - name: authorization
          in: header
          required: false
          schema:
            type: string
            default: ''
            title: Authorization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentMetricsRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentMetricsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/monitoring/hosts:
    get:
      tags:
        - Monitoring
      summary: List Hosts
      operationId: list_hosts_api_v1_monitoring_hosts_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/HostResponse'
                type: array
                title: Response List Hosts Api V1 Monitoring Hosts Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Monitoring
      summary: Create Host
      operationId: create_host_api_v1_monitoring_hosts_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HostCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/monitoring/hosts/{host_id}:
    get:
      tags:
        - Monitoring
      summary: Get Host
      operationId: get_host_api_v1_monitoring_hosts__host_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: host_id
          in: path
          required: true
          schema:
            type: string
            title: Host Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Monitoring
      summary: Update Host
      operationId: update_host_api_v1_monitoring_hosts__host_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: host_id
          in: path
          required: true
          schema:
            type: string
            title: Host Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HostUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Monitoring
      summary: Delete Host
      operationId: delete_host_api_v1_monitoring_hosts__host_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: host_id
          in: path
          required: true
          schema:
            type: string
            title: Host Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/monitoring/hosts/{host_id}/metrics:
    get:
      tags:
        - Monitoring
      summary: Host Metrics
      operationId: host_metrics_api_v1_monitoring_hosts__host_id__metrics_get
      security:
        - HTTPBearer: []
      parameters:
        - name: host_id
          in: path
          required: true
          schema:
            type: string
            title: Host Id
        - name: range
          in: query
          required: false
          schema:
            type: string
            default: 1h
            title: Range
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__schemas__monitoring__HistoryResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/monitoring/overview:
    get:
      tags:
        - Monitoring
      summary: Overview
      operationId: overview_api_v1_monitoring_overview_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OverviewResponse'
      security:
        - HTTPBearer: []
  /api/v1/monitoring/alert-rules:
    get:
      tags:
        - Monitoring
      summary: List Alert Rules
      operationId: list_alert_rules_api_v1_monitoring_alert_rules_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AlertRuleResponse'
                type: array
                title: Response List Alert Rules Api V1 Monitoring Alert Rules Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Monitoring
      summary: Create Alert Rule
      operationId: create_alert_rule_api_v1_monitoring_alert_rules_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlertRuleCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertRuleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/monitoring/alert-rules/{rule_id}:
    put:
      tags:
        - Monitoring
      summary: Update Alert Rule
      operationId: update_alert_rule_api_v1_monitoring_alert_rules__rule_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: rule_id
          in: path
          required: true
          schema:
            type: string
            title: Rule Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlertRuleUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertRuleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Monitoring
      summary: Delete Alert Rule
      operationId: delete_alert_rule_api_v1_monitoring_alert_rules__rule_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: rule_id
          in: path
          required: true
          schema:
            type: string
            title: Rule Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/monitoring/alerts:
    get:
      tags:
        - Monitoring
      summary: List Alerts
      operationId: list_alerts_api_v1_monitoring_alerts_get
      security:
        - HTTPBearer: []
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 500
            minimum: 1
            default: 50
            title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AlertEventResponse'
                title: Response List Alerts Api V1 Monitoring Alerts Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/monitoring/agent/download:
    get:
      tags:
        - Monitoring
      summary: Download Agent Binary
      description: Serve the prebuilt monitoring-agent binary for the requested platform.
      operationId: download_agent_binary_api_v1_monitoring_agent_download_get
      security:
        - HTTPBearer: []
      parameters:
        - name: os
          in: query
          required: false
          schema:
            type: string
            default: linux
            title: Os
        - name: arch
          in: query
          required: false
          schema:
            type: string
            default: amd64
            title: Arch
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/sso/configs:
    get:
      tags:
        - SSO
      summary: List Items
      operationId: list_items_api_v1_sso_configs_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SsoConfigResponse'
                type: array
                title: Response List Items Api V1 Sso Configs Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - SSO
      summary: Create Item
      operationId: create_item_api_v1_sso_configs_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SsoConfigCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SsoConfigResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/sso/configs/{item_id}:
    get:
      tags:
        - SSO
      summary: Get Item
      operationId: get_item_api_v1_sso_configs__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SsoConfigResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - SSO
      summary: Update Item
      operationId: update_item_api_v1_sso_configs__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SsoConfigUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SsoConfigResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - SSO
      summary: Delete Item
      operationId: delete_item_api_v1_sso_configs__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/sso/providers:
    get:
      tags:
        - SSO
      summary: List Enabled Providers
      description: List enabled SSO providers for the current tenant (for the login UI).
      operationId: list_enabled_providers_api_v1_sso_providers_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SsoProviderPublic'
                type: array
                title: Response List Enabled Providers Api V1 Sso Providers Get
      security:
        - HTTPBearer: []
  /api/v1/sso/configs/{config_id}/login:
    get:
      tags:
        - SSO
      summary: Sso Login Init
      description: |-
        Begin an OIDC login by returning the provider's authorization URL.

        Requires the provider to be enabled and (for OIDC) to expose a discovery
        document. The actual token exchange happens at the callback once a real IdP
        is wired up.
      operationId: sso_login_init_api_v1_sso_configs__config_id__login_get
      security:
        - HTTPBearer: []
      parameters:
        - name: config_id
          in: path
          required: true
          schema:
            type: string
            title: Config Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Sso Login Init Api V1 Sso Configs  Config Id  Login Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/discovery/scans:
    get:
      tags:
        - Discovery
      summary: List Scans
      operationId: list_scans_api_v1_discovery_scans_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ScanJobResponse'
                type: array
                title: Response List Scans Api V1 Discovery Scans Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Discovery
      summary: Start Scan
      description: Create and launch an agentless network scan.
      operationId: start_scan_api_v1_discovery_scans_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScanCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScanJobResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/discovery/scans/{scan_id}:
    get:
      tags:
        - Discovery
      summary: Get Scan
      operationId: get_scan_api_v1_discovery_scans__scan_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: scan_id
          in: path
          required: true
          schema:
            type: string
            title: Scan Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScanJobResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/discovery/devices:
    get:
      tags:
        - Discovery
      summary: List Devices
      operationId: list_devices_api_v1_discovery_devices_get
      security:
        - HTTPBearer: []
      parameters:
        - name: scan_job_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Scan Job Id
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - $ref: '#/components/schemas/DeviceStatus'
              - type: 'null'
            title: Status
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DiscoveredDeviceResponse'
                title: Response List Devices Api V1 Discovery Devices Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/discovery/devices/{device_id}/import:
    post:
      tags:
        - Discovery
      summary: Import Device
      description: Turn a discovered device into a managed asset (subject to the asset limit).
      operationId: import_device_api_v1_discovery_devices__device_id__import_post
      security:
        - HTTPBearer: []
      parameters:
        - name: device_id
          in: path
          required: true
          schema:
            type: string
            title: Device Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportDeviceRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoveredDeviceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/discovery/devices/{device_id}/ignore:
    post:
      tags:
        - Discovery
      summary: Ignore Device
      operationId: ignore_device_api_v1_discovery_devices__device_id__ignore_post
      security:
        - HTTPBearer: []
      parameters:
        - name: device_id
          in: path
          required: true
          schema:
            type: string
            title: Device Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoveredDeviceResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/discovery/agent/enrollments:
    get:
      tags:
        - Discovery Agent
      summary: List Enrollments
      operationId: list_enrollments_api_v1_discovery_agent_enrollments_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/EnrollmentResponse'
                type: array
                title: Response List Enrollments Api V1 Discovery Agent Enrollments Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Discovery Agent
      summary: Create Enrollment
      description: Create an agent enrollment. The token is returned ONCE in this response.
      operationId: create_enrollment_api_v1_discovery_agent_enrollments_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollmentCreatedResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/discovery/agent/enrollments/{enrollment_id}/revoke:
    post:
      tags:
        - Discovery Agent
      summary: Revoke Enrollment
      operationId: revoke_enrollment_api_v1_discovery_agent_enrollments__enrollment_id__revoke_post
      security:
        - HTTPBearer: []
      parameters:
        - name: enrollment_id
          in: path
          required: true
          schema:
            type: string
            title: Enrollment Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/discovery/agent/download:
    get:
      tags:
        - Discovery Agent
      summary: Download Agent
      description: Download the reference inventory agent (same script for all platforms).
      operationId: download_agent_api_v1_discovery_agent_download_get
      security:
        - HTTPBearer: []
      parameters:
        - name: os
          in: query
          required: false
          schema:
            type: string
            default: linux
            title: Os
      responses:
        '200':
          description: Successful Response
          content:
            text/plain:
              schema:
                type: string
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/discovery/agent/report:
    post:
      tags:
        - Discovery Agent
      summary: Agent Report
      description: Ingest an agent inventory report, up-serting the matching asset.
      operationId: agent_report_api_v1_discovery_agent_report_post
      security:
        - HTTPBearer: []
      parameters:
        - name: authorization
          in: header
          required: false
          schema:
            type: string
            default: ''
            title: Authorization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentReportRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentReportResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/provisioning/templates:
    get:
      tags:
        - Provisioning
      summary: List Items
      operationId: list_items_api_v1_provisioning_templates_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ConfigTemplateResponse'
                type: array
                title: Response List Items Api V1 Provisioning Templates Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Provisioning
      summary: Create Item
      operationId: create_item_api_v1_provisioning_templates_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfigTemplateCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigTemplateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/provisioning/templates/{item_id}:
    get:
      tags:
        - Provisioning
      summary: Get Item
      operationId: get_item_api_v1_provisioning_templates__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigTemplateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Provisioning
      summary: Update Item
      operationId: update_item_api_v1_provisioning_templates__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfigTemplateUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigTemplateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Provisioning
      summary: Delete Item
      operationId: delete_item_api_v1_provisioning_templates__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/provisioning/workflows:
    get:
      tags:
        - Provisioning
      summary: List Items
      operationId: list_items_api_v1_provisioning_workflows_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/WorkflowResponse'
                type: array
                title: Response List Items Api V1 Provisioning Workflows Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Provisioning
      summary: Create Item
      operationId: create_item_api_v1_provisioning_workflows_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/provisioning/workflows/{item_id}:
    get:
      tags:
        - Provisioning
      summary: Get Item
      operationId: get_item_api_v1_provisioning_workflows__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Provisioning
      summary: Update Item
      operationId: update_item_api_v1_provisioning_workflows__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Provisioning
      summary: Delete Item
      operationId: delete_item_api_v1_provisioning_workflows__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/provisioning/firewall-configs:
    get:
      tags:
        - Provisioning
      summary: List Items
      operationId: list_items_api_v1_provisioning_firewall_configs_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/FirewallConfigResponse'
                type: array
                title: Response List Items Api V1 Provisioning Firewall Configs Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Provisioning
      summary: Create Item
      operationId: create_item_api_v1_provisioning_firewall_configs_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FirewallConfigCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FirewallConfigResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/provisioning/firewall-configs/{item_id}:
    get:
      tags:
        - Provisioning
      summary: Get Item
      operationId: get_item_api_v1_provisioning_firewall_configs__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FirewallConfigResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Provisioning
      summary: Update Item
      operationId: update_item_api_v1_provisioning_firewall_configs__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FirewallConfigUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FirewallConfigResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Provisioning
      summary: Delete Item
      operationId: delete_item_api_v1_provisioning_firewall_configs__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/provisioning/acl-rules:
    get:
      tags:
        - Provisioning
      summary: List Items
      operationId: list_items_api_v1_provisioning_acl_rules_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AclRuleResponse'
                type: array
                title: Response List Items Api V1 Provisioning Acl Rules Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Provisioning
      summary: Create Item
      operationId: create_item_api_v1_provisioning_acl_rules_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AclRuleCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AclRuleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/provisioning/acl-rules/{item_id}:
    get:
      tags:
        - Provisioning
      summary: Get Item
      operationId: get_item_api_v1_provisioning_acl_rules__item_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AclRuleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Provisioning
      summary: Update Item
      operationId: update_item_api_v1_provisioning_acl_rules__item_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AclRuleUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AclRuleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Provisioning
      summary: Delete Item
      operationId: delete_item_api_v1_provisioning_acl_rules__item_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: item_id
          in: path
          required: true
          schema:
            type: string
            title: Item Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/provisioning/templates/{template_id}/render:
    post:
      tags:
        - Provisioning
      summary: Render Config Template
      description: Render a config template's content with the given variables (Jinja2, sandboxed).
      operationId: render_config_template_api_v1_provisioning_templates__template_id__render_post
      security:
        - HTTPBearer: []
      parameters:
        - name: template_id
          in: path
          required: true
          schema:
            type: string
            title: Template Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RenderRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RenderResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/webhooks:
    get:
      tags:
        - Webhooks
      summary: List Webhooks
      operationId: list_webhooks_api_v1_webhooks_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/WebhookResponse'
                type: array
                title: Response List Webhooks Api V1 Webhooks Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Webhooks
      summary: Create Webhook
      description: Create a webhook. The signing secret is returned ONCE in this response.
      operationId: create_webhook_api_v1_webhooks_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookCreatedResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/webhooks/{webhook_id}:
    delete:
      tags:
        - Webhooks
      summary: Delete Webhook
      operationId: delete_webhook_api_v1_webhooks__webhook_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: webhook_id
          in: path
          required: true
          schema:
            type: string
            title: Webhook Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/webhooks/{webhook_id}/test:
    post:
      tags:
        - Webhooks
      summary: Test Webhook
      description: Send a signed ``ping`` event to the endpoint and return the delivery result.
      operationId: test_webhook_api_v1_webhooks__webhook_id__test_post
      security:
        - HTTPBearer: []
      parameters:
        - name: webhook_id
          in: path
          required: true
          schema:
            type: string
            title: Webhook Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookDeliveryResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/webhooks/{webhook_id}/deliveries:
    get:
      tags:
        - Webhooks
      summary: List Deliveries
      operationId: list_deliveries_api_v1_webhooks__webhook_id__deliveries_get
      security:
        - HTTPBearer: []
      parameters:
        - name: webhook_id
          in: path
          required: true
          schema:
            type: string
            title: Webhook Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WebhookDeliveryResponse'
                title: Response List Deliveries Api V1 Webhooks  Webhook Id  Deliveries Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/software/licenses:
    get:
      tags:
        - Software
      summary: List Licenses
      operationId: list_licenses_api_v1_software_licenses_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SoftwareLicenseResponse'
                type: array
                title: Response List Licenses Api V1 Software Licenses Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Software
      summary: Create License
      operationId: create_license_api_v1_software_licenses_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SoftwareLicenseCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SoftwareLicenseResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/software/licenses/overview:
    get:
      tags:
        - Software
      summary: License Overview
      description: Cost + expiry summary used by the software page.
      operationId: license_overview_api_v1_software_licenses_overview_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response License Overview Api V1 Software Licenses Overview Get
      security:
        - HTTPBearer: []
  /api/v1/software/licenses/{lic_id}:
    get:
      tags:
        - Software
      summary: Get License
      operationId: get_license_api_v1_software_licenses__lic_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: lic_id
          in: path
          required: true
          schema:
            type: string
            title: Lic Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SoftwareLicenseResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Software
      summary: Update License
      operationId: update_license_api_v1_software_licenses__lic_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: lic_id
          in: path
          required: true
          schema:
            type: string
            title: Lic Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SoftwareLicenseUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SoftwareLicenseResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Software
      summary: Delete License
      operationId: delete_license_api_v1_software_licenses__lic_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: lic_id
          in: path
          required: true
          schema:
            type: string
            title: Lic Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/software:
    get:
      tags:
        - Software
      summary: List Software
      operationId: list_software_api_v1_software_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SoftwareResponse'
                type: array
                title: Response List Software Api V1 Software Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Software
      summary: Create Software
      operationId: create_software_api_v1_software_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SoftwareCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SoftwareResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/software/{sw_id}:
    get:
      tags:
        - Software
      summary: Get Software
      operationId: get_software_api_v1_software__sw_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: sw_id
          in: path
          required: true
          schema:
            type: string
            title: Sw Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SoftwareResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Software
      summary: Update Software
      operationId: update_software_api_v1_software__sw_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: sw_id
          in: path
          required: true
          schema:
            type: string
            title: Sw Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SoftwareUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SoftwareResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Software
      summary: Delete Software
      operationId: delete_software_api_v1_software__sw_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: sw_id
          in: path
          required: true
          schema:
            type: string
            title: Sw Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/certificates:
    get:
      tags:
        - Certificates
      summary: List Certificates
      operationId: list_certificates_api_v1_certificates_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/CertificateResponse'
                type: array
                title: Response List Certificates Api V1 Certificates Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Certificates
      summary: Create Certificate
      operationId: create_certificate_api_v1_certificates_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CertificateCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CertificateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/certificates/{cert_id}:
    get:
      tags:
        - Certificates
      summary: Get Certificate
      operationId: get_certificate_api_v1_certificates__cert_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: cert_id
          in: path
          required: true
          schema:
            type: string
            title: Cert Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CertificateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Certificates
      summary: Update Certificate
      operationId: update_certificate_api_v1_certificates__cert_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: cert_id
          in: path
          required: true
          schema:
            type: string
            title: Cert Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CertificateUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CertificateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Certificates
      summary: Delete Certificate
      operationId: delete_certificate_api_v1_certificates__cert_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: cert_id
          in: path
          required: true
          schema:
            type: string
            title: Cert Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/compliance/policies:
    get:
      tags:
        - Compliance
      summary: List Policies
      operationId: list_policies_api_v1_compliance_policies_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PolicyResponse'
                type: array
                title: Response List Policies Api V1 Compliance Policies Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Compliance
      summary: Create Policy
      operationId: create_policy_api_v1_compliance_policies_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PolicyCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PolicyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/compliance/policies/{policy_id}:
    get:
      tags:
        - Compliance
      summary: Get Policy
      operationId: get_policy_api_v1_compliance_policies__policy_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: policy_id
          in: path
          required: true
          schema:
            type: string
            title: Policy Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PolicyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Compliance
      summary: Update Policy
      operationId: update_policy_api_v1_compliance_policies__policy_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: policy_id
          in: path
          required: true
          schema:
            type: string
            title: Policy Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PolicyUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PolicyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Compliance
      summary: Delete Policy
      operationId: delete_policy_api_v1_compliance_policies__policy_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: policy_id
          in: path
          required: true
          schema:
            type: string
            title: Policy Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/compliance/risks:
    get:
      tags:
        - Compliance
      summary: List Risks
      operationId: list_risks_api_v1_compliance_risks_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/RiskAssessmentResponse'
                type: array
                title: Response List Risks Api V1 Compliance Risks Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Compliance
      summary: Create Risk
      operationId: create_risk_api_v1_compliance_risks_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RiskAssessmentCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskAssessmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/compliance/risks/{risk_id}:
    get:
      tags:
        - Compliance
      summary: Get Risk
      operationId: get_risk_api_v1_compliance_risks__risk_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: risk_id
          in: path
          required: true
          schema:
            type: string
            title: Risk Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskAssessmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Compliance
      summary: Update Risk
      operationId: update_risk_api_v1_compliance_risks__risk_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: risk_id
          in: path
          required: true
          schema:
            type: string
            title: Risk Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RiskAssessmentUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskAssessmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Compliance
      summary: Delete Risk
      operationId: delete_risk_api_v1_compliance_risks__risk_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: risk_id
          in: path
          required: true
          schema:
            type: string
            title: Risk Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/instance/settings:
    get:
      tags:
        - Instance
      summary: Get Instance Settings
      description: Public branding info for the frontend (no authentication required).
      operationId: get_instance_settings_api_v1_instance_settings_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceSettingsPublic'
    put:
      tags:
        - Instance
      summary: Update Instance Settings
      description: Update instance branding (admin / super-admin only).
      operationId: update_instance_settings_api_v1_instance_settings_put
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InstanceSettingsUpdate'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceSettingsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/instance/logo:
    post:
      tags:
        - Instance
      summary: Upload Logo
      description: Upload a custom instance logo (admin / super-admin only).
      operationId: upload_logo_api_v1_instance_logo_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_upload_logo_api_v1_instance_logo_post'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceSettingsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/instance/favicon:
    post:
      tags:
        - Instance
      summary: Upload Favicon
      description: Upload a custom favicon (admin / super-admin only).
      operationId: upload_favicon_api_v1_instance_favicon_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_upload_favicon_api_v1_instance_favicon_post'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceSettingsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/license:
    get:
      tags:
        - License
      summary: License Status
      description: Return the effective product-license status for this installation.
      operationId: license_status_api_v1_license_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseStatusResponse'
      security:
        - HTTPBearer: []
  /api/v1/entitlements:
    get:
      tags:
        - Entitlements
      summary: Get Entitlements
      description: Return the effective entitlements (features + limits + usage) for the tenant.
      operationId: get_entitlements_api_v1_entitlements_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntitlementsResponse'
      security:
        - HTTPBearer: []
  /api/v1/config/templates:
    get:
      tags:
        - Config
      summary: List Templates
      description: List the built-in industry config templates (id/name/description).
      operationId: list_templates_api_v1_config_templates_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  additionalProperties:
                    type: string
                  type: object
                type: array
                title: Response List Templates Api V1 Config Templates Get
      security:
        - HTTPBearer: []
  /api/v1/config/export:
    get:
      tags:
        - Config
      summary: Export Config
      description: Export the current tenant's configuration as a portable bundle.
      operationId: export_config_api_v1_config_export_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Export Config Api V1 Config Export Get
      security:
        - HTTPBearer: []
  /api/v1/config/import:
    post:
      tags:
        - Config
      summary: Import Config
      description: Import a config bundle into the current tenant (idempotent; dry-run supported).
      operationId: import_config_api_v1_config_import_post
      security:
        - HTTPBearer: []
      parameters:
        - name: dry_run
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Dry Run
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
              title: Payload
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Import Config Api V1 Config Import Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/config/templates/{template_id}/apply:
    post:
      tags:
        - Config
      summary: Apply Template
      description: Apply a built-in industry template to the current tenant.
      operationId: apply_template_api_v1_config_templates__template_id__apply_post
      security:
        - HTTPBearer: []
      parameters:
        - name: template_id
          in: path
          required: true
          schema:
            type: string
            title: Template Id
        - name: dry_run
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Dry Run
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Apply Template Api V1 Config Templates  Template Id  Apply Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/config/onboarding:
    get:
      tags:
        - Config
      summary: Onboarding State
      description: 'First-run onboarding state: whether it is done + the templates to offer.'
      operationId: onboarding_state_api_v1_config_onboarding_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Onboarding State Api V1 Config Onboarding Get
      security:
        - HTTPBearer: []
  /api/v1/config/onboarding/complete:
    post:
      tags:
        - Config
      summary: Complete Onboarding
      description: Mark first-run onboarding as complete for the current tenant.
      operationId: complete_onboarding_api_v1_config_onboarding_complete_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties:
                  type: boolean
                type: object
                title: Response Complete Onboarding Api V1 Config Onboarding Complete Post
      security:
        - HTTPBearer: []
  /api/v1/object-types:
    get:
      tags:
        - Object types
      summary: List Object Types
      operationId: list_object_types_api_v1_object_types_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ObjectTypeResponse'
                type: array
                title: Response List Object Types Api V1 Object Types Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Object types
      summary: Create Object Type
      operationId: create_object_type_api_v1_object_types_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ObjectTypeCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectTypeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/object-types/{type_id}:
    get:
      tags:
        - Object types
      summary: Get Object Type
      operationId: get_object_type_api_v1_object_types__type_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: type_id
          in: path
          required: true
          schema:
            type: string
            title: Type Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectTypeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Object types
      summary: Update Object Type
      operationId: update_object_type_api_v1_object_types__type_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: type_id
          in: path
          required: true
          schema:
            type: string
            title: Type Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ObjectTypeUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectTypeResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Object types
      summary: Delete Object Type
      operationId: delete_object_type_api_v1_object_types__type_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: type_id
          in: path
          required: true
          schema:
            type: string
            title: Type Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records:
    get:
      tags:
        - Records
      summary: List Records
      operationId: list_records_api_v1_records_get
      security:
        - HTTPBearer: []
      parameters:
        - name: object_type
          in: query
          required: true
          schema:
            type: string
            title: Object Type
        - name: q
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Full-text search over the record's values
            title: Q
          description: Full-text search over the record's values
        - name: limit
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
                maximum: 500
                minimum: 1
              - type: 'null'
            description: Opt into keyset pagination (page size)
            title: Limit
          description: Opt into keyset pagination (page size)
        - name: cursor
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Keyset cursor from a previous page
            title: Cursor
          description: Keyset cursor from a previous page
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordListResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
        - Records
      summary: Create Record
      operationId: create_record_api_v1_records_post
      security:
        - HTTPBearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecordCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records/import:
    post:
      tags:
        - Records
      summary: Import Records
      description: Bulk upsert records from mapped rows (dry-run supported).
      operationId: import_records_api_v1_records_import_post
      security:
        - HTTPBearer: []
      parameters:
        - name: dry_run
          in: query
          required: false
          schema:
            type: boolean
            default: false
            title: Dry Run
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecordImport'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Import Records Api V1 Records Import Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records/lookup:
    get:
      tags:
        - Records
      summary: Lookup Record
      description: Resolve a scanned barcode/QR value to a record (scan/stocktake flow).
      operationId: lookup_record_api_v1_records_lookup_get
      security:
        - HTTPBearer: []
      parameters:
        - name: object_type
          in: query
          required: true
          schema:
            type: string
            title: Object Type
        - name: field
          in: query
          required: true
          schema:
            type: string
            title: Field
        - name: value
          in: query
          required: true
          schema:
            type: string
            title: Value
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records/{record_id}:
    get:
      tags:
        - Records
      summary: Get Record
      operationId: get_record_api_v1_records__record_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Records
      summary: Update Record
      operationId: update_record_api_v1_records__record_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecordUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Records
      summary: Delete Record
      operationId: delete_record_api_v1_records__record_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: string
                title: Response Delete Record Api V1 Records  Record Id  Delete
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records/{record_id}/history:
    get:
      tags:
        - Records
      summary: List Record History
      operationId: list_record_history_api_v1_records__record_id__history_get
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/app__api__v1__endpoints__records__HistoryResponse'
                title: Response List Record History Api V1 Records  Record Id  History Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records/{record_id}/restore/{history_id}:
    post:
      tags:
        - Records
      summary: Restore Record
      operationId: restore_record_api_v1_records__record_id__restore__history_id__post
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
        - name: history_id
          in: path
          required: true
          schema:
            type: string
            title: History Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records/{record_id}/links:
    get:
      tags:
        - Records
      summary: List Record Links
      operationId: list_record_links_api_v1_records__record_id__links_get
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response List Record Links Api V1 Records  Record Id  Links Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
        - Records
      summary: Create Record Link
      operationId: create_record_link_api_v1_records__record_id__links_post
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: string
                title: Response Create Record Link Api V1 Records  Record Id  Links Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/records/{record_id}/links/{link_id}:
    delete:
      tags:
        - Records
      summary: Delete Record Link
      operationId: delete_record_link_api_v1_records__record_id__links__link_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            title: Record Id
        - name: link_id
          in: path
          required: true
          schema:
            type: string
            title: Link Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/saved-views:
    get:
      tags:
        - Saved views
      summary: List Saved Views
      operationId: list_saved_views_api_v1_saved_views_get
      security:
        - HTTPBearer: []
      parameters:
        - name: entity
          in: query
          required: true
          schema:
            type: string
            title: Entity
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SavedViewResponse'
                title: Response List Saved Views Api V1 Saved Views Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
        - Saved views
      summary: Create Saved View
      operationId: create_saved_view_api_v1_saved_views_post
      security:
        - HTTPBearer: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SavedViewCreate'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SavedViewResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/saved-views/{view_id}:
    put:
      tags:
        - Saved views
      summary: Update Saved View
      operationId: update_saved_view_api_v1_saved_views__view_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: view_id
          in: path
          required: true
          schema:
            type: string
            title: View Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SavedViewUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SavedViewResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Saved views
      summary: Delete Saved View
      operationId: delete_saved_view_api_v1_saved_views__view_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: view_id
          in: path
          required: true
          schema:
            type: string
            title: View Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/attachments:
    get:
      tags:
        - Attachments
      summary: List Attachments
      operationId: list_attachments_api_v1_attachments_get
      security:
        - HTTPBearer: []
      parameters:
        - name: entity_type
          in: query
          required: true
          schema:
            type: string
            title: Entity Type
        - name: entity_id
          in: query
          required: true
          schema:
            type: string
            title: Entity Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AttachmentResponse'
                title: Response List Attachments Api V1 Attachments Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
        - Attachments
      summary: Upload Attachment
      operationId: upload_attachment_api_v1_attachments_post
      security:
        - HTTPBearer: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_upload_attachment_api_v1_attachments_post'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttachmentResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/attachments/{att_id}/download:
    get:
      tags:
        - Attachments
      summary: Download Attachment
      operationId: download_attachment_api_v1_attachments__att_id__download_get
      security:
        - HTTPBearer: []
      parameters:
        - name: att_id
          in: path
          required: true
          schema:
            type: string
            title: Att Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/attachments/{att_id}:
    delete:
      tags:
        - Attachments
      summary: Delete Attachment
      operationId: delete_attachment_api_v1_attachments__att_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: att_id
          in: path
          required: true
          schema:
            type: string
            title: Att Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/automation-rules:
    get:
      tags:
        - Automation
      summary: List Rules
      operationId: list_rules_api_v1_automation_rules_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/AutomationRuleResponse'
                type: array
                title: Response List Rules Api V1 Automation Rules Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Automation
      summary: Create Rule
      operationId: create_rule_api_v1_automation_rules_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AutomationRuleBody'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationRuleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/automation-rules/{rule_id}:
    put:
      tags:
        - Automation
      summary: Update Rule
      operationId: update_rule_api_v1_automation_rules__rule_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: rule_id
          in: path
          required: true
          schema:
            type: string
            title: Rule Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AutomationRuleBody'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationRuleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Automation
      summary: Delete Rule
      operationId: delete_rule_api_v1_automation_rules__rule_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: rule_id
          in: path
          required: true
          schema:
            type: string
            title: Rule Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/reports:
    get:
      tags:
        - Reports
      summary: List Reports
      operationId: list_reports_api_v1_reports_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ReportResponse'
                type: array
                title: Response List Reports Api V1 Reports Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Reports
      summary: Create Report
      operationId: create_report_api_v1_reports_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
  /api/v1/reports/{report_id}:
    get:
      tags:
        - Reports
      summary: Get Report
      operationId: get_report_api_v1_reports__report_id__get
      security:
        - HTTPBearer: []
      parameters:
        - name: report_id
          in: path
          required: true
          schema:
            type: string
            title: Report Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Reports
      summary: Update Report
      operationId: update_report_api_v1_reports__report_id__put
      security:
        - HTTPBearer: []
      parameters:
        - name: report_id
          in: path
          required: true
          schema:
            type: string
            title: Report Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - Reports
      summary: Delete Report
      operationId: delete_report_api_v1_reports__report_id__delete
      security:
        - HTTPBearer: []
      parameters:
        - name: report_id
          in: path
          required: true
          schema:
            type: string
            title: Report Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/reports/{report_id}/run:
    get:
      tags:
        - Reports
      summary: Run Report
      operationId: run_report_api_v1_reports__report_id__run_get
      security:
        - HTTPBearer: []
      parameters:
        - name: report_id
          in: path
          required: true
          schema:
            type: string
            title: Report Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Run Report Api V1 Reports  Report Id  Run Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/reports/{report_id}/export.csv:
    get:
      tags:
        - Reports
      summary: Export Report Csv
      operationId: export_report_csv_api_v1_reports__report_id__export_csv_get
      security:
        - HTTPBearer: []
      parameters:
        - name: report_id
          in: path
          required: true
          schema:
            type: string
            title: Report Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/admin/system-info:
    get:
      tags:
        - Admin
      summary: System Info
      description: 'Return system-level diagnostics: version, disk, counts.'
      operationId: system_info_api_v1_admin_system_info_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response System Info Api V1 Admin System Info Get
      security:
        - HTTPBearer: []
  /api/v1/admin/audit/verify:
    get:
      tags:
        - Admin
      summary: Verify Audit Integrity
      description: |-
        Verify the audit-log hash chain: recompute each entry's hash and check
        chain continuity. Reports any tampered rows or gaps (deleted entries).
      operationId: verify_audit_integrity_api_v1_admin_audit_verify_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Verify Audit Integrity Api V1 Admin Audit Verify Get
      security:
        - HTTPBearer: []
  /api/v1/admin/jobs:
    get:
      tags:
        - Admin
      summary: Jobs Dashboard
      description: |-
        Background-queue observability: whether the durable queue is configured
        and reachable, current queue depth (with a sample), the worker heartbeat
        (completed/failed/retried/ongoing) and the configured cron schedule.
      operationId: jobs_dashboard_api_v1_admin_jobs_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Jobs Dashboard Api V1 Admin Jobs Get
      security:
        - HTTPBearer: []
  /api/v1/admin/backup:
    post:
      tags:
        - Admin
      summary: Backup
      description: Export system configuration as a JSON backup file.
      operationId: backup_api_v1_admin_backup_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      security:
        - HTTPBearer: []
  /api/v1/admin/audit-log:
    get:
      tags:
        - Admin
      summary: Audit Log
      description: Retrieve paginated audit log entries with optional filters.
      operationId: audit_log_api_v1_admin_audit_log_get
      security:
        - HTTPBearer: []
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
            title: Page
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            maximum: 200
            minimum: 1
            default: 50
            title: Page Size
        - name: action
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Action
        - name: user_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: User Id
        - name: resource_type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Resource Type
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Audit Log Api V1 Admin Audit Log Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/admin/scim/token:
    get:
      tags:
        - Admin
      summary: Scim Token Status
      description: |-
        Whether SCIM provisioning is enabled for this tenant + the base URL an IdP
        should use (the token itself is never returned after creation).
      operationId: scim_token_status_api_v1_admin_scim_token_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Scim Token Status Api V1 Admin Scim Token Get
      security:
        - HTTPBearer: []
    post:
      tags:
        - Admin
      summary: Generate Scim Token
      description: Generate (or rotate) the tenant's SCIM bearer token. Returned once.
      operationId: generate_scim_token_api_v1_admin_scim_token_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Generate Scim Token Api V1 Admin Scim Token Post
      security:
        - HTTPBearer: []
    delete:
      tags:
        - Admin
      summary: Revoke Scim Token
      description: Disable SCIM provisioning for this tenant.
      operationId: revoke_scim_token_api_v1_admin_scim_token_delete
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
      security:
        - HTTPBearer: []
  /api/v1/admin/privacy/users/{user_id}/export:
    get:
      tags:
        - Privacy
      summary: Export User Data
      description: 'DSGVO Art. 15: download all personal data held about a data subject.'
      operationId: export_user_data_api_v1_admin_privacy_users__user_id__export_get
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/admin/privacy/users/{user_id}/erase:
    post:
      tags:
        - Privacy
      summary: Erase User Data
      description: 'DSGVO Art. 17: pseudonymise a data subject and remove auth artefacts.'
      operationId: erase_user_data_api_v1_admin_privacy_users__user_id__erase_post
      security:
        - HTTPBearer: []
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/admin/modules:
    get:
      tags:
        - Modules
      summary: Get Modules
      operationId: get_modules_api_v1_admin_modules_get
      security:
        - HTTPBearer: []
      parameters:
        - name: scope
          in: query
          required: false
          schema:
            type: string
            pattern: ^(instance|tenant)$
            default: tenant
            title: Scope
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Get Modules Api V1 Admin Modules Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - Modules
      summary: Set Modules
      operationId: set_modules_api_v1_admin_modules_put
      security:
        - HTTPBearer: []
      parameters:
        - name: scope
          in: query
          required: false
          schema:
            type: string
            pattern: ^(instance|tenant)$
            default: tenant
            title: Scope
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HiddenModulesUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Set Modules Api V1 Admin Modules Put
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/media/{media_id}:
    get:
      tags:
        - Media
      summary: Serve Media
      operationId: serve_media_api_media__media_id__get
      parameters:
        - name: media_id
          in: path
          required: true
          schema:
            type: string
            title: Media Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /scim/v2/ServiceProviderConfig:
    get:
      tags:
        - SCIM
      summary: Service Provider Config
      operationId: service_provider_config_scim_v2_ServiceProviderConfig_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Service Provider Config Scim V2 Serviceproviderconfig Get
  /scim/v2/ResourceTypes:
    get:
      tags:
        - SCIM
      summary: Resource Types
      operationId: resource_types_scim_v2_ResourceTypes_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Resource Types Scim V2 Resourcetypes Get
  /scim/v2/Schemas:
    get:
      tags:
        - SCIM
      summary: Schemas
      operationId: schemas_scim_v2_Schemas_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Schemas Scim V2 Schemas Get
  /scim/v2/Users:
    get:
      tags:
        - SCIM
      summary: List Users
      operationId: list_users_scim_v2_Users_get
      parameters:
        - name: filter
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Filter
        - name: startIndex
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
            title: Startindex
        - name: count
          in: query
          required: false
          schema:
            type: integer
            maximum: 200
            minimum: 0
            default: 100
            title: Count
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response List Users Scim V2 Users Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    post:
      tags:
        - SCIM
      summary: Create User
      operationId: create_user_scim_v2_Users_post
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Create User Scim V2 Users Post
  /scim/v2/Users/{user_id}:
    get:
      tags:
        - SCIM
      summary: Get User
      operationId: get_user_scim_v2_Users__user_id__get
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Get User Scim V2 Users  User Id  Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
        - SCIM
      summary: Replace User
      operationId: replace_user_scim_v2_Users__user_id__put
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Replace User Scim V2 Users  User Id  Put
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    patch:
      tags:
        - SCIM
      summary: Patch User
      operationId: patch_user_scim_v2_Users__user_id__patch
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Patch User Scim V2 Users  User Id  Patch
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
        - SCIM
      summary: Delete User
      operationId: delete_user_scim_v2_Users__user_id__delete
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            title: User Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /scim/v2/Groups:
    get:
      tags:
        - SCIM
      summary: List Groups
      operationId: list_groups_scim_v2_Groups_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response List Groups Scim V2 Groups Get
  /scim/v2/Groups/{group_id}:
    get:
      tags:
        - SCIM
      summary: Get Group
      operationId: get_group_scim_v2_Groups__group_id__get
      parameters:
        - name: group_id
          in: path
          required: true
          schema:
            type: string
            title: Group Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Get Group Scim V2 Groups  Group Id  Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /health:
    get:
      tags:
        - Health
      summary: Health Check
      description: Lightweight health probe for load balancers and orchestrators.
      operationId: health_check_health_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                additionalProperties: true
                type: object
                title: Response Health Check Health Get
components:
  schemas:
    AclRuleCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        action:
          type: string
          maxLength: 16
          title: Action
          default: allow
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
        destination:
          anyOf:
            - type: string
            - type: 'null'
          title: Destination
        port:
          anyOf:
            - type: integer
              maximum: 65535
              minimum: 0
            - type: 'null'
          title: Port
        protocol:
          anyOf:
            - type: string
            - type: 'null'
          title: Protocol
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: AclRuleCreate
    AclRuleResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        action:
          type: string
          title: Action
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
        destination:
          anyOf:
            - type: string
            - type: 'null'
          title: Destination
        port:
          anyOf:
            - type: integer
            - type: 'null'
          title: Port
        protocol:
          anyOf:
            - type: string
            - type: 'null'
          title: Protocol
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - action
        - source
        - destination
        - port
        - protocol
        - description
        - created_at
        - updated_at
      title: AclRuleResponse
    AclRuleUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        action:
          anyOf:
            - type: string
              maxLength: 16
            - type: 'null'
          title: Action
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
        destination:
          anyOf:
            - type: string
            - type: 'null'
          title: Destination
        port:
          anyOf:
            - type: integer
              maximum: 65535
              minimum: 0
            - type: 'null'
          title: Port
        protocol:
          anyOf:
            - type: string
            - type: 'null'
          title: Protocol
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: AclRuleUpdate
    AdminSetPasswordRequest:
      properties:
        new_password:
          type: string
          maxLength: 128
          minLength: 8
          title: New Password
        send_email:
          type: boolean
          title: Send Email
          default: false
      type: object
      required:
        - new_password
      title: AdminSetPasswordRequest
      description: 'Admin action: set a user''s password directly.'
    AgentMetricsRequest:
      properties:
        machine_id:
          type: string
          maxLength: 128
          minLength: 1
          title: Machine Id
        hostname:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Hostname
        os:
          anyOf:
            - type: string
              maxLength: 128
            - type: 'null'
          title: Os
        cpu_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Cpu Pct
        mem_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Mem Pct
        disk_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Disk Pct
        uptime_s:
          anyOf:
            - type: integer
            - type: 'null'
          title: Uptime S
        net_in_bytes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Net In Bytes
        net_out_bytes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Net Out Bytes
        load1:
          anyOf:
            - type: number
            - type: 'null'
          title: Load1
        extra:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Extra
      type: object
      required:
        - machine_id
      title: AgentMetricsRequest
    AgentMetricsResponse:
      properties:
        host_id:
          type: string
          title: Host Id
        created:
          type: boolean
          title: Created
      type: object
      required:
        - host_id
        - created
      title: AgentMetricsResponse
    AgentReportRequest:
      properties:
        machine_id:
          type: string
          maxLength: 128
          minLength: 1
          title: Machine Id
        hostname:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Hostname
        os:
          anyOf:
            - type: string
              maxLength: 128
            - type: 'null'
          title: Os
        os_version:
          anyOf:
            - type: string
              maxLength: 128
            - type: 'null'
          title: Os Version
        manufacturer:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Manufacturer
        model:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Model
        serial_number:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Serial Number
        ip_address:
          anyOf:
            - type: string
              maxLength: 45
            - type: 'null'
          title: Ip Address
        software:
          items:
            $ref: '#/components/schemas/SoftwareItem'
          type: array
          title: Software
      type: object
      required:
        - machine_id
      title: AgentReportRequest
    AgentReportResponse:
      properties:
        asset_id:
          type: string
          title: Asset Id
        created:
          type: boolean
          title: Created
        software_count:
          type: integer
          title: Software Count
      type: object
      required:
        - asset_id
        - created
        - software_count
      title: AgentReportResponse
    AlertEventResponse:
      properties:
        id:
          type: string
          title: Id
        rule_id:
          type: string
          title: Rule Id
        host_id:
          type: string
          title: Host Id
        state:
          $ref: '#/components/schemas/AlertState'
        value:
          anyOf:
            - type: number
            - type: 'null'
          title: Value
        started_at:
          type: string
          format: date-time
          title: Started At
        resolved_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Resolved At
      type: object
      required:
        - id
        - rule_id
        - host_id
        - state
        - value
        - started_at
        - resolved_at
      title: AlertEventResponse
    AlertRuleCreate:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        metric:
          type: string
          maxLength: 32
          title: Metric
        comparator:
          $ref: '#/components/schemas/Comparator'
        threshold:
          type: number
          title: Threshold
        for_seconds:
          type: integer
          minimum: 0
          title: For Seconds
          default: 0
        severity:
          $ref: '#/components/schemas/Severity'
          default: warning
        host_id:
          anyOf:
            - type: string
              maxLength: 36
            - type: 'null'
          title: Host Id
        enabled:
          type: boolean
          title: Enabled
          default: true
      type: object
      required:
        - name
        - metric
        - comparator
        - threshold
      title: AlertRuleCreate
    AlertRuleResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        metric:
          type: string
          title: Metric
        comparator:
          $ref: '#/components/schemas/Comparator'
        threshold:
          type: number
          title: Threshold
        for_seconds:
          type: integer
          title: For Seconds
        severity:
          $ref: '#/components/schemas/Severity'
        host_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Host Id
        enabled:
          type: boolean
          title: Enabled
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - id
        - tenant_id
        - name
        - metric
        - comparator
        - threshold
        - for_seconds
        - severity
        - host_id
        - enabled
        - created_at
      title: AlertRuleResponse
    AlertRuleUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Name
        metric:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Metric
        comparator:
          anyOf:
            - $ref: '#/components/schemas/Comparator'
            - type: 'null'
        threshold:
          anyOf:
            - type: number
            - type: 'null'
          title: Threshold
        for_seconds:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: For Seconds
        severity:
          anyOf:
            - $ref: '#/components/schemas/Severity'
            - type: 'null'
        host_id:
          anyOf:
            - type: string
              maxLength: 36
            - type: 'null'
          title: Host Id
        enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enabled
      type: object
      title: AlertRuleUpdate
    AlertState:
      type: string
      enum:
        - firing
        - resolved
      title: AlertState
    ApiTokenCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        scopes:
          anyOf:
            - type: string
            - type: 'null'
          title: Scopes
        expires_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Expires At
      type: object
      required:
        - name
      title: ApiTokenCreate
    ApiTokenCreated:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        user_id:
          type: string
          title: User Id
        name:
          type: string
          title: Name
        prefix:
          type: string
          title: Prefix
        scopes:
          anyOf:
            - type: string
            - type: 'null'
          title: Scopes
        expires_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Expires At
        last_used_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Used At
        is_active:
          type: boolean
          title: Is Active
        created_at:
          type: string
          format: date-time
          title: Created At
        token:
          type: string
          title: Token
      type: object
      required:
        - id
        - tenant_id
        - user_id
        - name
        - prefix
        - scopes
        - expires_at
        - last_used_at
        - is_active
        - created_at
        - token
      title: ApiTokenCreated
      description: Returned once on creation — includes the plaintext token.
    ApiTokenResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        user_id:
          type: string
          title: User Id
        name:
          type: string
          title: Name
        prefix:
          type: string
          title: Prefix
        scopes:
          anyOf:
            - type: string
            - type: 'null'
          title: Scopes
        expires_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Expires At
        last_used_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Used At
        is_active:
          type: boolean
          title: Is Active
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - id
        - tenant_id
        - user_id
        - name
        - prefix
        - scopes
        - expires_at
        - last_used_at
        - is_active
        - created_at
      title: ApiTokenResponse
      description: Token metadata — never includes the secret value.
    ApprovalStatus:
      type: string
      enum:
        - approved
        - in_review
        - blocked
      title: ApprovalStatus
    AssetCreate:
      properties:
        asset_type:
          $ref: '#/components/schemas/AssetType'
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        serial_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Serial Number
        manufacturer:
          anyOf:
            - type: string
            - type: 'null'
          title: Manufacturer
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Model
        status:
          $ref: '#/components/schemas/AssetStatus'
          default: active
        location:
          anyOf:
            - type: string
            - type: 'null'
          title: Location
        rack_position:
          anyOf:
            - type: string
            - type: 'null'
          title: Rack Position
        purchase_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Purchase Date
        warranty_expiry:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Warranty Expiry
        end_of_life:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Of Life
        end_of_support:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Of Support
        supplier:
          anyOf:
            - type: string
            - type: 'null'
          title: Supplier
        purchase_cost:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Purchase Cost
        salvage_value:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Salvage Value
        depreciation_method:
          $ref: '#/components/schemas/DepreciationMethod'
          default: none
        useful_life_months:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Useful Life Months
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        custom_fields:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Custom Fields
        assigned_to:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned To
        department:
          anyOf:
            - type: string
            - type: 'null'
          title: Department
        tags:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Tags
        data_classification:
          $ref: '#/components/schemas/DataClassification'
          default: none
        business_data_classification:
          anyOf:
            - type: string
            - type: 'null'
          title: Business Data Classification
        review_frequency:
          anyOf:
            - $ref: '#/components/schemas/ReviewFrequency'
            - type: 'null'
        business_function:
          anyOf:
            - type: string
            - type: 'null'
          title: Business Function
        compliance_notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Compliance Notes
      type: object
      required:
        - asset_type
        - name
      title: AssetCreate
      description: Schema for creating an asset.
    AssetListResponse:
      properties:
        items:
          items:
            $ref: '#/components/schemas/AssetResponse'
          type: array
          title: Items
        total:
          type: integer
          title: Total
        page:
          type: integer
          title: Page
        page_size:
          type: integer
          title: Page Size
        total_pages:
          type: integer
          title: Total Pages
      type: object
      required:
        - items
        - total
        - page
        - page_size
        - total_pages
      title: AssetListResponse
      description: Paginated list of assets.
    AssetResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        asset_type:
          $ref: '#/components/schemas/AssetType'
        name:
          type: string
          title: Name
        serial_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Serial Number
        manufacturer:
          anyOf:
            - type: string
            - type: 'null'
          title: Manufacturer
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Model
        status:
          $ref: '#/components/schemas/AssetStatus'
        location:
          anyOf:
            - type: string
            - type: 'null'
          title: Location
        rack_position:
          anyOf:
            - type: string
            - type: 'null'
          title: Rack Position
        purchase_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Purchase Date
        warranty_expiry:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Warranty Expiry
        end_of_life:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Of Life
        end_of_support:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Of Support
        supplier:
          anyOf:
            - type: string
            - type: 'null'
          title: Supplier
        purchase_cost:
          anyOf:
            - type: number
            - type: 'null'
          title: Purchase Cost
        salvage_value:
          anyOf:
            - type: number
            - type: 'null'
          title: Salvage Value
        depreciation_method:
          $ref: '#/components/schemas/DepreciationMethod'
        useful_life_months:
          anyOf:
            - type: integer
            - type: 'null'
          title: Useful Life Months
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        custom_fields:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Custom Fields
        assigned_to:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned To
        department:
          anyOf:
            - type: string
            - type: 'null'
          title: Department
        tags:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Tags
        qr_code_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Qr Code Url
        data_classification:
          $ref: '#/components/schemas/DataClassification'
        business_data_classification:
          anyOf:
            - type: string
            - type: 'null'
          title: Business Data Classification
        review_frequency:
          anyOf:
            - $ref: '#/components/schemas/ReviewFrequency'
            - type: 'null'
        business_function:
          anyOf:
            - type: string
            - type: 'null'
          title: Business Function
        compliance_notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Compliance Notes
        created_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Created By
        updated_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Updated By
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
        deleted_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Deleted At
        current_book_value:
          anyOf:
            - type: number
            - type: 'null'
          title: Current Book Value
          description: Straight-line book value as of today (None if not depreciated).
          readOnly: true
      type: object
      required:
        - id
        - tenant_id
        - asset_type
        - name
        - serial_number
        - manufacturer
        - model
        - status
        - location
        - rack_position
        - purchase_date
        - warranty_expiry
        - end_of_life
        - end_of_support
        - supplier
        - purchase_cost
        - salvage_value
        - depreciation_method
        - useful_life_months
        - notes
        - custom_fields
        - assigned_to
        - department
        - tags
        - qr_code_url
        - data_classification
        - business_data_classification
        - review_frequency
        - business_function
        - compliance_notes
        - created_by
        - updated_by
        - created_at
        - updated_at
        - current_book_value
      title: AssetResponse
      description: Full asset representation in API responses.
    AssetStatus:
      type: string
      enum:
        - active
        - inactive
        - maintenance
        - retired
        - disposed
      title: AssetStatus
    AssetType:
      type: string
      enum:
        - hardware
        - software
        - network
        - certificate
        - license
        - peripheral
      title: AssetType
    AssetUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Name
        asset_type:
          anyOf:
            - $ref: '#/components/schemas/AssetType'
            - type: 'null'
        serial_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Serial Number
        manufacturer:
          anyOf:
            - type: string
            - type: 'null'
          title: Manufacturer
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Model
        status:
          anyOf:
            - $ref: '#/components/schemas/AssetStatus'
            - type: 'null'
        location:
          anyOf:
            - type: string
            - type: 'null'
          title: Location
        rack_position:
          anyOf:
            - type: string
            - type: 'null'
          title: Rack Position
        purchase_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Purchase Date
        warranty_expiry:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Warranty Expiry
        end_of_life:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Of Life
        end_of_support:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Of Support
        supplier:
          anyOf:
            - type: string
            - type: 'null'
          title: Supplier
        purchase_cost:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Purchase Cost
        salvage_value:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Salvage Value
        depreciation_method:
          anyOf:
            - $ref: '#/components/schemas/DepreciationMethod'
            - type: 'null'
        useful_life_months:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Useful Life Months
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        custom_fields:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Custom Fields
        assigned_to:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned To
        department:
          anyOf:
            - type: string
            - type: 'null'
          title: Department
        tags:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Tags
        data_classification:
          anyOf:
            - $ref: '#/components/schemas/DataClassification'
            - type: 'null'
        business_data_classification:
          anyOf:
            - type: string
            - type: 'null'
          title: Business Data Classification
        review_frequency:
          anyOf:
            - $ref: '#/components/schemas/ReviewFrequency'
            - type: 'null'
        business_function:
          anyOf:
            - type: string
            - type: 'null'
          title: Business Function
        compliance_notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Compliance Notes
      type: object
      title: AssetUpdate
      description: Schema for updating an asset — all fields optional.
    AssignmentResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        asset_id:
          type: string
          title: Asset Id
        assignee_name:
          type: string
          title: Assignee Name
        assignee_contact_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assignee Contact Id
        assigned_user_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned User Id
        checked_out_at:
          type: string
          format: date-time
          title: Checked Out At
        due_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Due At
        checked_in_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Checked In At
        status:
          type: string
          title: Status
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - asset_id
        - assignee_name
        - assignee_contact_id
        - assigned_user_id
        - checked_out_at
        - due_at
        - checked_in_at
        - status
        - note
        - created_at
        - updated_at
      title: AssignmentResponse
    AttachmentResponse:
      properties:
        id:
          type: string
          title: Id
        entity_type:
          type: string
          title: Entity Type
        entity_id:
          type: string
          title: Entity Id
        filename:
          type: string
          title: Filename
        content_type:
          type: string
          title: Content Type
        size_bytes:
          type: integer
          title: Size Bytes
        created_at:
          type: string
          title: Created At
      type: object
      required:
        - id
        - entity_type
        - entity_id
        - filename
        - content_type
        - size_bytes
        - created_at
      title: AttachmentResponse
    AutomationRuleBody:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        object_type:
          type: string
          title: Object Type
        trigger_event:
          type: string
          title: Trigger Event
          default: created
        conditions:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Conditions
        action_type:
          type: string
          title: Action Type
          default: notify
        action_config:
          additionalProperties: true
          type: object
          title: Action Config
        enabled:
          type: boolean
          title: Enabled
          default: true
      type: object
      required:
        - name
        - object_type
      title: AutomationRuleBody
    AutomationRuleResponse:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        object_type:
          type: string
          title: Object Type
        trigger_event:
          type: string
          title: Trigger Event
          default: created
        conditions:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Conditions
        action_type:
          type: string
          title: Action Type
          default: notify
        action_config:
          additionalProperties: true
          type: object
          title: Action Config
        enabled:
          type: boolean
          title: Enabled
          default: true
        id:
          type: string
          title: Id
      type: object
      required:
        - name
        - object_type
        - id
      title: AutomationRuleResponse
    Body_import_assets_api_v1_assets_import_post:
      properties:
        file:
          type: string
          contentMediaType: application/octet-stream
          title: File
      type: object
      required:
        - file
      title: Body_import_assets_api_v1_assets_import_post
    Body_upload_attachment_api_v1_attachments_post:
      properties:
        file:
          type: string
          contentMediaType: application/octet-stream
          title: File
        entity_type:
          type: string
          title: Entity Type
        entity_id:
          type: string
          title: Entity Id
      type: object
      required:
        - file
        - entity_type
        - entity_id
      title: Body_upload_attachment_api_v1_attachments_post
    Body_upload_favicon_api_v1_instance_favicon_post:
      properties:
        file:
          type: string
          contentMediaType: application/octet-stream
          title: File
      type: object
      required:
        - file
      title: Body_upload_favicon_api_v1_instance_favicon_post
    Body_upload_logo_api_v1_instance_logo_post:
      properties:
        file:
          type: string
          contentMediaType: application/octet-stream
          title: File
      type: object
      required:
        - file
      title: Body_upload_logo_api_v1_instance_logo_post
    CategoryCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        parent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Parent Id
        color:
          anyOf:
            - type: string
              maxLength: 7
            - type: 'null'
          title: Color
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: CategoryCreate
    CategoryResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        parent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Parent Id
        color:
          anyOf:
            - type: string
            - type: 'null'
          title: Color
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - parent_id
        - color
        - description
        - created_at
        - updated_at
      title: CategoryResponse
    CategoryUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        parent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Parent Id
        color:
          anyOf:
            - type: string
              maxLength: 7
            - type: 'null'
          title: Color
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: CategoryUpdate
    CertificateCreate:
      properties:
        common_name:
          type: string
          maxLength: 255
          minLength: 1
          title: Common Name
        san:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: San
        issuer:
          anyOf:
            - type: string
            - type: 'null'
          title: Issuer
        valid_from:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Valid From
        valid_to:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Valid To
        fingerprint_sha256:
          anyOf:
            - type: string
            - type: 'null'
          title: Fingerprint Sha256
        key_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Key Type
        key_size:
          anyOf:
            - type: integer
            - type: 'null'
          title: Key Size
        auto_renew:
          type: boolean
          title: Auto Renew
          default: false
        status:
          $ref: '#/components/schemas/CertificateStatus'
          default: active
        associated_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Associated Asset Id
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      required:
        - common_name
      title: CertificateCreate
    CertificateResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        common_name:
          type: string
          title: Common Name
        san:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: San
        issuer:
          anyOf:
            - type: string
            - type: 'null'
          title: Issuer
        valid_from:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Valid From
        valid_to:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Valid To
        fingerprint_sha256:
          anyOf:
            - type: string
            - type: 'null'
          title: Fingerprint Sha256
        key_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Key Type
        key_size:
          anyOf:
            - type: integer
            - type: 'null'
          title: Key Size
        auto_renew:
          type: boolean
          title: Auto Renew
        status:
          $ref: '#/components/schemas/CertificateStatus'
        associated_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Associated Asset Id
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - common_name
        - san
        - issuer
        - valid_from
        - valid_to
        - fingerprint_sha256
        - key_type
        - key_size
        - auto_renew
        - status
        - associated_asset_id
        - notes
        - created_at
        - updated_at
      title: CertificateResponse
    CertificateStatus:
      type: string
      enum:
        - active
        - expiring_soon
        - expired
        - revoked
      title: CertificateStatus
    CertificateUpdate:
      properties:
        common_name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Common Name
        san:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: San
        issuer:
          anyOf:
            - type: string
            - type: 'null'
          title: Issuer
        valid_from:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Valid From
        valid_to:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Valid To
        fingerprint_sha256:
          anyOf:
            - type: string
            - type: 'null'
          title: Fingerprint Sha256
        key_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Key Type
        key_size:
          anyOf:
            - type: integer
            - type: 'null'
          title: Key Size
        auto_renew:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Auto Renew
        status:
          anyOf:
            - $ref: '#/components/schemas/CertificateStatus'
            - type: 'null'
        associated_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Associated Asset Id
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      title: CertificateUpdate
    CheckoutRequest:
      properties:
        asset_id:
          type: string
          title: Asset Id
        assignee_name:
          type: string
          maxLength: 255
          minLength: 1
          title: Assignee Name
        assignee_contact_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assignee Contact Id
        assigned_user_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned User Id
        due_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Due At
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
      type: object
      required:
        - asset_id
        - assignee_name
      title: CheckoutRequest
    Comparator:
      type: string
      enum:
        - '>'
        - '>='
        - <
        - <=
        - '=='
      title: Comparator
    ComplianceFramework:
      type: string
      enum:
        - iso27001
        - c5
        - custom
      title: ComplianceFramework
    ConfigTemplateCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        template_type:
          type: string
          maxLength: 32
          title: Template Type
          default: provisioning
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: ConfigTemplateCreate
    ConfigTemplateResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        template_type:
          type: string
          title: Template Type
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - template_type
        - content
        - description
        - created_at
        - updated_at
      title: ConfigTemplateResponse
    ConfigTemplateUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        template_type:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Template Type
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: ConfigTemplateUpdate
    ContactCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        email:
          anyOf:
            - type: string
            - type: 'null'
          title: Email
        phone:
          anyOf:
            - type: string
            - type: 'null'
          title: Phone
        company:
          anyOf:
            - type: string
            - type: 'null'
          title: Company
        role_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Role Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        is_support:
          type: boolean
          title: Is Support
          default: false
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: ContactCreate
    ContactGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: ContactGroupCreate
    ContactGroupResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - description
        - created_at
        - updated_at
      title: ContactGroupResponse
    ContactGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: ContactGroupUpdate
    ContactResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        email:
          anyOf:
            - type: string
            - type: 'null'
          title: Email
        phone:
          anyOf:
            - type: string
            - type: 'null'
          title: Phone
        company:
          anyOf:
            - type: string
            - type: 'null'
          title: Company
        role_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Role Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        is_support:
          type: boolean
          title: Is Support
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - email
        - phone
        - company
        - role_id
        - group_id
        - is_support
        - description
        - created_at
        - updated_at
      title: ContactResponse
    ContactRoleCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: ContactRoleCreate
    ContactRoleResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - description
        - created_at
        - updated_at
      title: ContactRoleResponse
    ContactRoleUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: ContactRoleUpdate
    ContactUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        email:
          anyOf:
            - type: string
            - type: 'null'
          title: Email
        phone:
          anyOf:
            - type: string
            - type: 'null'
          title: Phone
        company:
          anyOf:
            - type: string
            - type: 'null'
          title: Company
        role_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Role Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        is_support:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Support
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: ContactUpdate
    CustomFieldCreate:
      properties:
        entity_type:
          type: string
          maxLength: 64
          minLength: 1
          title: Entity Type
        name:
          type: string
          maxLength: 64
          minLength: 1
          title: Name
        label:
          type: string
          maxLength: 128
          minLength: 1
          title: Label
        field_type:
          type: string
          maxLength: 32
          title: Field Type
          default: text
        options:
          anyOf:
            - type: string
            - type: 'null'
          title: Options
        required:
          type: boolean
          title: Required
          default: false
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - entity_type
        - name
        - label
      title: CustomFieldCreate
    CustomFieldResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        entity_type:
          type: string
          title: Entity Type
        name:
          type: string
          title: Name
        label:
          type: string
          title: Label
        field_type:
          type: string
          title: Field Type
        options:
          anyOf:
            - type: string
            - type: 'null'
          title: Options
        required:
          type: boolean
          title: Required
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - entity_type
        - name
        - label
        - field_type
        - options
        - required
        - description
        - created_at
        - updated_at
      title: CustomFieldResponse
    CustomFieldUpdate:
      properties:
        entity_type:
          anyOf:
            - type: string
              maxLength: 64
              minLength: 1
            - type: 'null'
          title: Entity Type
        name:
          anyOf:
            - type: string
              maxLength: 64
              minLength: 1
            - type: 'null'
          title: Name
        label:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Label
        field_type:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Field Type
        options:
          anyOf:
            - type: string
            - type: 'null'
          title: Options
        required:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Required
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: CustomFieldUpdate
    DataClassification:
      type: string
      enum:
        - none
        - medium
        - high
        - very_high
      title: DataClassification
    DatacenterCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        location_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Location Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: DatacenterCreate
    DatacenterResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        location_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Location Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - location_id
        - description
        - created_at
        - updated_at
      title: DatacenterResponse
    DatacenterUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        location_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Location Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: DatacenterUpdate
    DepartmentCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        parent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Parent Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: DepartmentCreate
    DepartmentResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        parent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Parent Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - parent_id
        - description
        - created_at
        - updated_at
      title: DepartmentResponse
    DepartmentUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        parent_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Parent Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: DepartmentUpdate
    DepreciationMethod:
      type: string
      enum:
        - none
        - straight_line
      title: DepreciationMethod
    DeviceStatus:
      type: string
      enum:
        - new
        - imported
        - ignored
      title: DeviceStatus
    DiscoveredDeviceResponse:
      properties:
        id:
          type: string
          title: Id
        scan_job_id:
          type: string
          title: Scan Job Id
        ip_address:
          type: string
          title: Ip Address
        hostname:
          anyOf:
            - type: string
            - type: 'null'
          title: Hostname
        mac_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Mac Address
        open_ports:
          anyOf:
            - items:
                type: integer
              type: array
            - type: 'null'
          title: Open Ports
        os_guess:
          anyOf:
            - type: string
            - type: 'null'
          title: Os Guess
        status:
          $ref: '#/components/schemas/DeviceStatus'
        asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Id
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - id
        - scan_job_id
        - ip_address
        - hostname
        - mac_address
        - open_ports
        - os_guess
        - status
        - asset_id
        - created_at
      title: DiscoveredDeviceResponse
    EnrollmentCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
      type: object
      required:
        - name
      title: EnrollmentCreate
    EnrollmentCreatedResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        active:
          type: boolean
          title: Active
        last_seen_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Seen At
        created_at:
          type: string
          format: date-time
          title: Created At
        token:
          type: string
          title: Token
      type: object
      required:
        - id
        - tenant_id
        - name
        - active
        - last_seen_at
        - created_at
        - token
      title: EnrollmentCreatedResponse
    EnrollmentResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        active:
          type: boolean
          title: Active
        last_seen_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Seen At
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - id
        - tenant_id
        - name
        - active
        - last_seen_at
        - created_at
      title: EnrollmentResponse
    EntitlementsResponse:
      properties:
        tier:
          type: string
          title: Tier
        features:
          items:
            type: string
          type: array
          title: Features
        max_assets:
          type: integer
          title: Max Assets
        asset_count:
          type: integer
          title: Asset Count
        asset_limit_reached:
          type: boolean
          title: Asset Limit Reached
        max_tenants:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tenants
        tenant_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Tenant Count
        tenant_limit_reached:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Tenant Limit Reached
      type: object
      required:
        - tier
        - features
        - max_assets
        - asset_count
        - asset_limit_reached
      title: EntitlementsResponse
      description: Effective capabilities for the current tenant.
    FirewallConfigCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        config_type:
          type: string
          maxLength: 32
          title: Config Type
          default: default
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: FirewallConfigCreate
    FirewallConfigResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        config_type:
          type: string
          title: Config Type
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - config_type
        - content
        - description
        - created_at
        - updated_at
      title: FirewallConfigResponse
    FirewallConfigUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        config_type:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Config Type
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: FirewallConfigUpdate
    FooterLink:
      properties:
        key:
          type: string
          title: Key
        url:
          type: string
          title: Url
      type: object
      required:
        - key
        - url
      title: FooterLink
      description: A resolved, visible footer legal link (key + effective URL).
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    HiddenModulesUpdate:
      properties:
        hidden:
          items:
            type: string
          type: array
          title: Hidden
          default: []
      type: object
      title: HiddenModulesUpdate
    HostCreate:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        address:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Address
        asset_id:
          anyOf:
            - type: string
              maxLength: 36
            - type: 'null'
          title: Asset Id
        check_ping:
          type: boolean
          title: Check Ping
          default: true
        check_tcp_port:
          anyOf:
            - type: integer
              maximum: 65535
              minimum: 1
            - type: 'null'
          title: Check Tcp Port
        check_http_url:
          anyOf:
            - type: string
              maxLength: 512
            - type: 'null'
          title: Check Http Url
        enabled:
          type: boolean
          title: Enabled
          default: true
      type: object
      required:
        - name
      title: HostCreate
    HostResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        host_type:
          $ref: '#/components/schemas/HostType'
        address:
          anyOf:
            - type: string
            - type: 'null'
          title: Address
        asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Id
        check_ping:
          type: boolean
          title: Check Ping
        check_tcp_port:
          anyOf:
            - type: integer
            - type: 'null'
          title: Check Tcp Port
        check_http_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Check Http Url
        machine_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Machine Id
        enabled:
          type: boolean
          title: Enabled
        current_status:
          $ref: '#/components/schemas/HostStatus'
        last_checked_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Checked At
        last_seen_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Seen At
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - id
        - tenant_id
        - name
        - host_type
        - address
        - asset_id
        - check_ping
        - check_tcp_port
        - check_http_url
        - machine_id
        - enabled
        - current_status
        - last_checked_at
        - last_seen_at
        - created_at
      title: HostResponse
    HostStatus:
      type: string
      enum:
        - up
        - down
        - unknown
      title: HostStatus
    HostType:
      type: string
      enum:
        - agent
        - manual
      title: HostType
    HostUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Name
        address:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Address
        asset_id:
          anyOf:
            - type: string
              maxLength: 36
            - type: 'null'
          title: Asset Id
        check_ping:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Check Ping
        check_tcp_port:
          anyOf:
            - type: integer
              maximum: 65535
              minimum: 1
            - type: 'null'
          title: Check Tcp Port
        check_http_url:
          anyOf:
            - type: string
              maxLength: 512
            - type: 'null'
          title: Check Http Url
        enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enabled
      type: object
      title: HostUpdate
    IPAddressCreate:
      properties:
        address:
          type: string
          maxLength: 45
          minLength: 1
          title: Address
        subnet_mask:
          anyOf:
            - type: string
            - type: 'null'
          title: Subnet Mask
        gateway:
          anyOf:
            - type: string
            - type: 'null'
          title: Gateway
        vlan_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Vlan Id
        dns_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Dns Name
        status:
          $ref: '#/components/schemas/IPStatus'
          default: available
        assigned_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - address
      title: IPAddressCreate
    IPAddressResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        address:
          type: string
          title: Address
        subnet_mask:
          anyOf:
            - type: string
            - type: 'null'
          title: Subnet Mask
        gateway:
          anyOf:
            - type: string
            - type: 'null'
          title: Gateway
        vlan_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Vlan Id
        dns_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Dns Name
        status:
          $ref: '#/components/schemas/IPStatus'
        assigned_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - address
        - subnet_mask
        - gateway
        - vlan_id
        - dns_name
        - status
        - assigned_asset_id
        - description
        - created_at
        - updated_at
      title: IPAddressResponse
    IPAddressUpdate:
      properties:
        address:
          anyOf:
            - type: string
              maxLength: 45
              minLength: 1
            - type: 'null'
          title: Address
        subnet_mask:
          anyOf:
            - type: string
            - type: 'null'
          title: Subnet Mask
        gateway:
          anyOf:
            - type: string
            - type: 'null'
          title: Gateway
        vlan_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Vlan Id
        dns_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Dns Name
        status:
          anyOf:
            - $ref: '#/components/schemas/IPStatus'
            - type: 'null'
        assigned_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: IPAddressUpdate
    IPRangeCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        cidr:
          type: string
          maxLength: 45
          minLength: 1
          title: Cidr
        gateway:
          anyOf:
            - type: string
            - type: 'null'
          title: Gateway
        vlan_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Vlan Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
        - cidr
      title: IPRangeCreate
    IPRangeResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        cidr:
          type: string
          title: Cidr
        gateway:
          anyOf:
            - type: string
            - type: 'null'
          title: Gateway
        vlan_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Vlan Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - cidr
        - gateway
        - vlan_id
        - description
        - created_at
        - updated_at
      title: IPRangeResponse
    IPRangeUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        cidr:
          anyOf:
            - type: string
              maxLength: 45
              minLength: 1
            - type: 'null'
          title: Cidr
        gateway:
          anyOf:
            - type: string
            - type: 'null'
          title: Gateway
        vlan_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Vlan Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: IPRangeUpdate
    IPStatus:
      type: string
      enum:
        - available
        - assigned
        - reserved
        - deprecated
      title: IPStatus
    ImportDeviceRequest:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Name
        asset_type:
          $ref: '#/components/schemas/AssetType'
          default: hardware
        location:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: Location
        department:
          anyOf:
            - type: string
              maxLength: 128
            - type: 'null'
          title: Department
      type: object
      title: ImportDeviceRequest
      description: Optional overrides when importing a discovered device as an asset.
    InstanceSettingsPublic:
      properties:
        site_name:
          type: string
          title: Site Name
        server_name:
          type: string
          title: Server Name
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
        favicon_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Favicon Url
        primary_color:
          type: string
          title: Primary Color
        secondary_color:
          type: string
          title: Secondary Color
        login_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Login Message
        imprint_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Imprint Url
        privacy_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Privacy Url
        terms_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Terms Url
        legal_info_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Legal Info Url
        cancel_contract_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Cancel Contract Url
        footer_links_enabled:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Footer Links Enabled
        footer_links:
          items:
            $ref: '#/components/schemas/FooterLink'
          type: array
          title: Footer Links
          default: []
        audit_retention_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Audit Retention Days
        journal_retention_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Journal Retention Days
        default_language:
          type: string
          title: Default Language
          default: en
        enabled_languages:
          items:
            type: string
          type: array
          title: Enabled Languages
          default:
            - en
            - de
        allow_password_reset:
          type: boolean
          title: Allow Password Reset
          default: false
        require_2fa:
          type: boolean
          title: Require 2Fa
          default: false
        asset_handover_form_required:
          type: boolean
          title: Asset Handover Form Required
          default: false
        asset_handover_template:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Handover Template
        show_help_hints:
          type: boolean
          title: Show Help Hints
          default: true
        demo_mode:
          type: boolean
          title: Demo Mode
          default: false
        default_theme:
          type: string
          title: Default Theme
          default: notory
        trash_enabled:
          type: boolean
          title: Trash Enabled
          default: true
        trash_retention_days:
          type: integer
          title: Trash Retention Days
          default: 30
      type: object
      required:
        - site_name
        - server_name
        - primary_color
        - secondary_color
      title: InstanceSettingsPublic
      description: |-
        Public branding info — returned without authentication so the frontend
        can set the browser-tab title, logo and login branding before login.
    InstanceSettingsResponse:
      properties:
        site_name:
          type: string
          title: Site Name
        server_name:
          type: string
          title: Server Name
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
        favicon_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Favicon Url
        primary_color:
          type: string
          title: Primary Color
        secondary_color:
          type: string
          title: Secondary Color
        login_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Login Message
        imprint_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Imprint Url
        privacy_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Privacy Url
        terms_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Terms Url
        legal_info_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Legal Info Url
        cancel_contract_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Cancel Contract Url
        footer_links_enabled:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Footer Links Enabled
        footer_links:
          items:
            $ref: '#/components/schemas/FooterLink'
          type: array
          title: Footer Links
          default: []
        audit_retention_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Audit Retention Days
        journal_retention_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Journal Retention Days
        default_language:
          type: string
          title: Default Language
          default: en
        enabled_languages:
          items:
            type: string
          type: array
          title: Enabled Languages
          default:
            - en
            - de
        allow_password_reset:
          type: boolean
          title: Allow Password Reset
          default: false
        require_2fa:
          type: boolean
          title: Require 2Fa
          default: false
        asset_handover_form_required:
          type: boolean
          title: Asset Handover Form Required
          default: false
        asset_handover_template:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Handover Template
        show_help_hints:
          type: boolean
          title: Show Help Hints
          default: true
        demo_mode:
          type: boolean
          title: Demo Mode
          default: false
        default_theme:
          type: string
          title: Default Theme
          default: notory
        trash_enabled:
          type: boolean
          title: Trash Enabled
          default: true
        trash_retention_days:
          type: integer
          title: Trash Retention Days
          default: 30
        id:
          type: string
          title: Id
        updated_at:
          type: string
          format: date-time
          title: Updated At
        updated_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Updated By
        allow_self_service_password_reset:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Self Service Password Reset
      type: object
      required:
        - site_name
        - server_name
        - primary_color
        - secondary_color
        - id
        - updated_at
      title: InstanceSettingsResponse
      description: Full settings response (authenticated).
    InstanceSettingsUpdate:
      properties:
        site_name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Site Name
        server_name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Server Name
        primary_color:
          anyOf:
            - type: string
              pattern: ^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            - type: 'null'
          title: Primary Color
        secondary_color:
          anyOf:
            - type: string
              pattern: ^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
            - type: 'null'
          title: Secondary Color
        login_message:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Login Message
        imprint_url:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Imprint Url
        privacy_url:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Privacy Url
        terms_url:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Terms Url
        legal_info_url:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Legal Info Url
        cancel_contract_url:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Cancel Contract Url
        footer_links_enabled:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Footer Links Enabled
        audit_retention_days:
          anyOf:
            - type: integer
              maximum: 3650
              minimum: 0
            - type: 'null'
          title: Audit Retention Days
        journal_retention_days:
          anyOf:
            - type: integer
              maximum: 3650
              minimum: 0
            - type: 'null'
          title: Journal Retention Days
        default_language:
          anyOf:
            - type: string
              maxLength: 8
            - type: 'null'
          title: Default Language
        enabled_languages:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Enabled Languages
        allow_self_service_password_reset:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Self Service Password Reset
        require_2fa:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Require 2Fa
        asset_handover_form_required:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Asset Handover Form Required
        asset_handover_template:
          anyOf:
            - type: string
              maxLength: 5000
            - type: 'null'
          title: Asset Handover Template
        show_help_hints:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Show Help Hints
        default_theme:
          anyOf:
            - type: string
              enum:
                - dark
                - light
                - notory
            - type: 'null'
          title: Default Theme
      type: object
      title: InstanceSettingsUpdate
      description: Editable instance settings. All fields optional (partial update).
    JournalCreate:
      properties:
        source:
          type: string
          maxLength: 64
          minLength: 1
          title: Source
        level:
          type: string
          maxLength: 16
          title: Level
          default: info
        event:
          type: string
          maxLength: 128
          minLength: 1
          title: Event
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
      type: object
      required:
        - source
        - event
      title: JournalCreate
    JournalResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        source:
          type: string
          title: Source
        level:
          type: string
          title: Level
        event:
          type: string
          title: Event
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - source
        - level
        - event
        - message
        - created_at
        - updated_at
      title: JournalResponse
    JournalUpdate:
      properties:
        source:
          anyOf:
            - type: string
              maxLength: 64
              minLength: 1
            - type: 'null'
          title: Source
        level:
          anyOf:
            - type: string
              maxLength: 16
            - type: 'null'
          title: Level
        event:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Event
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
      type: object
      title: JournalUpdate
    LanguageUpdate:
      properties:
        language:
          type: string
          maxLength: 8
          minLength: 2
          title: Language
      type: object
      required:
        - language
      title: LanguageUpdate
      description: Set the current user's preferred UI language.
    LicenseStatusResponse:
      properties:
        valid:
          type: boolean
          title: Valid
        tier:
          type: string
          title: Tier
        licensee:
          anyOf:
            - type: string
            - type: 'null'
          title: Licensee
        max_assets:
          type: integer
          title: Max Assets
        max_tenants:
          type: integer
          title: Max Tenants
        features:
          items:
            type: string
          type: array
          title: Features
        expires_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Expires At
        reason:
          type: string
          title: Reason
        instance_id:
          type: string
          title: Instance Id
        bound:
          type: boolean
          title: Bound
        asset_count:
          type: integer
          title: Asset Count
        asset_limit_reached:
          type: boolean
          title: Asset Limit Reached
      type: object
      required:
        - valid
        - tier
        - licensee
        - max_assets
        - max_tenants
        - features
        - expires_at
        - reason
        - instance_id
        - bound
        - asset_count
        - asset_limit_reached
      title: LicenseStatusResponse
    LicenseType:
      type: string
      enum:
        - perpetual
        - subscription
        - trial
      title: LicenseType
    LinkCreate:
      properties:
        to_record_id:
          type: string
          title: To Record Id
        relation_type:
          type: string
          title: Relation Type
          default: related
      type: object
      required:
        - to_record_id
      title: LinkCreate
    LocationCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        address:
          anyOf:
            - type: string
            - type: 'null'
          title: Address
        city:
          anyOf:
            - type: string
            - type: 'null'
          title: City
        postal_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Postal Code
        country:
          anyOf:
            - type: string
            - type: 'null'
          title: Country
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: LocationCreate
    LocationGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: LocationGroupCreate
    LocationGroupResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - description
        - created_at
        - updated_at
      title: LocationGroupResponse
    LocationGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: LocationGroupUpdate
    LocationResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        address:
          anyOf:
            - type: string
            - type: 'null'
          title: Address
        city:
          anyOf:
            - type: string
            - type: 'null'
          title: City
        postal_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Postal Code
        country:
          anyOf:
            - type: string
            - type: 'null'
          title: Country
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - group_id
        - address
        - city
        - postal_code
        - country
        - description
        - created_at
        - updated_at
      title: LocationResponse
    LocationUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        address:
          anyOf:
            - type: string
            - type: 'null'
          title: Address
        city:
          anyOf:
            - type: string
            - type: 'null'
          title: City
        postal_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Postal Code
        country:
          anyOf:
            - type: string
            - type: 'null'
          title: Country
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: LocationUpdate
    LoginRequest:
      properties:
        email:
          type: string
          format: email
          title: Email
        password:
          type: string
          maxLength: 128
          minLength: 8
          title: Password
        totp_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Totp Code
      type: object
      required:
        - email
        - password
      title: LoginRequest
      description: Credentials for user login.
    MaintenanceCreate:
      properties:
        asset_id:
          type: string
          title: Asset Id
        title:
          type: string
          maxLength: 255
          minLength: 1
          title: Title
        maintenance_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Maintenance Type
        status:
          $ref: '#/components/schemas/MaintenanceStatus'
          default: scheduled
        scheduled_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Scheduled Date
        completed_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Completed Date
        cost:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Cost
        performed_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Performed By
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      required:
        - asset_id
        - title
      title: MaintenanceCreate
    MaintenanceResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        asset_id:
          type: string
          title: Asset Id
        title:
          type: string
          title: Title
        maintenance_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Maintenance Type
        status:
          $ref: '#/components/schemas/MaintenanceStatus'
        scheduled_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Scheduled Date
        completed_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Completed Date
        cost:
          anyOf:
            - type: number
            - type: 'null'
          title: Cost
        performed_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Performed By
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - asset_id
        - title
        - maintenance_type
        - status
        - scheduled_date
        - completed_date
        - cost
        - performed_by
        - notes
        - created_at
        - updated_at
      title: MaintenanceResponse
    MaintenanceStatus:
      type: string
      enum:
        - scheduled
        - in_progress
        - completed
        - cancelled
      title: MaintenanceStatus
    MaintenanceUpdate:
      properties:
        title:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Title
        maintenance_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Maintenance Type
        status:
          anyOf:
            - $ref: '#/components/schemas/MaintenanceStatus'
            - type: 'null'
        scheduled_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Scheduled Date
        completed_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Completed Date
        cost:
          anyOf:
            - type: number
              minimum: 0
            - type: 'null'
          title: Cost
        performed_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Performed By
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      title: MaintenanceUpdate
    MeResponse:
      properties:
        id:
          type: string
          title: Id
        email:
          type: string
          title: Email
        first_name:
          type: string
          title: First Name
        last_name:
          type: string
          title: Last Name
        role:
          type: string
          title: Role
        tenant_id:
          type: string
          title: Tenant Id
        is_active:
          type: boolean
          title: Is Active
        avatar_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Avatar Url
        totp_enabled:
          type: boolean
          title: Totp Enabled
        must_setup_2fa:
          type: boolean
          title: Must Setup 2Fa
          default: false
        must_change_password:
          type: boolean
          title: Must Change Password
          default: false
        permissions:
          items:
            type: string
          type: array
          title: Permissions
          default: []
        is_admin:
          type: boolean
          title: Is Admin
          default: false
        show_help_hints:
          type: boolean
          title: Show Help Hints
          default: true
        hidden_modules:
          items:
            type: string
          type: array
          title: Hidden Modules
          default: []
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
        last_login:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Login
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - email
        - first_name
        - last_name
        - role
        - tenant_id
        - is_active
        - totp_enabled
        - created_at
        - updated_at
      title: MeResponse
      description: |-
        Current-user representation tailored to the frontend's `User` shape.

        The frontend expects split first/last name, an avatar field and the
        frontend role vocabulary (super_admin / tenant_admin / ...), so this DTO
        maps the backend user accordingly.
    MyAssignmentResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        asset_id:
          type: string
          title: Asset Id
        assignee_name:
          type: string
          title: Assignee Name
        assignee_contact_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assignee Contact Id
        assigned_user_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned User Id
        checked_out_at:
          type: string
          format: date-time
          title: Checked Out At
        due_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Due At
        checked_in_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Checked In At
        status:
          type: string
          title: Status
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
        asset_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Name
        asset_serial_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Serial Number
        asset_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Type
      type: object
      required:
        - id
        - tenant_id
        - asset_id
        - assignee_name
        - assignee_contact_id
        - assigned_user_id
        - checked_out_at
        - due_at
        - checked_in_at
        - status
        - note
        - created_at
        - updated_at
      title: MyAssignmentResponse
      description: A current user's active assignment enriched with basic asset info.
    NotificationCreate:
      properties:
        title:
          type: string
          maxLength: 255
          minLength: 1
          title: Title
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
        level:
          type: string
          maxLength: 16
          title: Level
          default: info
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
      type: object
      required:
        - title
      title: NotificationCreate
    NotificationGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        recipients:
          anyOf:
            - type: string
            - type: 'null'
          title: Recipients
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: NotificationGroupCreate
    NotificationGroupResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        recipients:
          anyOf:
            - type: string
            - type: 'null'
          title: Recipients
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - recipients
        - description
        - created_at
        - updated_at
      title: NotificationGroupResponse
    NotificationGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        recipients:
          anyOf:
            - type: string
            - type: 'null'
          title: Recipients
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: NotificationGroupUpdate
    NotificationResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        title:
          type: string
          title: Title
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
        level:
          type: string
          title: Level
        is_read:
          type: boolean
          title: Is Read
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - title
        - message
        - level
        - is_read
        - group_id
        - created_at
        - updated_at
      title: NotificationResponse
    NotificationUpdate:
      properties:
        title:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Title
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
        level:
          anyOf:
            - type: string
              maxLength: 16
            - type: 'null'
          title: Level
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        is_read:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Read
      type: object
      title: NotificationUpdate
    ObjectTypeCreate:
      properties:
        key:
          type: string
          maxLength: 64
          minLength: 1
          pattern: ^[a-z0-9_]+$
          title: Key
        label:
          type: string
          maxLength: 128
          minLength: 1
          title: Label
        label_plural:
          anyOf:
            - type: string
            - type: 'null'
          title: Label Plural
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        icon:
          anyOf:
            - type: string
            - type: 'null'
          title: Icon
        color:
          anyOf:
            - type: string
            - type: 'null'
          title: Color
      type: object
      required:
        - key
        - label
      title: ObjectTypeCreate
    ObjectTypeResponse:
      properties:
        id:
          type: string
          title: Id
        key:
          type: string
          title: Key
        label:
          type: string
          title: Label
        label_plural:
          anyOf:
            - type: string
            - type: 'null'
          title: Label Plural
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        icon:
          anyOf:
            - type: string
            - type: 'null'
          title: Icon
        color:
          anyOf:
            - type: string
            - type: 'null'
          title: Color
      type: object
      required:
        - id
        - key
        - label
        - label_plural
        - description
        - icon
        - color
      title: ObjectTypeResponse
    ObjectTypeUpdate:
      properties:
        label:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Label
        label_plural:
          anyOf:
            - type: string
            - type: 'null'
          title: Label Plural
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        icon:
          anyOf:
            - type: string
            - type: 'null'
          title: Icon
        color:
          anyOf:
            - type: string
            - type: 'null'
          title: Color
      type: object
      title: ObjectTypeUpdate
    OperatingSystemCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        version:
          anyOf:
            - type: string
            - type: 'null'
          title: Version
        family:
          anyOf:
            - type: string
            - type: 'null'
          title: Family
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: OperatingSystemCreate
    OperatingSystemResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        version:
          anyOf:
            - type: string
            - type: 'null'
          title: Version
        family:
          anyOf:
            - type: string
            - type: 'null'
          title: Family
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - version
        - family
        - description
        - created_at
        - updated_at
      title: OperatingSystemResponse
    OperatingSystemUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        version:
          anyOf:
            - type: string
            - type: 'null'
          title: Version
        family:
          anyOf:
            - type: string
            - type: 'null'
          title: Family
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: OperatingSystemUpdate
    OverviewResponse:
      properties:
        total:
          type: integer
          title: Total
        up:
          type: integer
          title: Up
        down:
          type: integer
          title: Down
        unknown:
          type: integer
          title: Unknown
        recent_alerts:
          items:
            $ref: '#/components/schemas/AlertEventResponse'
          type: array
          title: Recent Alerts
      type: object
      required:
        - total
        - up
        - down
        - unknown
      title: OverviewResponse
    PasswordChangeRequest:
      properties:
        old_password:
          type: string
          maxLength: 128
          minLength: 8
          title: Old Password
        new_password:
          type: string
          maxLength: 128
          minLength: 8
          title: New Password
      type: object
      required:
        - old_password
        - new_password
      title: PasswordChangeRequest
      description: Request body for changing the current user's password.
    PasswordResetConfirmRequest:
      properties:
        token:
          type: string
          maxLength: 512
          minLength: 10
          title: Token
        new_password:
          type: string
          maxLength: 128
          minLength: 8
          title: New Password
      type: object
      required:
        - token
        - new_password
      title: PasswordResetConfirmRequest
      description: Request body to complete a password reset with a token.
    PasswordResetRequest:
      properties:
        email:
          type: string
          format: email
          title: Email
      type: object
      required:
        - email
      title: PasswordResetRequest
      description: Request body for initiating a password reset.
    PermissionCatalogResponse:
      properties:
        permissions:
          items:
            type: string
          type: array
          title: Permissions
      type: object
      required:
        - permissions
      title: PermissionCatalogResponse
    PolicyCreate:
      properties:
        framework:
          $ref: '#/components/schemas/ComplianceFramework'
        reference_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Reference Id
        title:
          type: string
          maxLength: 255
          minLength: 1
          title: Title
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
        status:
          $ref: '#/components/schemas/PolicyStatus'
          default: draft
      type: object
      required:
        - framework
        - title
      title: PolicyCreate
    PolicyResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        framework:
          $ref: '#/components/schemas/ComplianceFramework'
        reference_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Reference Id
        title:
          type: string
          title: Title
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
        status:
          $ref: '#/components/schemas/PolicyStatus'
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - framework
        - reference_id
        - title
        - description
        - category
        - status
        - created_at
        - updated_at
      title: PolicyResponse
    PolicyStatus:
      type: string
      enum:
        - draft
        - active
        - review
        - archived
      title: PolicyStatus
    PolicyUpdate:
      properties:
        framework:
          anyOf:
            - $ref: '#/components/schemas/ComplianceFramework'
            - type: 'null'
        reference_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Reference Id
        title:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Title
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
        status:
          anyOf:
            - $ref: '#/components/schemas/PolicyStatus'
            - type: 'null'
      type: object
      title: PolicyUpdate
    PortServiceCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Id
        port:
          anyOf:
            - type: integer
              maximum: 65535
              minimum: 0
            - type: 'null'
          title: Port
        protocol:
          anyOf:
            - type: string
            - type: 'null'
          title: Protocol
        service_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Service Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: PortServiceCreate
    PortServiceResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Id
        port:
          anyOf:
            - type: integer
            - type: 'null'
          title: Port
        protocol:
          anyOf:
            - type: string
            - type: 'null'
          title: Protocol
        service_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Service Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - asset_id
        - port
        - protocol
        - service_name
        - description
        - created_at
        - updated_at
      title: PortServiceResponse
    PortServiceUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Id
        port:
          anyOf:
            - type: integer
              maximum: 65535
              minimum: 0
            - type: 'null'
          title: Port
        protocol:
          anyOf:
            - type: string
            - type: 'null'
          title: Protocol
        service_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Service Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: PortServiceUpdate
    RackCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        datacenter_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Datacenter Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        role:
          anyOf:
            - type: string
            - type: 'null'
          title: Role
        height_units:
          anyOf:
            - type: integer
              maximum: 60
              minimum: 1
            - type: 'null'
          title: Height Units
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: RackCreate
    RackGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: RackGroupCreate
    RackGroupResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - description
        - created_at
        - updated_at
      title: RackGroupResponse
    RackGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: RackGroupUpdate
    RackResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        datacenter_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Datacenter Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        role:
          anyOf:
            - type: string
            - type: 'null'
          title: Role
        height_units:
          anyOf:
            - type: integer
            - type: 'null'
          title: Height Units
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - datacenter_id
        - group_id
        - role
        - height_units
        - description
        - created_at
        - updated_at
      title: RackResponse
    RackUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        datacenter_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Datacenter Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        role:
          anyOf:
            - type: string
            - type: 'null'
          title: Role
        height_units:
          anyOf:
            - type: integer
              maximum: 60
              minimum: 1
            - type: 'null'
          title: Height Units
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: RackUpdate
    RecordCreate:
      properties:
        object_type:
          type: string
          title: Object Type
        data:
          additionalProperties: true
          type: object
          title: Data
      type: object
      required:
        - object_type
      title: RecordCreate
    RecordImport:
      properties:
        object_type:
          type: string
          title: Object Type
        rows:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Rows
        mapping:
          additionalProperties:
            type: string
          type: object
          title: Mapping
        key_field:
          anyOf:
            - type: string
            - type: 'null'
          title: Key Field
      type: object
      required:
        - object_type
      title: RecordImport
    RecordListResponse:
      properties:
        items:
          items:
            $ref: '#/components/schemas/RecordResponse'
          type: array
          title: Items
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
      type: object
      required:
        - items
      title: RecordListResponse
    RecordResponse:
      properties:
        id:
          type: string
          title: Id
        object_type:
          type: string
          title: Object Type
        data:
          additionalProperties: true
          type: object
          title: Data
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
        created_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Created By
        updated_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Updated By
      type: object
      required:
        - id
        - object_type
        - data
        - created_at
        - updated_at
        - created_by
        - updated_by
      title: RecordResponse
    RecordUpdate:
      properties:
        data:
          additionalProperties: true
          type: object
          title: Data
      type: object
      title: RecordUpdate
    RegisterRequest:
      properties:
        email:
          type: string
          format: email
          title: Email
        username:
          type: string
          maxLength: 128
          minLength: 3
          title: Username
        password:
          type: string
          maxLength: 128
          minLength: 8
          title: Password
        full_name:
          type: string
          maxLength: 255
          minLength: 1
          title: Full Name
        tenant_id:
          type: string
          title: Tenant Id
      type: object
      required:
        - email
        - username
        - password
        - full_name
        - tenant_id
      title: RegisterRequest
      description: Data required to register a new user.
    RenderRequest:
      properties:
        variables:
          additionalProperties: true
          type: object
          title: Variables
          default: {}
      type: object
      title: RenderRequest
    RenderResponse:
      properties:
        rendered:
          type: string
          title: Rendered
      type: object
      required:
        - rendered
      title: RenderResponse
    ReportCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        object_type:
          type: string
          maxLength: 64
          minLength: 1
          title: Object Type
        config:
          additionalProperties: true
          type: object
          title: Config
        schedule:
          anyOf:
            - type: string
            - type: 'null'
          title: Schedule
      type: object
      required:
        - name
        - object_type
      title: ReportCreate
    ReportResponse:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        object_type:
          type: string
          title: Object Type
        config:
          additionalProperties: true
          type: object
          title: Config
        schedule:
          anyOf:
            - type: string
            - type: 'null'
          title: Schedule
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - name
        - description
        - object_type
        - config
        - schedule
        - created_at
        - updated_at
      title: ReportResponse
    ReportUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        config:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Config
        schedule:
          anyOf:
            - type: string
            - type: 'null'
          title: Schedule
      type: object
      title: ReportUpdate
    ReviewFrequency:
      type: string
      enum:
        - monthly
        - quarterly
        - semi_annually
        - annually
      title: ReviewFrequency
    RiskAssessmentCreate:
      properties:
        asset_id:
          type: string
          title: Asset Id
        risk_level:
          $ref: '#/components/schemas/RiskLevel'
        likelihood:
          type: integer
          maximum: 5
          minimum: 1
          title: Likelihood
        impact:
          type: integer
          maximum: 5
          minimum: 1
          title: Impact
        mitigation:
          anyOf:
            - type: string
            - type: 'null'
          title: Mitigation
        review_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Review Date
        reviewer_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Reviewer Id
      type: object
      required:
        - asset_id
        - risk_level
        - likelihood
        - impact
      title: RiskAssessmentCreate
    RiskAssessmentResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        asset_id:
          type: string
          title: Asset Id
        risk_level:
          $ref: '#/components/schemas/RiskLevel'
        likelihood:
          type: integer
          title: Likelihood
        impact:
          type: integer
          title: Impact
        mitigation:
          anyOf:
            - type: string
            - type: 'null'
          title: Mitigation
        review_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Review Date
        reviewer_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Reviewer Id
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - asset_id
        - risk_level
        - likelihood
        - impact
        - mitigation
        - review_date
        - reviewer_id
        - created_at
        - updated_at
      title: RiskAssessmentResponse
    RiskAssessmentUpdate:
      properties:
        risk_level:
          anyOf:
            - $ref: '#/components/schemas/RiskLevel'
            - type: 'null'
        likelihood:
          anyOf:
            - type: integer
              maximum: 5
              minimum: 1
            - type: 'null'
          title: Likelihood
        impact:
          anyOf:
            - type: integer
              maximum: 5
              minimum: 1
            - type: 'null'
          title: Impact
        mitigation:
          anyOf:
            - type: string
            - type: 'null'
          title: Mitigation
        review_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Review Date
        reviewer_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Reviewer Id
      type: object
      title: RiskAssessmentUpdate
    RiskLevel:
      type: string
      enum:
        - low
        - medium
        - high
        - critical
      title: RiskLevel
    RoleCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Description
        permissions:
          items:
            type: string
          type: array
          title: Permissions
          default: []
        scope:
          type: string
          enum:
            - global
            - tenant
          title: Scope
          default: tenant
      type: object
      required:
        - name
      title: RoleCreate
    RoleResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Tenant Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        permissions:
          items:
            type: string
          type: array
          title: Permissions
        is_system:
          type: boolean
          title: Is System
      type: object
      required:
        - id
        - tenant_id
        - name
        - description
        - permissions
        - is_system
      title: RoleResponse
    RoleUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
              maxLength: 2000
            - type: 'null'
          title: Description
        permissions:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Permissions
      type: object
      title: RoleUpdate
    RollupResponse:
      properties:
        bucket:
          type: string
          format: date-time
          title: Bucket
        granularity:
          type: string
          title: Granularity
        cpu_avg:
          anyOf:
            - type: number
            - type: 'null'
          title: Cpu Avg
        cpu_max:
          anyOf:
            - type: number
            - type: 'null'
          title: Cpu Max
        mem_avg:
          anyOf:
            - type: number
            - type: 'null'
          title: Mem Avg
        mem_max:
          anyOf:
            - type: number
            - type: 'null'
          title: Mem Max
        disk_avg:
          anyOf:
            - type: number
            - type: 'null'
          title: Disk Avg
        disk_max:
          anyOf:
            - type: number
            - type: 'null'
          title: Disk Max
        sample_count:
          type: integer
          title: Sample Count
      type: object
      required:
        - bucket
        - granularity
        - sample_count
      title: RollupResponse
    SampleResponse:
      properties:
        ts:
          type: string
          format: date-time
          title: Ts
        cpu_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Cpu Pct
        mem_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Mem Pct
        disk_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Disk Pct
        uptime_s:
          anyOf:
            - type: integer
            - type: 'null'
          title: Uptime S
        net_in_bytes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Net In Bytes
        net_out_bytes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Net Out Bytes
        load1:
          anyOf:
            - type: number
            - type: 'null'
          title: Load1
        up:
          anyOf:
            - type: integer
            - type: 'null'
          title: Up
        latency_ms:
          anyOf:
            - type: number
            - type: 'null'
          title: Latency Ms
        extra:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Extra
      type: object
      required:
        - ts
      title: SampleResponse
    SavedViewCreate:
      properties:
        entity:
          type: string
          title: Entity
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        config:
          additionalProperties: true
          type: object
          title: Config
        is_shared:
          type: boolean
          title: Is Shared
          default: false
      type: object
      required:
        - entity
        - name
      title: SavedViewCreate
    SavedViewResponse:
      properties:
        id:
          type: string
          title: Id
        entity:
          type: string
          title: Entity
        name:
          type: string
          title: Name
        config:
          additionalProperties: true
          type: object
          title: Config
        is_shared:
          type: boolean
          title: Is Shared
        owner_user_id:
          type: string
          title: Owner User Id
      type: object
      required:
        - id
        - entity
        - name
        - config
        - is_shared
        - owner_user_id
      title: SavedViewResponse
    SavedViewUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        config:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Config
        is_shared:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Shared
      type: object
      title: SavedViewUpdate
    ScanCreate:
      properties:
        target:
          type: string
          maxLength: 128
          minLength: 3
          title: Target
        ports:
          anyOf:
            - items:
                type: integer
              type: array
            - type: 'null'
          title: Ports
        snmp_community:
          anyOf:
            - type: string
              maxLength: 128
            - type: 'null'
          title: Snmp Community
      type: object
      required:
        - target
      title: ScanCreate
    ScanJobResponse:
      properties:
        id:
          type: string
          title: Id
        target:
          type: string
          title: Target
        ports:
          anyOf:
            - items:
                type: integer
              type: array
            - type: 'null'
          title: Ports
        status:
          $ref: '#/components/schemas/ScanStatus'
        total_hosts:
          type: integer
          title: Total Hosts
        alive_hosts:
          type: integer
          title: Alive Hosts
        discovered:
          type: integer
          title: Discovered
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
        started_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Started At
        finished_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Finished At
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - id
        - target
        - ports
        - status
        - total_hosts
        - alive_hosts
        - discovered
        - error
        - started_at
        - finished_at
        - created_at
      title: ScanJobResponse
    ScanStatus:
      type: string
      enum:
        - pending
        - running
        - completed
        - failed
      title: ScanStatus
    Severity:
      type: string
      enum:
        - info
        - warning
        - critical
      title: Severity
    SoftwareCreate:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        vendor:
          anyOf:
            - type: string
            - type: 'null'
          title: Vendor
        version:
          anyOf:
            - type: string
            - type: 'null'
          title: Version
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
        approval_status:
          $ref: '#/components/schemas/ApprovalStatus'
          default: in_review
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      required:
        - name
      title: SoftwareCreate
    SoftwareItem:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        version:
          anyOf:
            - type: string
              maxLength: 128
            - type: 'null'
          title: Version
      type: object
      required:
        - name
      title: SoftwareItem
    SoftwareLicenseCreate:
      properties:
        software_id:
          type: string
          title: Software Id
        license_key:
          anyOf:
            - type: string
            - type: 'null'
          title: License Key
        license_type:
          $ref: '#/components/schemas/LicenseType'
          default: subscription
        seats:
          type: integer
          minimum: 1
          title: Seats
          default: 1
        seats_used:
          type: integer
          minimum: 0
          title: Seats Used
          default: 0
        cost:
          anyOf:
            - type: number
            - type: 'null'
          title: Cost
        currency:
          type: string
          maxLength: 3
          title: Currency
          default: EUR
        purchase_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Purchase Date
        expiry_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Expiry Date
        vendor:
          anyOf:
            - type: string
            - type: 'null'
          title: Vendor
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      required:
        - software_id
      title: SoftwareLicenseCreate
    SoftwareLicenseResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        software_id:
          type: string
          title: Software Id
        license_key:
          anyOf:
            - type: string
            - type: 'null'
          title: License Key
        license_type:
          $ref: '#/components/schemas/LicenseType'
        seats:
          type: integer
          title: Seats
        seats_used:
          type: integer
          title: Seats Used
        cost:
          anyOf:
            - type: number
            - type: 'null'
          title: Cost
        currency:
          type: string
          title: Currency
        purchase_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Purchase Date
        expiry_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Expiry Date
        vendor:
          anyOf:
            - type: string
            - type: 'null'
          title: Vendor
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - software_id
        - license_key
        - license_type
        - seats
        - seats_used
        - cost
        - currency
        - purchase_date
        - expiry_date
        - vendor
        - notes
        - created_at
        - updated_at
      title: SoftwareLicenseResponse
    SoftwareLicenseUpdate:
      properties:
        license_key:
          anyOf:
            - type: string
            - type: 'null'
          title: License Key
        license_type:
          anyOf:
            - $ref: '#/components/schemas/LicenseType'
            - type: 'null'
        seats:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Seats
        seats_used:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Seats Used
        cost:
          anyOf:
            - type: number
            - type: 'null'
          title: Cost
        currency:
          anyOf:
            - type: string
              maxLength: 3
            - type: 'null'
          title: Currency
        purchase_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Purchase Date
        expiry_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Expiry Date
        vendor:
          anyOf:
            - type: string
            - type: 'null'
          title: Vendor
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      title: SoftwareLicenseUpdate
    SoftwareResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        vendor:
          anyOf:
            - type: string
            - type: 'null'
          title: Vendor
        version:
          anyOf:
            - type: string
            - type: 'null'
          title: Version
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
        approval_status:
          $ref: '#/components/schemas/ApprovalStatus'
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - vendor
        - version
        - category
        - approval_status
        - notes
        - created_at
        - updated_at
      title: SoftwareResponse
    SoftwareUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Name
        vendor:
          anyOf:
            - type: string
            - type: 'null'
          title: Vendor
        version:
          anyOf:
            - type: string
            - type: 'null'
          title: Version
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
        approval_status:
          anyOf:
            - $ref: '#/components/schemas/ApprovalStatus'
            - type: 'null'
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
      type: object
      title: SoftwareUpdate
    SshKeyCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        public_key:
          type: string
          minLength: 1
          title: Public Key
        key_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Key Type
        fingerprint:
          anyOf:
            - type: string
            - type: 'null'
          title: Fingerprint
        comment:
          anyOf:
            - type: string
            - type: 'null'
          title: Comment
        assigned_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
        - public_key
      title: SshKeyCreate
    SshKeyResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        public_key:
          type: string
          title: Public Key
        key_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Key Type
        fingerprint:
          anyOf:
            - type: string
            - type: 'null'
          title: Fingerprint
        comment:
          anyOf:
            - type: string
            - type: 'null'
          title: Comment
        assigned_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - public_key
        - key_type
        - fingerprint
        - comment
        - assigned_asset_id
        - description
        - created_at
        - updated_at
      title: SshKeyResponse
    SshKeyUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        public_key:
          anyOf:
            - type: string
              minLength: 1
            - type: 'null'
          title: Public Key
        key_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Key Type
        fingerprint:
          anyOf:
            - type: string
            - type: 'null'
          title: Fingerprint
        comment:
          anyOf:
            - type: string
            - type: 'null'
          title: Comment
        assigned_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Assigned Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: SshKeyUpdate
    SsoConfigCreate:
      properties:
        provider_name:
          type: string
          maxLength: 128
          minLength: 1
          title: Provider Name
        protocol:
          type: string
          maxLength: 16
          title: Protocol
          default: oidc
        enabled:
          type: boolean
          title: Enabled
          default: false
        discovery_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Discovery Url
        client_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Client Id
        client_secret:
          anyOf:
            - type: string
            - type: 'null'
          title: Client Secret
        scopes:
          anyOf:
            - type: string
            - type: 'null'
          title: Scopes
        saml_metadata_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Metadata Url
        saml_entity_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Entity Id
        default_role:
          type: string
          maxLength: 32
          title: Default Role
          default: viewer
        allow_jit:
          type: boolean
          title: Allow Jit
          default: false
        group_claim:
          anyOf:
            - type: string
              maxLength: 64
            - type: 'null'
          title: Group Claim
        group_role_map:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          title: Group Role Map
        sync_role_on_login:
          type: boolean
          title: Sync Role On Login
          default: false
      type: object
      required:
        - provider_name
      title: SsoConfigCreate
    SsoConfigResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        provider_name:
          type: string
          title: Provider Name
        protocol:
          type: string
          title: Protocol
        enabled:
          type: boolean
          title: Enabled
        discovery_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Discovery Url
        client_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Client Id
        scopes:
          anyOf:
            - type: string
            - type: 'null'
          title: Scopes
        saml_metadata_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Metadata Url
        saml_entity_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Entity Id
        default_role:
          type: string
          title: Default Role
        allow_jit:
          type: boolean
          title: Allow Jit
        group_claim:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Claim
        group_role_map:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          title: Group Role Map
        sync_role_on_login:
          type: boolean
          title: Sync Role On Login
          default: false
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - provider_name
        - protocol
        - enabled
        - discovery_url
        - client_id
        - scopes
        - saml_metadata_url
        - saml_entity_id
        - default_role
        - allow_jit
        - created_at
        - updated_at
      title: SsoConfigResponse
      description: Admin response — the client secret is intentionally omitted.
    SsoConfigUpdate:
      properties:
        provider_name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Provider Name
        protocol:
          anyOf:
            - type: string
              maxLength: 16
            - type: 'null'
          title: Protocol
        enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enabled
        discovery_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Discovery Url
        client_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Client Id
        client_secret:
          anyOf:
            - type: string
            - type: 'null'
          title: Client Secret
        scopes:
          anyOf:
            - type: string
            - type: 'null'
          title: Scopes
        saml_metadata_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Metadata Url
        saml_entity_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Entity Id
        default_role:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Default Role
        allow_jit:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Allow Jit
        group_claim:
          anyOf:
            - type: string
              maxLength: 64
            - type: 'null'
          title: Group Claim
        group_role_map:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          title: Group Role Map
        sync_role_on_login:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Sync Role On Login
      type: object
      title: SsoConfigUpdate
    SsoDiscoverProvider:
      properties:
        id:
          type: string
          title: Id
        provider_name:
          type: string
          title: Provider Name
        protocol:
          type: string
          title: Protocol
        start_url:
          type: string
          title: Start Url
      type: object
      required:
        - id
        - provider_name
        - protocol
        - start_url
      title: SsoDiscoverProvider
    SsoDiscoverRequest:
      properties:
        email:
          type: string
          format: email
          title: Email
      type: object
      required:
        - email
      title: SsoDiscoverRequest
      description: 'Home-realm discovery input: the user''s e-mail (the unique account key).'
    SsoDiscoverResponse:
      properties:
        providers:
          items:
            $ref: '#/components/schemas/SsoDiscoverProvider'
          type: array
          title: Providers
          default: []
      type: object
      title: SsoDiscoverResponse
      description: Enabled SSO providers for the tenant that owns the given e-mail (if any).
    SsoProviderPublic:
      properties:
        id:
          type: string
          title: Id
        provider_name:
          type: string
          title: Provider Name
        protocol:
          type: string
          title: Protocol
        login_url:
          type: string
          title: Login Url
      type: object
      required:
        - id
        - provider_name
        - protocol
        - login_url
      title: SsoProviderPublic
      description: Public info shown on the login screen for an enabled provider.
    SuccessResponse:
      properties:
        message:
          type: string
          title: Message
        data:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Data
      type: object
      required:
        - message
      title: SuccessResponse
      description: Generic success response.
    SupportContractCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        contact_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Contact Id
        sla_level:
          anyOf:
            - type: string
            - type: 'null'
          title: Sla Level
        start_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Start Date
        end_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Date
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: SupportContractCreate
    SupportContractResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        contact_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Contact Id
        sla_level:
          anyOf:
            - type: string
            - type: 'null'
          title: Sla Level
        start_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Start Date
        end_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Date
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - contact_id
        - sla_level
        - start_date
        - end_date
        - description
        - created_at
        - updated_at
      title: SupportContractResponse
    SupportContractUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        contact_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Contact Id
        sla_level:
          anyOf:
            - type: string
            - type: 'null'
          title: Sla Level
        start_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Start Date
        end_date:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: End Date
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: SupportContractUpdate
    TenantBrandingUpdate:
      properties:
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
        primary_color:
          anyOf:
            - type: string
              maxLength: 7
            - type: 'null'
          title: Primary Color
        secondary_color:
          anyOf:
            - type: string
              maxLength: 7
            - type: 'null'
          title: Secondary Color
      type: object
      title: TenantBrandingUpdate
      description: Schema for updating tenant branding only.
    TenantCreate:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        slug:
          type: string
          maxLength: 128
          minLength: 1
          pattern: ^[a-z0-9\-]+$
          title: Slug
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
        primary_color:
          type: string
          maxLength: 7
          title: Primary Color
          default: '#1a73e8'
        secondary_color:
          type: string
          maxLength: 7
          title: Secondary Color
          default: '#ffffff'
        license_tier:
          type: string
          maxLength: 32
          title: License Tier
          default: community
        max_assets:
          type: integer
          minimum: 1
          title: Max Assets
          default: 100
        settings:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Settings
        owner:
          $ref: '#/components/schemas/TenantOwnerCreate'
      type: object
      required:
        - name
        - slug
        - owner
      title: TenantCreate
      description: Schema for creating a new tenant together with its initial owner.
    TenantGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: TenantGroupCreate
    TenantGroupResponse:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - name
        - description
        - created_at
        - updated_at
      title: TenantGroupResponse
    TenantGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: TenantGroupUpdate
    TenantOwnerCreate:
      properties:
        email:
          type: string
          format: email
          title: Email
        username:
          type: string
          maxLength: 128
          minLength: 3
          title: Username
        full_name:
          type: string
          maxLength: 255
          minLength: 1
          title: Full Name
        password:
          type: string
          maxLength: 128
          minLength: 8
          title: Password
      type: object
      required:
        - email
        - username
        - full_name
        - password
      title: TenantOwnerCreate
      description: |-
        Initial owner (tenant admin) created together with a new tenant.

        A tenant is never created empty: the owner is the implicit owner = the
        tenant's admin user.
    TenantResponse:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
        slug:
          type: string
          title: Slug
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
        primary_color:
          type: string
          title: Primary Color
        secondary_color:
          type: string
          title: Secondary Color
        is_active:
          type: boolean
          title: Is Active
        require_2fa:
          type: boolean
          title: Require 2Fa
        default_language:
          anyOf:
            - type: string
            - type: 'null'
          title: Default Language
        show_help_hints:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Show Help Hints
        license_tier:
          type: string
          title: License Tier
        max_assets:
          type: integer
          title: Max Assets
        quota_max_records:
          anyOf:
            - type: integer
            - type: 'null'
          title: Quota Max Records
        quota_max_storage_mb:
          anyOf:
            - type: integer
            - type: 'null'
          title: Quota Max Storage Mb
        subscription_status:
          type: string
          title: Subscription Status
          default: none
        trial_ends_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Trial Ends At
        billing_cycle:
          anyOf:
            - type: string
            - type: 'null'
          title: Billing Cycle
        payment_method:
          anyOf:
            - type: string
            - type: 'null'
          title: Payment Method
        external_billing_ref:
          anyOf:
            - type: string
            - type: 'null'
          title: External Billing Ref
        settings:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Settings
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
        owner_email:
          anyOf:
            - type: string
            - type: 'null'
          title: Owner Email
        owner_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Owner Name
      type: object
      required:
        - id
        - name
        - slug
        - logo_url
        - primary_color
        - secondary_color
        - is_active
        - require_2fa
        - license_tier
        - max_assets
        - settings
        - created_at
        - updated_at
      title: TenantResponse
      description: Schema for tenant in API responses.
    TenantUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Name
        slug:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
              pattern: ^[a-z0-9\-]+$
            - type: 'null'
          title: Slug
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
        primary_color:
          anyOf:
            - type: string
              maxLength: 7
            - type: 'null'
          title: Primary Color
        secondary_color:
          anyOf:
            - type: string
              maxLength: 7
            - type: 'null'
          title: Secondary Color
        is_active:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Active
        require_2fa:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Require 2Fa
        default_language:
          anyOf:
            - type: string
              maxLength: 8
            - type: 'null'
          title: Default Language
        show_help_hints:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Show Help Hints
        license_tier:
          anyOf:
            - type: string
            - type: 'null'
          title: License Tier
        max_assets:
          anyOf:
            - type: integer
              minimum: 1
            - type: 'null'
          title: Max Assets
        quota_max_records:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Quota Max Records
        quota_max_storage_mb:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Quota Max Storage Mb
        settings:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Settings
        subscription_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Subscription Status
        trial_ends_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Trial Ends At
        billing_cycle:
          anyOf:
            - type: string
            - type: 'null'
          title: Billing Cycle
        payment_method:
          anyOf:
            - type: string
            - type: 'null'
          title: Payment Method
        external_billing_ref:
          anyOf:
            - type: string
              maxLength: 128
            - type: 'null'
          title: External Billing Ref
      type: object
      title: TenantUpdate
      description: Schema for updating a tenant — all fields optional.
    TotpDeviceCreate:
      properties:
        name:
          type: string
          maxLength: 64
          minLength: 1
          title: Name
      type: object
      required:
        - name
      title: TotpDeviceCreate
      description: Request body to start enrolling a new named TOTP device.
    TotpDeviceResponse:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
        confirmed:
          type: boolean
          title: Confirmed
        created_at:
          type: string
          format: date-time
          title: Created At
        last_used_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Used At
      type: object
      required:
        - id
        - name
        - confirmed
        - created_at
      title: TotpDeviceResponse
      description: A registered TOTP device (secret is never exposed).
    TotpDeviceSetupResponse:
      properties:
        device_id:
          type: string
          title: Device Id
        name:
          type: string
          title: Name
        secret:
          type: string
          title: Secret
        uri:
          type: string
          title: Uri
        qr_code_base64:
          type: string
          title: Qr Code Base64
      type: object
      required:
        - device_id
        - name
        - secret
        - uri
        - qr_code_base64
      title: TotpDeviceSetupResponse
      description: Secret + QR returned once when a new device enrolment is started.
    TotpVerifyRequest:
      properties:
        code:
          type: string
          maxLength: 6
          minLength: 6
          title: Code
      type: object
      required:
        - code
      title: TotpVerifyRequest
      description: Request body to verify a TOTP code (confirm a device).
    UserCreate:
      properties:
        email:
          type: string
          format: email
          title: Email
        username:
          type: string
          maxLength: 128
          minLength: 3
          title: Username
        password:
          type: string
          maxLength: 128
          minLength: 8
          title: Password
        full_name:
          type: string
          maxLength: 255
          minLength: 1
          title: Full Name
        role:
          $ref: '#/components/schemas/UserRole'
          default: viewer
        is_active:
          type: boolean
          title: Is Active
          default: true
        tenant_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Tenant Id
      type: object
      required:
        - email
        - username
        - password
        - full_name
      title: UserCreate
      description: Schema for creating a new user.
    UserResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        email:
          type: string
          title: Email
        username:
          type: string
          title: Username
        full_name:
          type: string
          title: Full Name
        role:
          $ref: '#/components/schemas/UserRole'
        is_active:
          type: boolean
          title: Is Active
        is_superadmin:
          type: boolean
          title: Is Superadmin
        totp_enabled:
          type: boolean
          title: Totp Enabled
        last_login:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Login
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - email
        - username
        - full_name
        - role
        - is_active
        - is_superadmin
        - totp_enabled
        - last_login
        - created_at
        - updated_at
      title: UserResponse
      description: User representation in API responses — password is NEVER exposed.
    UserRole:
      type: string
      enum:
        - admin
        - manager
        - technician
        - viewer
      title: UserRole
    UserRolesUpdate:
      properties:
        role_ids:
          items:
            type: string
          type: array
          title: Role Ids
      type: object
      required:
        - role_ids
      title: UserRolesUpdate
      description: Replace the set of custom roles assigned to a user.
    UserUpdate:
      properties:
        email:
          anyOf:
            - type: string
              format: email
            - type: 'null'
          title: Email
        username:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 3
            - type: 'null'
          title: Username
        full_name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Full Name
        role:
          anyOf:
            - $ref: '#/components/schemas/UserRole'
            - type: 'null'
        is_active:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Active
      type: object
      title: UserUpdate
      description: Schema for updating a user — all fields optional.
    VLANCreate:
      properties:
        vlan_id:
          type: integer
          maximum: 4094
          minimum: 1
          title: Vlan Id
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
      type: object
      required:
        - vlan_id
        - name
      title: VLANCreate
    VLANGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
      type: object
      required:
        - name
      title: VLANGroupCreate
    VLANGroupResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - created_at
        - updated_at
      title: VLANGroupResponse
    VLANGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
      type: object
      title: VLANGroupUpdate
    VLANResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        vlan_id:
          type: integer
          title: Vlan Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - vlan_id
        - name
        - description
        - group_id
        - created_at
        - updated_at
      title: VLANResponse
    VLANUpdate:
      properties:
        vlan_id:
          anyOf:
            - type: integer
              maximum: 4094
              minimum: 1
            - type: 'null'
          title: Vlan Id
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
      type: object
      title: VLANUpdate
    VPNGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: VPNGroupCreate
    VPNGroupResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - description
        - created_at
        - updated_at
      title: VPNGroupResponse
    VPNGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: VPNGroupUpdate
    VPNTunnelCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        vpn_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Vpn Type
        peer_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Peer Address
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: VPNTunnelCreate
    VPNTunnelResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        vpn_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Vpn Type
        peer_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Peer Address
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - vpn_type
        - peer_address
        - group_id
        - description
        - created_at
        - updated_at
      title: VPNTunnelResponse
    VPNTunnelUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        vpn_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Vpn Type
        peer_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Peer Address
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: VPNTunnelUpdate
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    VulnerabilityCreate:
      properties:
        name:
          type: string
          maxLength: 255
          minLength: 1
          title: Name
        cve_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Cve Id
        severity:
          type: string
          maxLength: 16
          title: Severity
          default: medium
        status:
          type: string
          maxLength: 16
          title: Status
          default: open
        affected_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Affected Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: VulnerabilityCreate
    VulnerabilityResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        cve_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Cve Id
        severity:
          type: string
          title: Severity
        status:
          type: string
          title: Status
        affected_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Affected Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - cve_id
        - severity
        - status
        - affected_asset_id
        - description
        - created_at
        - updated_at
      title: VulnerabilityResponse
    VulnerabilityUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 255
              minLength: 1
            - type: 'null'
          title: Name
        cve_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Cve Id
        severity:
          anyOf:
            - type: string
              maxLength: 16
            - type: 'null'
          title: Severity
        status:
          anyOf:
            - type: string
              maxLength: 16
            - type: 'null'
          title: Status
        affected_asset_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Affected Asset Id
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: VulnerabilityUpdate
    WLANGroupCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        is_mesh:
          type: boolean
          title: Is Mesh
          default: false
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: WLANGroupCreate
    WLANGroupResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        is_mesh:
          type: boolean
          title: Is Mesh
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - is_mesh
        - description
        - created_at
        - updated_at
      title: WLANGroupResponse
    WLANGroupUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        is_mesh:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Mesh
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: WLANGroupUpdate
    WebhookCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        url:
          type: string
          maxLength: 1024
          minLength: 1
          title: Url
        events:
          items:
            type: string
          type: array
          title: Events
      type: object
      required:
        - name
        - url
      title: WebhookCreate
    WebhookCreatedResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        url:
          type: string
          title: Url
        events:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Events
        active:
          type: boolean
          title: Active
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
        secret:
          type: string
          title: Secret
      type: object
      required:
        - id
        - tenant_id
        - name
        - url
        - events
        - active
        - created_at
        - updated_at
        - secret
      title: WebhookCreatedResponse
    WebhookDeliveryResponse:
      properties:
        id:
          type: string
          title: Id
        webhook_id:
          type: string
          title: Webhook Id
        event:
          type: string
          title: Event
        success:
          type: boolean
          title: Success
        status_code:
          anyOf:
            - type: integer
            - type: 'null'
          title: Status Code
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
        created_at:
          type: string
          format: date-time
          title: Created At
      type: object
      required:
        - id
        - webhook_id
        - event
        - success
        - status_code
        - error
        - created_at
      title: WebhookDeliveryResponse
    WebhookResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        url:
          type: string
          title: Url
        events:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Events
        active:
          type: boolean
          title: Active
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - url
        - events
        - active
        - created_at
        - updated_at
      title: WebhookResponse
    WifiAccessPointCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        ssid:
          type: string
          maxLength: 64
          minLength: 1
          title: Ssid
        location:
          anyOf:
            - type: string
            - type: 'null'
          title: Location
        mac_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Mac Address
        ip_address_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Ip Address Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
      type: object
      required:
        - name
        - ssid
      title: WifiAccessPointCreate
    WifiAccessPointResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        ssid:
          type: string
          title: Ssid
        location:
          anyOf:
            - type: string
            - type: 'null'
          title: Location
        mac_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Mac Address
        ip_address_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Ip Address Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - ssid
        - location
        - mac_address
        - ip_address_id
        - group_id
        - created_at
        - updated_at
      title: WifiAccessPointResponse
    WifiAccessPointUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        ssid:
          anyOf:
            - type: string
              maxLength: 64
              minLength: 1
            - type: 'null'
          title: Ssid
        location:
          anyOf:
            - type: string
            - type: 'null'
          title: Location
        mac_address:
          anyOf:
            - type: string
            - type: 'null'
          title: Mac Address
        ip_address_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Ip Address Id
        group_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Group Id
      type: object
      title: WifiAccessPointUpdate
    WorkflowCreate:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          title: Name
        workflow_type:
          type: string
          maxLength: 32
          title: Workflow Type
          default: provisioning
        steps:
          anyOf:
            - type: string
            - type: 'null'
          title: Steps
        script_path:
          anyOf:
            - type: string
            - type: 'null'
          title: Script Path
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      required:
        - name
      title: WorkflowCreate
    WorkflowResponse:
      properties:
        id:
          type: string
          title: Id
        tenant_id:
          type: string
          title: Tenant Id
        name:
          type: string
          title: Name
        workflow_type:
          type: string
          title: Workflow Type
        steps:
          anyOf:
            - type: string
            - type: 'null'
          title: Steps
        script_path:
          anyOf:
            - type: string
            - type: 'null'
          title: Script Path
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - tenant_id
        - name
        - workflow_type
        - steps
        - script_path
        - description
        - created_at
        - updated_at
      title: WorkflowResponse
    WorkflowUpdate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 128
              minLength: 1
            - type: 'null'
          title: Name
        workflow_type:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Workflow Type
        steps:
          anyOf:
            - type: string
            - type: 'null'
          title: Steps
        script_path:
          anyOf:
            - type: string
            - type: 'null'
          title: Script Path
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
      type: object
      title: WorkflowUpdate
    app__api__v1__endpoints__records__HistoryResponse:
      properties:
        id:
          type: string
          title: Id
        record_id:
          type: string
          title: Record Id
        action:
          type: string
          title: Action
        data:
          additionalProperties: true
          type: object
          title: Data
        created_at:
          type: string
          format: date-time
          title: Created At
        created_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Created By
      type: object
      required:
        - id
        - record_id
        - action
        - data
        - created_at
        - created_by
      title: HistoryResponse
    app__schemas__monitoring__HistoryResponse:
      properties:
        host_id:
          type: string
          title: Host Id
        range:
          type: string
          title: Range
        resolution:
          type: string
          title: Resolution
        samples:
          items:
            $ref: '#/components/schemas/SampleResponse'
          type: array
          title: Samples
        rollups:
          items:
            $ref: '#/components/schemas/RollupResponse'
          type: array
          title: Rollups
      type: object
      required:
        - host_id
        - range
        - resolution
      title: HistoryResponse
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer
