openapi: 3.0.3
info:
  title: 'App Template API Documentation'
  description: 'Stateless REST API for tenant apps and the platform control plane: multi-tenant isolation, Sanctum tokens, RBAC, device registry, and multi-channel push.'
  version: 1.0.0
servers:
  - url: 'http://localhost:8000'
tags:
  - name: 'Configuration & System Diagnostics'
    description: "\nHealth checks and admin configuration. `GET /health` is unauthenticated beyond API key (mobile bootstrap)."
  - name: 'Public — Organization Lookup'
    description: "\nResolve tenant branding before login. API key only — no Bearer token or `X-Tenant` header."
  - name: 'Central — Authentication'
    description: "\nPlatform operator login for the control plane (`/central` SPA). Tokens use the `central` Sanctum guard — do not send `X-Tenant`."
  - name: 'Central — Dashboard & Activity'
    description: ''
  - name: 'Central — Tenants & Hierarchy'
    description: "\nProvision and manage tenant organizations from the platform control plane."
  - name: 'Central — Tenant Access'
    description: "\nCross-tenant visibility policies and per-user grants."
  - name: 'Central — Tenant Backups'
    description: "\nPer-tenant database dumps stored on the platform host."
  - name: 'Central — Platform Operators'
    description: ''
  - name: 'Central — Host Operations'
    description: "\nPlatform-wide cache operations and legacy API-key configuration status."
  - name: 'Central — Ops Dashboards'
    description: "\nIssue short-lived access tickets for Telescope, Horizon, and Pulse."
  - name: Authentication
    description: "\nEndpoints for managing user authentication and access tokens."
  - name: 'Device Registry'
    description: "\nRegister mobile / web device tokens for multi-channel push (FCM, APNs, Web Push linkage)."
  - name: 'Push Notifications'
    description: "\nEndpoints for browser Web Push subscriptions and multi-channel notification dispatch."
  - name: 'Notifications — Inbox'
    description: ''
  - name: 'User Management'
    description: "\nEndpoints for querying, managing, impersonating, and exporting users."
  - name: 'Role & Permission Management'
    description: "\nEndpoints for managing RBAC Roles and Permissions."
  - name: 'Audit Trail & Activity Logs'
    description: "\nEndpoints for monitoring administrator and user action audit logs."
  - name: Endpoints
    description: ''
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: "<b>Tenant routes:</b> obtain a Sanctum token from <code>POST /api/v1/auth/login</code> (with <code>X-Tenant</code>). Registration creates an unlicensed account without a token until an administrator grants a seat.\n<b>Central routes:</b> obtain a platform operator token from <code>POST /api/v1/central/auth/login</code> (no <code>X-Tenant</code>).\nSend the token as <code>Authorization: Bearer {token}</code> (or <code>x-access-token</code>).\n\nRoutes explicitly enabled for machine integrations can use a per-tenant <code>X-Api-Key</code> with the declared ability instead of a Bearer token. The legacy host <code>API_KEY</code> is server-side compatibility only and is not an identity or authorization grant.\n\nTenant-scoped routes additionally require <code>X-Tenant</code> (slug or id). Optional device headers: <code>X-Device-Name</code>, <code>X-App-Version</code>."
security:
  -
    default: []
paths:
  /api/v1/health:
    get:
      summary: 'Health Check'
      operationId: healthCheck
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: success
                  message: 'Service is healthy.'
                  data:
                    status: operational
                    app: 'App Template'
                    app_version: 1.0.0
                    version: 1.0.0
                    timestamp: '2026-09-04T13:56:45+00:00'
                    server_time: '2026-09-04T13:56:45+00:00'
                    services:
                      database: ok
                      cache: configured
                      queue: configured
                properties:
                  status:
                    type: string
                    example: success
                  message:
                    type: string
                    example: 'Service is healthy.'
                  data:
                    type: object
                    properties:
                      status:
                        type: string
                        example: operational
                      app:
                        type: string
                        example: 'App Template'
                      app_version:
                        type: string
                        example: 1.0.0
                      version:
                        type: string
                        example: 1.0.0
                      timestamp:
                        type: string
                        example: '2026-09-04T13:56:45+00:00'
                      server_time:
                        type: string
                        example: '2026-09-04T13:56:45+00:00'
                      services:
                        type: object
                        properties:
                          database:
                            type: string
                            example: ok
                          cache:
                            type: string
                            example: configured
                          queue:
                            type: string
                            example: configured
      tags:
        - 'Configuration & System Diagnostics'
      security: []
  /api/v1/config/dashboard-stats:
    get:
      summary: 'Get Dashboard Telemetry & Stats'
      operationId: getDashboardTelemetryStats
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Configuration & System Diagnostics'
  /api/v1/config/legal:
    get:
      summary: 'Get Legal Documents'
      operationId: getLegalDocuments
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Configuration & System Diagnostics'
    patch:
      summary: 'Update Legal Documents'
      operationId: updateLegalDocuments
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Configuration & System Diagnostics'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                privacy_policy:
                  type: string
                  description: ''
                  example: architecto
                  nullable: true
                terms_and_conditions:
                  type: string
                  description: ''
                  example: architecto
                  nullable: true
  /api/v1/config/login-branding:
    get:
      summary: 'Get Login Branding'
      operationId: getLoginBranding
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Configuration & System Diagnostics'
    patch:
      summary: 'Update Login Background URL'
      operationId: updateLoginBackgroundURL
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Configuration & System Diagnostics'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                login_background_url:
                  type: string
                  description: 'Must be a valid URL. Must not be greater than 2048 characters.'
                  example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
                  nullable: true
    delete:
      summary: 'Remove Login Background'
      operationId: removeLoginBackground
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Configuration & System Diagnostics'
  /api/v1/config/login-branding/upload:
    post:
      summary: 'Upload Login Background'
      operationId: uploadLoginBackground
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Configuration & System Diagnostics'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                image:
                  type: string
                  format: binary
                  description: 'Must be an image. Must not be greater than 5120 kilobytes.'
              required:
                - image
  '/api/v1/public/tenants/{slug}':
    get:
      summary: 'Resolve Public Organization'
      operationId: resolvePublicOrganization
      description: 'Returns the organization name for a slug or id. Used by tenant login screens.'
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Public — Organization Lookup'
      security: []
    parameters:
      -
        in: path
        name: slug
        description: 'The slug of the tenant.'
        example: acme
        required: true
        schema:
          type: string
  /api/v1/central/auth/login:
    post:
      summary: 'Central Login'
      operationId: centralLogin
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Authentication'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: gbailey@example.net
                password:
                  type: string
                  description: ''
                  example: '|]|{+-'
              required:
                - email
                - password
      security: []
  /api/v1/central/auth/me:
    get:
      summary: 'Central Profile'
      operationId: centralProfile
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Authentication'
  /api/v1/central/auth/logout:
    post:
      summary: 'Central Logout'
      operationId: centralLogout
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Authentication'
  /api/v1/central/dashboard:
    get:
      summary: 'Central Dashboard Snapshot'
      operationId: centralDashboardSnapshot
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Dashboard & Activity'
  /api/v1/central/activity:
    get:
      summary: 'Central Activity Log'
      operationId: centralActivityLog
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Dashboard & Activity'
  /api/v1/central/tenants:
    get:
      summary: 'List Tenants'
      operationId: listTenants
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Tenants & Hierarchy'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 22
                search:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: g
                status:
                  type: string
                  description: ''
                  example: active
                  enum:
                    - active
                    - suspended
    post:
      summary: 'Create Tenant'
      operationId: createTenant
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenants & Hierarchy'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                slug:
                  type: string
                  description: 'Must match the regex /^[a-z0-9]+(?:-[a-z0-9]+)*$/. Must be at least 2 characters. Must not be greater than 32 characters.'
                  example: b
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                parent:
                  type: string
                  description: 'Must not be greater than 64 characters.'
                  example: g
                  nullable: true
                super_admin:
                  type: object
                  description: ''
                  example: []
                  properties:
                    name:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: b
                    email:
                      type: string
                      description: 'Must be a valid email address. Must not be greater than 255 characters.'
                      example: zbailey@example.net
                    password:
                      type: string
                      description: ''
                      example: architecto
                  required:
                    - name
                    - email
                    - password
                admin:
                  type: object
                  description: ''
                  example: null
                  properties:
                    name:
                      type: string
                      description: 'This field is required when <code>admin.email</code> is present. Must not be greater than 255 characters.'
                      example: 'n'
                      nullable: true
                    email:
                      type: string
                      description: 'This field is required when <code>admin.name</code> is present. The value and <code>super_admin.email</code> must be different. Must be a valid email address. Must not be greater than 255 characters.'
                      example: ashly64@example.com
                      nullable: true
                    password:
                      type: string
                      description: 'This field is required when <code>admin.email</code> is present.'
                      example: null
                      nullable: true
                  nullable: true
                user_license_limit:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 10000.'
                  example: 1
                  nullable: true
              required:
                - slug
                - name
                - super_admin
  /api/v1/central/tenants/tree:
    get:
      summary: 'Tenant Hierarchy Tree'
      operationId: tenantHierarchyTree
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Tenants & Hierarchy'
  '/api/v1/central/tenants/{tenant}':
    get:
      summary: 'Show Tenant'
      operationId: showTenant
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Tenants & Hierarchy'
    patch:
      summary: 'Update Tenant'
      operationId: updateTenant
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenants & Hierarchy'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                slug:
                  type: string
                  description: 'Must match the regex /^[a-z0-9]+(?:-[a-z0-9]+)*$/. Must be at least 2 characters. Must not be greater than 32 characters.'
                  example: b
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                status:
                  type: string
                  description: ''
                  example: active
                  enum:
                    - active
                    - suspended
                user_license_limit:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 10000.'
                  example: 7
                api_rate_limit:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100000.'
                  example: 16
                  nullable: true
                allowed_ips:
                  type: array
                  description: 'Must not be greater than 64 characters.'
                  example:
                    - m
                  items:
                    type: string
    delete:
      summary: 'Delete Tenant'
      operationId: deleteTenant
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenants & Hierarchy'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                confirm_slug:
                  type: string
                  description: 'Must not be greater than 64 characters.'
                  example: b
              required:
                - confirm_slug
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/parent':
    patch:
      summary: 'Set Tenant Parent'
      operationId: setTenantParent
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenants & Hierarchy'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                parent:
                  type: string
                  description: 'Must not be greater than 64 characters.'
                  example: b
                  nullable: true
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/users/{userId}':
    patch:
      summary: 'Update Tenant User'
      operationId: updateTenantUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenants & Hierarchy'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                password:
                  type: string
                  description: ''
                  example: null
                is_active:
                  type: boolean
                  description: ''
                  example: false
                has_license:
                  type: boolean
                  description: ''
                  example: true
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
      -
        in: path
        name: userId
        description: ''
        example: '564'
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/users/{userId}/impersonate':
    post:
      summary: 'Impersonate Tenant User'
      operationId: impersonateTenantUser
      description: 'Starts a support session and returns a short-lived tenant Sanctum token.'
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenants & Hierarchy'
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
      -
        in: path
        name: userId
        description: ''
        example: '564'
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/access':
    get:
      summary: 'Show Tenant Access'
      operationId: showTenantAccess
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Tenant Access'
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/access/policies':
    put:
      summary: 'Upsert Tenant Access Policy'
      operationId: upsertTenantAccessPolicy
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenant Access'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                source:
                  type: string
                  description: 'Must not be greater than 64 characters.'
                  example: b
                level:
                  type: string
                  description: ''
                  example: monitor
                  enum:
                    - monitor
                    - admin
                  nullable: true
              required:
                - source
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/access/grants':
    put:
      summary: 'Upsert Tenant Access Grant'
      operationId: upsertTenantAccessGrant
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenant Access'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                source:
                  type: string
                  description: 'Must not be greater than 64 characters.'
                  example: b
                user_id:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 22
                level:
                  type: string
                  description: ''
                  example: monitor
                  enum:
                    - monitor
                    - admin
                    - deny
              required:
                - source
                - user_id
                - level
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/access/grants/{grant}':
    delete:
      summary: 'Delete Tenant Access Grant'
      operationId: deleteTenantAccessGrant
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenant Access'
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
      -
        in: path
        name: grant
        description: 'The grant.'
        example: '564'
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/backups':
    get:
      summary: 'List Tenant Backups'
      operationId: listTenantBackups
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Tenant Backups'
    post:
      summary: 'Create Tenant Backup'
      operationId: createTenantBackup
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenant Backups'
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/backups/{filename}':
    get:
      summary: 'Download Tenant Backup'
      operationId: downloadTenantBackup
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Tenant Backups'
    delete:
      summary: 'Delete Tenant Backup'
      operationId: deleteTenantBackup
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Tenant Backups'
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
      -
        in: path
        name: filename
        description: ''
        example: db_backup_-.w.zip
        required: true
        schema:
          type: string
  /api/v1/central/operators:
    get:
      summary: 'List Platform Operators'
      operationId: listPlatformOperators
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Platform Operators'
    post:
      summary: 'Create Platform Operator'
      operationId: createPlatformOperator
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Platform Operators'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: zbailey@example.net
                password:
                  type: string
                  description: ''
                  example: architecto
                role:
                  type: string
                  description: ''
                  example: platform-super
                  enum:
                    - platform-super
                    - platform-admin
                    - platform-support
                is_active:
                  type: boolean
                  description: ''
                  example: false
              required:
                - name
                - email
                - password
                - role
  '/api/v1/central/operators/{operator}':
    patch:
      summary: 'Update Platform Operator'
      operationId: updatePlatformOperator
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Platform Operators'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: zbailey@example.net
                password:
                  type: string
                  description: ''
                  example: null
                role:
                  type: string
                  description: ''
                  example: platform-admin
                  enum:
                    - platform-super
                    - platform-admin
                    - platform-support
                is_active:
                  type: boolean
                  description: ''
                  example: true
    delete:
      summary: 'Delete Platform Operator'
      operationId: deletePlatformOperator
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Platform Operators'
    parameters:
      -
        in: path
        name: operator
        description: 'The operator.'
        example: '564'
        required: true
        schema:
          type: string
  /api/v1/central/cache/flush:
    post:
      summary: 'Flush Application Cache'
      operationId: flushApplicationCache
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Host Operations'
  /api/v1/central/config/api-key:
    get:
      summary: 'API Key Configuration Status'
      operationId: aPIKeyConfigurationStatus
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Central — Host Operations'
  /api/v1/central/telescope/ticket:
    post:
      summary: 'Issue Telescope Access Ticket'
      operationId: issueTelescopeAccessTicket
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Ops Dashboards'
  /api/v1/central/horizon/ticket:
    post:
      summary: 'Issue Horizon Access Ticket'
      operationId: issueHorizonAccessTicket
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Ops Dashboards'
  /api/v1/central/pulse/ticket:
    post:
      summary: 'Issue Pulse Access Ticket'
      operationId: issuePulseAccessTicket
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Central — Ops Dashboards'
  /api/v1/auth/register:
    post:
      summary: 'User Registration'
      operationId: userRegistration
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: zbailey@example.net
                password:
                  type: string
                  description: ''
                  example: architecto
                device_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                platform:
                  type: string
                  description: ''
                  example: web
                  enum:
                    - web
                    - ios
                    - android
                  nullable: true
                provider:
                  type: string
                  description: ''
                  example: webpush
                  enum:
                    - webpush
                    - fcm
                    - apns
                  nullable: true
                token:
                  type: string
                  description: 'Must not be greater than 512 characters.'
                  example: g
                  nullable: true
                app_version:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: z
                  nullable: true
              required:
                - name
                - email
                - password
      security: []
  /api/v1/auth/login:
    post:
      summary: 'User Login'
      operationId: userLogin
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be at least 3 characters. Must not be greater than 255 characters.'
                  example: gbailey@example.net
                password:
                  type: string
                  description: ''
                  example: architecto
                device_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                platform:
                  type: string
                  description: ''
                  example: ios
                  enum:
                    - web
                    - ios
                    - android
                  nullable: true
                provider:
                  type: string
                  description: ''
                  example: apns
                  enum:
                    - webpush
                    - fcm
                    - apns
                  nullable: true
                token:
                  type: string
                  description: 'Must not be greater than 512 characters.'
                  example: g
                  nullable: true
                app_version:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: z
                  nullable: true
              required:
                - email
                - password
      security: []
  /api/v1/auth/forgot-password:
    post:
      summary: 'Forgot Password'
      operationId: forgotPassword
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: gbailey@example.net
              required:
                - email
      security: []
  /api/v1/auth/reset-password:
    post:
      summary: 'Reset Password'
      operationId: resetPassword
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: gbailey@example.net
                token:
                  type: string
                  description: ''
                  example: architecto
                password:
                  type: string
                  description: ''
                  example: architecto
                password_confirmation:
                  type: string
                  description: ''
                  example: architecto
              required:
                - email
                - token
                - password
                - password_confirmation
      security: []
  /api/v1/auth/email/verify:
    post:
      summary: 'Verify Email'
      operationId: verifyEmail
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: integer
                  description: 'Must match an existing stored value.'
                  example: 16
                hash:
                  type: string
                  description: ''
                  example: architecto
              required:
                - id
                - hash
      security: []
  /api/v1/auth/user-by-token:
    get:
      summary: 'User Details By Access Token'
      operationId: userDetailsByAccessToken
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Authentication
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                  description: ''
                  example: architecto
                  nullable: true
      security: []
  /api/v1/auth/logout:
    post:
      summary: 'User Logout'
      operationId: userLogout
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
  /api/v1/auth/me:
    get:
      summary: 'Get Current User Profile'
      operationId: getCurrentUserProfile
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Authentication
  /api/v1/auth/profile:
    patch:
      summary: 'Update Profile'
      operationId: updateProfile
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: zbailey@example.net
  /api/v1/auth/email/resend:
    post:
      summary: 'Resend Email Verification'
      operationId: resendEmailVerification
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
  /api/v1/auth/password:
    patch:
      summary: 'Change Password'
      operationId: changePassword
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                current_password:
                  type: string
                  description: ''
                  example: architecto
                password:
                  type: string
                  description: ''
                  example: architecto
                password_confirmation:
                  type: string
                  description: ''
                  example: architecto
              required:
                - current_password
                - password
                - password_confirmation
  /api/v1/auth/tokens:
    get:
      summary: 'List Access Tokens'
      operationId: listAccessTokens
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Authentication
  '/api/v1/auth/tokens/{tokenId}':
    delete:
      summary: 'Revoke Access Token'
      operationId: revokeAccessToken
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Authentication
    parameters:
      -
        in: path
        name: tokenId
        description: ''
        example: architecto
        required: true
        schema:
          type: string
  /api/v1/devices:
    get:
      summary: 'List Devices'
      operationId: listDevices
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Device Registry'
    post:
      summary: 'Register or Update Device'
      operationId: registerOrUpdateDevice
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Device Registry'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                platform:
                  type: string
                  description: ''
                  example: ios
                  enum:
                    - web
                    - ios
                    - android
                provider:
                  type: string
                  description: ''
                  example: webpush
                  enum:
                    - webpush
                    - fcm
                    - apns
                token:
                  type: string
                  description: 'Must not be greater than 512 characters.'
                  example: b
                device_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                app_version:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: g
                  nullable: true
              required:
                - platform
                - provider
                - token
    delete:
      summary: 'Revoke Device'
      operationId: revokeDevice
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Device Registry'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                  description: 'Must not be greater than 512 characters.'
                  example: b
                provider:
                  type: string
                  description: ''
                  example: webpush
                  enum:
                    - webpush
                    - fcm
                    - apns
                  nullable: true
              required:
                - token
  /api/v1/push/subscribe:
    post:
      summary: 'Save Push Subscription'
      operationId: savePushSubscription
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Push Notifications'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                endpoint:
                  type: string
                  description: 'Must not be greater than 2048 characters.'
                  example: b
                keys:
                  type: object
                  description: ''
                  example: []
                  properties:
                    p256dh:
                      type: string
                      description: ''
                      example: architecto
                    auth:
                      type: string
                      description: ''
                      example: architecto
                  required:
                    - p256dh
                    - auth
                content_encoding:
                  type: string
                  description: ''
                  example: aesgcm
                  enum:
                    - aesgcm
                    - aes128gcm
                  nullable: true
              required:
                - endpoint
                - keys
  /api/v1/push/unsubscribe:
    post:
      summary: 'Unsubscribe Push Notification'
      operationId: unsubscribePushNotification
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Push Notifications'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                endpoint:
                  type: string
                  description: 'Must not be greater than 2048 characters.'
                  example: b
              required:
                - endpoint
  /api/v1/push/send:
    post:
      summary: 'Send Push Notification (self)'
      operationId: sendPushNotificationself
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Push Notifications'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                  nullable: true
                body:
                  type: string
                  description: 'Must not be greater than 1000 characters.'
                  example: 'n'
                  nullable: true
                icon:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: g
                  nullable: true
                url:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: 'http://www.okuneva.com/fugiat-sunt-nihil-accusantium-harum-mollitia.html'
                  nullable: true
                providers:
                  type: array
                  description: ''
                  example:
                    - apns
                  items:
                    type: string
                    enum:
                      - webpush
                      - fcm
                      - apns
  /api/v1/push/recipients:
    get:
      summary: 'List Broadcast Recipients'
      operationId: listBroadcastRecipients
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Push Notifications'
  /api/v1/push/broadcast:
    post:
      summary: 'Broadcast Push Notification'
      operationId: broadcastPushNotification
      description: "Requires tenant context (`X-Tenant`) and `notifications.send`. When `audience` is `users` or `devices`,\nthe supplied IDs must belong to the current tenant."
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Push Notifications'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                body:
                  type: string
                  description: 'Must not be greater than 1000 characters.'
                  example: 'n'
                icon:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: g
                  nullable: true
                url:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: 'http://www.okuneva.com/fugiat-sunt-nihil-accusantium-harum-mollitia.html'
                  nullable: true
                audience:
                  type: string
                  description: ''
                  example: all_devices
                  enum:
                    - all_users
                    - users
                    - all_devices
                    - devices
                user_ids:
                  type: array
                  description: 'Must match an existing stored value.'
                  example:
                    - 16
                  items:
                    type: integer
                device_keys:
                  type: array
                  description: 'Must match the regex /^(web|device)_\d+$/.'
                  example:
                    - device_642
                  items:
                    type: string
              required:
                - title
                - body
                - audience
  /api/v1/notifications:
    get:
      summary: 'List Inbox Notifications'
      operationId: listInboxNotifications
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Notifications — Inbox'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 22
                unread_only:
                  type: string
                  description: ''
                  example: 1
                  enum:
                    - 0
                    - 1
                category:
                  type: string
                  description: ''
                  example: broadcast
                  enum:
                    - broadcast
                    - system
                simple:
                  type: string
                  description: ''
                  example: 0
                  enum:
                    - 0
                    - 1
  /api/v1/notifications/unread-count:
    get:
      summary: 'Unread Notification Count'
      operationId: unreadNotificationCount
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Notifications — Inbox'
  /api/v1/notifications/read-all:
    post:
      summary: 'Mark All Notifications Read'
      operationId: markAllNotificationsRead
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Notifications — Inbox'
  /api/v1/notifications/sent-batches:
    get:
      summary: 'List Sent Broadcast Batches'
      operationId: listSentBroadcastBatches
      description: 'Requires `notifications.send`.'
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Notifications — Inbox'
  '/api/v1/notifications/{id}/read':
    post:
      summary: 'Mark Notification Read'
      operationId: markNotificationRead
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Notifications — Inbox'
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the notification.'
        example: architecto
        required: true
        schema:
          type: string
  /api/v1/users/export:
    get:
      summary: 'Export User Data'
      operationId: exportUserData
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'User Management'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                format:
                  type: string
                  description: ''
                  example: xls
                  enum:
                    - csv
                    - xlsx
                    - xls
  '/api/v1/users/{user_id}/impersonate':
    post:
      summary: 'Impersonate User'
      operationId: impersonateUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'User Management'
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: 1
        required: true
        schema:
          type: integer
  /api/v1/users/stop-impersonating:
    post:
      summary: 'Stop Impersonating User'
      operationId: stopImpersonatingUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'User Management'
  /api/v1/users:
    get:
      summary: 'List Users (Filtered & Sorted)'
      operationId: listUsersFilteredSorted
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'User Management'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 1
                filter:
                  type: object
                  description: ''
                  example: null
                  properties:
                    name:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: 'n'
                    email:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: ashly64@example.com
                sort:
                  type: string
                  description: 'Must not be greater than 64 characters.'
                  example: v
                include:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: d
    post:
      summary: 'Create User'
      operationId: createUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'User Management'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                password:
                  type: string
                  description: ''
                  example: architecto
                is_active:
                  type: boolean
                  description: ''
                  example: true
                has_license:
                  type: boolean
                  description: ''
                  example: false
                roles:
                  type: array
                  description: 'Must match an existing stored value.'
                  example:
                    - architecto
                  items:
                    type: string
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: zbailey@example.net
                  nullable: true
                username:
                  type: string
                  description: 'This field is required when <code>email</code> is not present. Must match the regex /^[a-z0-9][a-z0-9._-]{2,31}$/. Must not be greater than 32 characters.'
                  example: i
                  nullable: true
              required:
                - name
                - password
  '/api/v1/users/{user_id}':
    get:
      summary: 'Get User Details'
      operationId: getUserDetails
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'User Management'
    put:
      summary: 'Update User'
      operationId: updateUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'User Management'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                password:
                  type: string
                  description: ''
                  example: null
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: false
                has_license:
                  type: boolean
                  description: ''
                  example: true
                roles:
                  type: array
                  description: 'Must match an existing stored value.'
                  example:
                    - architecto
                  items:
                    type: string
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: zbailey@example.net
                  nullable: true
                username:
                  type: string
                  description: 'Must match the regex /^[a-z0-9][a-z0-9._-]{2,31}$/. Must not be greater than 32 characters.'
                  example: i
                  nullable: true
    patch:
      summary: 'Update User'
      operationId: updateUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'User Management'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                password:
                  type: string
                  description: ''
                  example: null
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: false
                has_license:
                  type: boolean
                  description: ''
                  example: true
                roles:
                  type: array
                  description: 'Must match an existing stored value.'
                  example:
                    - architecto
                  items:
                    type: string
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: zbailey@example.net
                  nullable: true
                username:
                  type: string
                  description: 'Must match the regex /^[a-z0-9][a-z0-9._-]{2,31}$/. Must not be greater than 32 characters.'
                  example: i
                  nullable: true
    delete:
      summary: 'Delete User'
      operationId: deleteUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'User Management'
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/users/{id}/restore':
    post:
      summary: 'Restore User'
      operationId: restoreUser
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'User Management'
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the user.'
        example: 1
        required: true
        schema:
          type: integer
  /api/v1/permissions:
    get:
      summary: 'List Permissions'
      operationId: listPermissions
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Role & Permission Management'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                filter:
                  type: object
                  description: ''
                  example: null
                  properties:
                    name:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: b
  /api/v1/roles:
    get:
      summary: 'List Roles'
      operationId: listRoles
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Role & Permission Management'
    post:
      summary: 'Create Role'
      operationId: createRole
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Role & Permission Management'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: architecto
                display_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                permissions:
                  type: array
                  description: 'Must match an existing stored value.'
                  example:
                    - architecto
                  items:
                    type: string
              required:
                - name
  '/api/v1/roles/{role_id}':
    get:
      summary: 'Get Role Details'
      operationId: getRoleDetails
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Role & Permission Management'
    put:
      summary: 'Update Role'
      operationId: updateRole
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Role & Permission Management'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: architecto
                display_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                permissions:
                  type: array
                  description: 'Must match an existing stored value.'
                  example:
                    - architecto
                  items:
                    type: string
    patch:
      summary: 'Update Role'
      operationId: updateRole
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Role & Permission Management'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: architecto
                display_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                permissions:
                  type: array
                  description: 'Must match an existing stored value.'
                  example:
                    - architecto
                  items:
                    type: string
    delete:
      summary: 'Delete Role'
      operationId: deleteRole
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Role & Permission Management'
    parameters:
      -
        in: path
        name: role_id
        description: 'The ID of the role.'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/roles/{id}/restore':
    post:
      summary: 'Restore Role'
      operationId: restoreRole
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - 'Role & Permission Management'
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the role.'
        example: 1
        required: true
        schema:
          type: integer
  /api/v1/activity-logs/export:
    get:
      summary: 'Export Activity Logs'
      operationId: exportActivityLogs
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - 'Audit Trail & Activity Logs'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                format:
                  type: string
                  description: ''
                  example: csv
                  enum:
                    - csv
                    - xlsx
                    - xls
  /api/v1/activity-logs:
    get:
      summary: 'List Activity Logs'
      operationId: listActivityLogs
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'Audit Trail & Activity Logs'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 1
                filter:
                  type: object
                  description: ''
                  example: null
                  properties:
                    log_name:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: 'n'
                    description:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: 'Animi quos velit et fugiat.'
                    event:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: d
                    from:
                      type: string
                      description: 'Must be a valid date.'
                      example: '2026-09-04T13:56:46'
                    to:
                      type: string
                      description: 'Must be a valid date.'
                      example: '2026-09-04T13:56:46'
                sort:
                  type: string
                  description: 'Must not be greater than 64 characters.'
                  example: l
                include:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: j
  /api/v1/central/auth/two-factor/verify:
    post:
      summary: ''
      operationId: postApiV1CentralAuthTwoFactorVerify
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                challenge_token:
                  type: string
                  description: 'Must be at least 32 characters.'
                  example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnn
                code:
                  type: string
                  description: ''
                  example: architecto
              required:
                - challenge_token
                - code
  /api/v1/central/auth/two-factor/status:
    get:
      summary: ''
      operationId: getApiV1CentralAuthTwoFactorStatus
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - Endpoints
  /api/v1/central/auth/two-factor/setup:
    post:
      summary: ''
      operationId: postApiV1CentralAuthTwoFactorSetup
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
  /api/v1/central/auth/two-factor/confirm:
    post:
      summary: ''
      operationId: postApiV1CentralAuthTwoFactorConfirm
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: 'Must be 6 characters.'
                  example: bngzmi
              required:
                - code
  /api/v1/central/auth/two-factor/disable:
    post:
      summary: ''
      operationId: postApiV1CentralAuthTwoFactorDisable
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: ''
                  example: architecto
              required:
                - code
  /api/v1/central/auth/two-factor/recovery-codes:
    post:
      summary: ''
      operationId: postApiV1CentralAuthTwoFactorRecoveryCodes
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: ''
                  example: architecto
              required:
                - code
  '/api/v1/central/tenants/{tenant}/export':
    post:
      summary: ''
      operationId: postApiV1CentralTenantsTenantExport
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/exports/{filename}':
    get:
      summary: ''
      operationId: getApiV1CentralTenantsTenantExportsFilename
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - Endpoints
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
      -
        in: path
        name: filename
        description: ''
        example: tenant_export_--..zip
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/api-keys':
    get:
      summary: ''
      operationId: getApiV1CentralTenantsTenantApiKeys
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - Endpoints
    post:
      summary: ''
      operationId: postApiV1CentralTenantsTenantApiKeys
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 120 characters.'
                  example: b
                abilities:
                  type: array
                  description: 'Must match the regex /^[a-z][a-z0-9_.:-]{1,100}$/.'
                  example:
                    - z_e6zpjx
                  items:
                    type: string
                expires_at:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>now</code>.'
                  example: '2052-09-28'
                  nullable: true
              required:
                - name
                - abilities
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
  '/api/v1/central/tenants/{tenant}/api-keys/{apiKey}':
    delete:
      summary: ''
      operationId: deleteApiV1CentralTenantsTenantApiKeysApiKey
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
    parameters:
      -
        in: path
        name: tenant
        description: 'The tenant.'
        example: acme
        required: true
        schema:
          type: string
      -
        in: path
        name: apiKey
        description: ''
        example: '564'
        required: true
        schema:
          type: string
  /api/v1/chat/conversations:
    get:
      summary: ''
      operationId: getApiV1ChatConversations
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Endpoints
    post:
      summary: ''
      operationId: postApiV1ChatConversations
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                recipient_id:
                  type: integer
                  description: 'Must match an existing stored value.'
                  example: 16
              required:
                - recipient_id
  '/api/v1/chat/conversations/{conversation}/messages':
    get:
      summary: ''
      operationId: getApiV1ChatConversationsConversationMessages
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                before_id:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                  nullable: true
                since_id:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 39
                  nullable: true
                limit:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 50.'
                  example: 7
    post:
      summary: ''
      operationId: postApiV1ChatConversationsConversationMessages
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                body:
                  type: string
                  description: 'Must be at least 1 character. Must not be greater than 2000 characters.'
                  example: b
              required:
                - body
    parameters:
      -
        in: path
        name: conversation
        description: 'The conversation.'
        example: architecto
        required: true
        schema:
          type: string
  '/api/v1/chat/conversations/{conversation}/read':
    post:
      summary: ''
      operationId: postApiV1ChatConversationsConversationRead
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
    parameters:
      -
        in: path
        name: conversation
        description: 'The conversation.'
        example: architecto
        required: true
        schema:
          type: string
  /api/v1/chat/unread-count:
    get:
      summary: ''
      operationId: getApiV1ChatUnreadCount
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Endpoints
  /api/v1/chat/users:
    get:
      summary: ''
      operationId: getApiV1ChatUsers
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                search:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: b
                  nullable: true
  /api/v1/example:
    get:
      summary: 'Example tenant resource'
      operationId: exampleTenantResource
      description: "Accepts either a tenant user's Bearer token or a tenant integration key\nwith the `example.read` ability."
      parameters:
        -
          in: header
          name: X-Api-Key
          description: ''
          example: 'tk_your_tenant_integration_secret Integration authentication alternative to Bearer.'
          schema:
            type: string
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Server Error'
                properties:
                  message:
                    type: string
                    example: 'Server Error'
      tags:
        - Endpoints
  /api/v1/auth/two-factor/verify:
    post:
      summary: ''
      operationId: postApiV1AuthTwoFactorVerify
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                challenge_token:
                  type: string
                  description: 'Must be at least 32 characters.'
                  example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnn
                code:
                  type: string
                  description: ''
                  example: architecto
              required:
                - challenge_token
                - code
  /api/v1/auth/two-factor/status:
    get:
      summary: ''
      operationId: getApiV1AuthTwoFactorStatus
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses:
        503:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  status: error
                  message: 'Tenant database is not provisioned.'
                  data: null
                  errors: null
                properties:
                  status:
                    type: string
                    example: error
                  message:
                    type: string
                    example: 'Tenant database is not provisioned.'
                  data:
                    type: string
                    example: null
                    nullable: true
                  errors:
                    type: string
                    example: null
                    nullable: true
      tags:
        - Endpoints
  /api/v1/auth/two-factor/setup:
    post:
      summary: ''
      operationId: postApiV1AuthTwoFactorSetup
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
  /api/v1/auth/two-factor/confirm:
    post:
      summary: ''
      operationId: postApiV1AuthTwoFactorConfirm
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: 'Must be 6 characters.'
                  example: bngzmi
              required:
                - code
  /api/v1/auth/two-factor/disable:
    post:
      summary: ''
      operationId: postApiV1AuthTwoFactorDisable
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: ''
                  example: architecto
              required:
                - code
  /api/v1/auth/two-factor/recovery-codes:
    post:
      summary: ''
      operationId: postApiV1AuthTwoFactorRecoveryCodes
      description: ''
      parameters:
        -
          in: header
          name: X-Tenant
          description: ''
          example: demo
          schema:
            type: string
      responses: {}
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: ''
                  example: architecto
              required:
                - code
