openapi: 3.0.0
paths:
  /health:
    get:
      description: >-
        Lightweight liveness check. Returns service metadata (version, env,
        commit, timestamp). Safe to poll from external monitors.
      operationId: AppController_getHealth
      parameters: []
      responses:
        '200':
          description: ''
      summary: Service health probe
      tags:
        - auth
  /api/integrations/hubspot/contacts:
    get:
      operationId: HubSpotSimpleController_getContacts
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpotSimple
  /api/integrations/hubspot/companies:
    get:
      operationId: HubSpotSimpleController_getCompanies
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpotSimple
  /api/integrations/hubspot/import/contacts:
    post:
      operationId: HubSpotSimpleController_importContacts
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - HubSpotSimple
  /api/integrations/hubspot/import/companies:
    post:
      operationId: HubSpotSimpleController_importCompanies
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - HubSpotSimple
  /api/integrations/hubspot/dashboard:
    get:
      operationId: HubSpotSimpleController_getDashboard
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpotSimple
  /security/api-keys:
    post:
      operationId: ApiKeysController_createApiKey
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateApiKeyDto'
      responses:
        '201':
          description: ''
      tags:
        - ApiKeys
    get:
      operationId: ApiKeysController_listApiKeys
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - ApiKeys
  /security/api-keys/{id}/rotate:
    put:
      operationId: ApiKeysController_rotateKey
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RotateKeyDto'
      responses:
        '200':
          description: ''
      tags:
        - ApiKeys
  /security/api-keys/{id}:
    delete:
      operationId: ApiKeysController_revokeKey
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - ApiKeys
  /security/api-keys/{id}/decrypt:
    get:
      operationId: ApiKeysController_getDecryptedKey
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - ApiKeys
  /auth/register:
    post:
      operationId: AuthController_register
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/login:
    post:
      operationId: AuthController_login
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/logout:
    post:
      operationId: AuthController_logout
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/refresh:
    post:
      operationId: AuthController_refreshToken
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/validate:
    post:
      operationId: AuthController_validateToken
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/me:
    get:
      operationId: AuthController_getCurrentUser
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Auth
  /auth/forgot-password:
    post:
      operationId: AuthController_forgotPassword
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/reset-password:
    post:
      operationId: AuthController_resetPassword
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/request-password-setup:
    post:
      operationId: AuthController_requestPasswordSetup
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/setup-password:
    post:
      operationId: AuthController_setupPassword
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/validate-setup-token:
    post:
      operationId: AuthController_validateSetupToken
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/check-account:
    post:
      operationId: AuthController_checkAccount
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/oidc/callback:
    post:
      operationId: AuthController_oidcCallback
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Auth
  /auth/users:
    get:
      operationId: AuthController_getUsers
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Auth
  /simple-auth/login:
    post:
      operationId: SimpleAuthController_login
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - SimpleAuth
  /simple-auth/profile:
    get:
      operationId: SimpleAuthController_getProfile
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SimpleAuth
  /simple-auth/users:
    get:
      operationId: SimpleAuthController_getUsers
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SimpleAuth
  /clickup/disconnect:
    post:
      operationId: ClickUpController_disconnect
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - ClickUp
  /clickup/status:
    get:
      operationId: ClickUpController_getConnectionStatus
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - ClickUp
  /clickup/tasks:
    get:
      operationId: ClickUpController_getTasks
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - ClickUp
  /clickup/track-time:
    post:
      operationId: ClickUpController_trackTime
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - ClickUp
  /clickup/webhook:
    post:
      operationId: ClickUpController_handleWebhook
      parameters:
        - name: x-signature
          required: true
          in: header
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - ClickUp
  /clickup/auth-url:
    get:
      operationId: ClickUpController_getAuthUrl
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - ClickUp
  /clickup/callback:
    get:
      operationId: ClickUpController_handleCallback
      parameters:
        - name: code
          required: true
          in: query
          schema:
            type: string
        - name: state
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - ClickUp
  /custom-fields/detect-and-tag:
    post:
      operationId: CustomFieldsController_detectAndTagCustomField
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - CustomFields
  /custom-fields/tags/{fieldId}:
    get:
      operationId: CustomFieldsController_getFieldTags
      parameters:
        - name: fieldId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
  /custom-fields/tags:
    post:
      operationId: CustomFieldsController_createFieldTag
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - CustomFields
  /custom-fields/tags/{tagId}:
    put:
      operationId: CustomFieldsController_updateFieldTag
      parameters:
        - name: tagId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
    delete:
      operationId: CustomFieldsController_removeFieldTag
      parameters:
        - name: tagId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
  /custom-fields/mappings/{integrationId}:
    get:
      operationId: CustomFieldsController_getFieldMappings
      parameters:
        - name: integrationId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
  /custom-fields/mappings:
    post:
      operationId: CustomFieldsController_createFieldMapping
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - CustomFields
  /custom-fields/mappings/{mappingId}:
    put:
      operationId: CustomFieldsController_updateFieldMapping
      parameters:
        - name: mappingId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
    delete:
      operationId: CustomFieldsController_removeFieldMapping
      parameters:
        - name: mappingId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
  /custom-fields/audit-logs:
    get:
      operationId: CustomFieldsController_getFieldTaggingAuditLogs
      parameters:
        - name: fieldId
          required: true
          in: query
          schema:
            type: string
        - name: platform
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
  /custom-fields/integration-settings/{integrationId}:
    get:
      operationId: CustomFieldsController_getIntegrationMappingSettings
      parameters:
        - name: integrationId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
    put:
      operationId: CustomFieldsController_updateIntegrationMappingSettings
      parameters:
        - name: integrationId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CustomFields
  /duplicate-detection/contacts/{id}/duplicates:
    get:
      operationId: DuplicateDetectionController_detectContactDuplicates
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/companies/{id}/duplicates:
    get:
      operationId: DuplicateDetectionController_detectCompanyDuplicates
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/contacts/{id}/merge-preview/{duplicateId}:
    get:
      operationId: DuplicateDetectionController_generateContactMergePreview
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: duplicateId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/companies/{id}/merge-preview/{duplicateId}:
    get:
      operationId: DuplicateDetectionController_generateCompanyMergePreview
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: duplicateId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/contacts/merge:
    post:
      operationId: DuplicateDetectionController_mergeContacts
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/companies/merge:
    post:
      operationId: DuplicateDetectionController_mergeCompanies
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/test:
    get:
      operationId: DuplicateDetectionController_test
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/statistics:
    get:
      operationId: DuplicateDetectionController_getMergeStatistics
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/contacts/duplicates/bulk:
    get:
      operationId: DuplicateDetectionController_bulkDetectContactDuplicates
      parameters:
        - name: threshold
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /duplicate-detection/companies/duplicates/bulk:
    get:
      operationId: DuplicateDetectionController_bulkDetectCompanyDuplicates
      parameters:
        - name: threshold
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DuplicateDetection
  /oauth/google/authorize:
    get:
      operationId: OAuthController_googleAuthorize
      parameters:
        - name: scopes
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - OAuth
  /oauth/google/callback:
    get:
      operationId: OAuthController_googleCallback
      parameters:
        - name: code
          required: true
          in: query
          schema:
            type: string
        - name: state
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - OAuth
  /oauth/google/access-token:
    get:
      operationId: OAuthController_googleAccessToken
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - OAuth
  /oauth/google/status:
    get:
      operationId: OAuthController_googleStatus
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - OAuth
  /oauth/microsoft/authorize:
    get:
      operationId: OAuthController_microsoftAuthorize
      parameters:
        - name: scopes
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - OAuth
  /oauth/microsoft/callback:
    get:
      operationId: OAuthController_microsoftCallback
      parameters:
        - name: code
          required: true
          in: query
          schema:
            type: string
        - name: state
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - OAuth
  /oauth/credentials:
    get:
      operationId: OAuthController_getUserCredentials
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - OAuth
  /oauth/revoke/{credentialId}:
    post:
      operationId: OAuthController_revokeCredential
      parameters:
        - name: credentialId
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - OAuth
  /integrations/email/sync/gmail/{accountId}:
    post:
      operationId: EmailSyncController_syncGmail
      parameters:
        - name: accountId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - EmailSync
  /integrations/email/sync/outlook/{accountId}:
    post:
      operationId: EmailSyncController_syncOutlook
      parameters:
        - name: accountId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - EmailSync
  /integrations/email/send:
    post:
      operationId: EmailSyncController_sendEmail
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - EmailSync
  /integrations/email/accounts:
    get:
      operationId: EmailSyncController_getAccounts
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - EmailSync
    post:
      operationId: EmailSyncController_createAccount
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - EmailSync
  /integrations/email/messages/{accountId}:
    get:
      operationId: EmailSyncController_getMessages
      parameters:
        - name: accountId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - EmailSync
  /integrations/calendar/sync/google/{calendarId}:
    post:
      operationId: CalendarSyncController_syncGoogleCalendar
      parameters:
        - name: calendarId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CalendarSync
  /integrations/calendar/sync/outlook/{calendarId}:
    post:
      operationId: CalendarSyncController_syncOutlookCalendar
      parameters:
        - name: calendarId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CalendarSync
  /integrations/calendar/events:
    post:
      operationId: CalendarSyncController_createEvent
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - CalendarSync
  /integrations/calendar/calendars:
    get:
      operationId: CalendarSyncController_getCalendars
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - CalendarSync
    post:
      operationId: CalendarSyncController_createCalendarSync
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - CalendarSync
  /integrations/calendar/events/{calendarId}:
    get:
      operationId: CalendarSyncController_getEvents
      parameters:
        - name: calendarId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - CalendarSync
  /integrations/tasks/sync/google/{taskSyncId}:
    post:
      operationId: TaskSyncController_syncGoogleTasks
      parameters:
        - name: taskSyncId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - TaskSync
  /integrations/tasks/sync/microsoft/{taskSyncId}:
    post:
      operationId: TaskSyncController_syncMicrosoftTasks
      parameters:
        - name: taskSyncId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - TaskSync
  /integrations/tasks/tasks:
    post:
      operationId: TaskSyncController_createTask
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - TaskSync
  /integrations/tasks/syncs:
    get:
      operationId: TaskSyncController_getTaskSyncs
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - TaskSync
    post:
      operationId: TaskSyncController_createTaskSync
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - TaskSync
  /integrations/tasks/tasks/{taskSyncId}:
    get:
      operationId: TaskSyncController_getTasks
      parameters:
        - name: taskSyncId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - TaskSync
  /integrations/documents/sync/google-drive:
    post:
      operationId: DocumentSyncController_syncGoogleDrive
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - DocumentSync
  /integrations/documents/sync/onedrive:
    post:
      operationId: DocumentSyncController_syncOneDrive
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - DocumentSync
  /integrations/documents/links:
    post:
      operationId: DocumentSyncController_createDocumentLink
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - DocumentSync
  /integrations/documents/documents:
    get:
      operationId: DocumentSyncController_getDocuments
      parameters:
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DocumentSync
  /integrations/documents/documents/type/{type}:
    get:
      operationId: DocumentSyncController_getDocumentsByType
      parameters:
        - name: type
          required: true
          in: path
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DocumentSync
  /integrations/documents/search:
    get:
      operationId: DocumentSyncController_searchDocuments
      parameters:
        - name: q
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DocumentSync
  /integrations/documents/links/{id}:
    put:
      operationId: DocumentSyncController_updateDocumentLink
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DocumentSync
    delete:
      operationId: DocumentSyncController_deleteDocumentLink
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - DocumentSync
  /integrations/ai/query:
    post:
      operationId: AIAssistantController_processQuery
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - AIAssistant
  /integrations/ai/insights:
    get:
      operationId: AIAssistantController_getInsights
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - AIAssistant
  /integrations/ai/preferences:
    put:
      operationId: AIAssistantController_updatePreferences
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - AIAssistant
  /integrations/onboarding/steps:
    get:
      operationId: OnboardingController_getSteps
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Onboarding
  /integrations/onboarding/progress:
    get:
      operationId: OnboardingController_getProgress
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Onboarding
  /integrations/onboarding/complete/{stepId}:
    post:
      operationId: OnboardingController_completeStep
      parameters:
        - name: stepId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Onboarding
  /integrations/onboarding/skip/{stepId}:
    post:
      operationId: OnboardingController_skipStep
      parameters:
        - name: stepId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Onboarding
  /integrations/onboarding/reset:
    post:
      operationId: OnboardingController_resetOnboarding
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Onboarding
  /integrations/hybrid-auth/oauth/{provider}:
    post:
      operationId: HybridAuthController_authenticateWithOAuth
      parameters:
        - name: provider
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - HybridAuth
  /integrations/hybrid-auth/link/{provider}:
    post:
      operationId: HybridAuthController_linkOAuthToExistingAccount
      parameters:
        - name: provider
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - HybridAuth
  /integrations/hybrid-auth/unlink/{provider}:
    delete:
      operationId: HybridAuthController_unlinkOAuthAccount
      parameters:
        - name: provider
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - HybridAuth
  /integrations/hybrid-auth/linked-accounts:
    get:
      operationId: HybridAuthController_getLinkedAccountsStatus
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HybridAuth
  /productivity/stats:
    get:
      operationId: ProductivityController_getProductivityStats
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Productivity
  /productivity/session:
    post:
      operationId: ProductivityController_logPomodoroSession
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Productivity
  /productivity/sessions:
    get:
      operationId: ProductivityController_getPomodoroSessions
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Productivity
  /settings/integrations:
    get:
      operationId: SettingsController_getIntegrations
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Settings
  /settings/integrations/clickup:
    post:
      operationId: SettingsController_updateClickUpConfig
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Settings
  /settings/integrations/clickup/test:
    post:
      operationId: SettingsController_testClickUpConnection
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Settings
  /settings/integrations/toggle:
    post:
      operationId: SettingsController_toggleIntegration
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Settings
  /sync-health/{entityType}/{entityId}:
    get:
      operationId: SyncHealthController_getSyncHealth
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
        - name: platform
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SyncHealth
  /sync-health/summary:
    get:
      operationId: SyncHealthController_getSyncHealthSummary
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SyncHealth
  /sync-health/{id}/retry:
    post:
      operationId: SyncHealthController_retrySync
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/{id}/reset-mapping:
    post:
      operationId: SyncHealthController_resetMapping
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/{id}/disconnect:
    post:
      operationId: SyncHealthController_disconnect
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/{id}/auto-fix:
    post:
      operationId: SyncHealthController_autoFix
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/{id}/auto-fix-suggestions:
    get:
      operationId: SyncHealthController_getAutoFixSuggestions
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SyncHealth
  /sync-health/conflicts:
    get:
      operationId: SyncHealthController_getConflicts
      parameters:
        - name: status
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SyncHealth
  /sync-health/conflicts/{id}/resolve:
    post:
      operationId: SyncHealthController_resolveConflict
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResolveConflictDto'
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/manual-sync:
    post:
      operationId: SyncHealthController_triggerManualSync
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/sync-frequency:
    post:
      operationId: SyncHealthController_updateSyncFrequency
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/auto-sync/enable:
    post:
      operationId: SyncHealthController_enableAutoSync
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /sync-health/auto-sync/disable:
    post:
      operationId: SyncHealthController_disableAutoSync
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - SyncHealth
  /tasks:
    get:
      operationId: TasksController_getTasks
      parameters:
        - name: taskListId
          required: true
          in: query
          schema:
            type: string
        - name: includeSubtasks
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
    post:
      operationId: TasksController_createTask
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Tasks
  /tasks/statistics:
    get:
      operationId: TasksController_getTaskStatistics
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/overdue:
    get:
      operationId: TasksController_getOverdueTasks
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/project/{projectId}:
    get:
      operationId: TasksController_getTasksByProject
      parameters:
        - name: projectId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/{id}:
    get:
      operationId: TasksController_getTask
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
    put:
      operationId: TasksController_updateTask
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
    delete:
      operationId: TasksController_deleteTask
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/{id}/hierarchy:
    get:
      operationId: TasksController_getTaskHierarchy
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/{id}/subtasks:
    get:
      operationId: TasksController_getSubtasks
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
    post:
      operationId: TasksController_createSubtask
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Tasks
  /tasks/{id}/order:
    put:
      operationId: TasksController_updateTaskOrder
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/bulk/status:
    put:
      operationId: TasksController_bulkUpdateStatus
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/{id}/time:
    put:
      operationId: TasksController_trackTime
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /tasks/test:
    get:
      operationId: TasksController_test
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Tasks
  /jobs:
    get:
      operationId: JobsController_findAll
      parameters:
        - name: workplaceId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Jobs
    post:
      operationId: JobsController_create
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Jobs
  /jobs/{id}:
    get:
      operationId: JobsController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Jobs
    put:
      operationId: JobsController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Jobs
    delete:
      operationId: JobsController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Jobs
  /task-lists:
    get:
      operationId: TaskListsController_findAll
      parameters:
        - name: workplaceId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - TaskLists
    post:
      operationId: TaskListsController_create
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - TaskLists
  /task-lists/{id}:
    put:
      operationId: TaskListsController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - TaskLists
    delete:
      operationId: TaskListsController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - TaskLists
  /claims/unclaimed:
    get:
      operationId: ClaimsController_getUnclaimed
      parameters:
        - name: workplaceId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Claims
  /claims/my-claims:
    get:
      operationId: ClaimsController_getMyClaims
      parameters:
        - name: workplaceId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Claims
  /claims/claim:
    post:
      operationId: ClaimsController_claim
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Claims
  /raci/{entityType}/{entityId}:
    get:
      operationId: RaciController_getMatrix
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Raci
    post:
      operationId: RaciController_assign
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Raci
  /users/profile:
    get:
      operationId: UserController_getProfile
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - User
    put:
      operationId: UserController_updateProfile
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - User
  /users:
    get:
      operationId: UserController_getAllUsers
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - User
  /users/list:
    get:
      operationId: UserController_getUsers
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - User
  /users/switch-role:
    post:
      operationId: UserController_switchRole
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - User
  /users/available-roles:
    get:
      operationId: UserController_getAvailableRoles
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - User
  /user-contact/create-with-contact:
    post:
      operationId: UserContactController_createUserWithContact
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - UserContact
  /user-contact/search-contacts:
    get:
      operationId: UserContactController_searchContacts
      parameters:
        - name: q
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserContact
  /user-contact/suggestions:
    get:
      operationId: UserContactController_getContactSuggestions
      parameters:
        - name: email
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserContact
  /user-contact/link-contact:
    post:
      operationId: UserContactController_linkContact
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - UserContact
  /user-contact/unlink-contact/{userId}/{contactId}:
    delete:
      operationId: UserContactController_unlinkContact
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
        - name: contactId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserContact
  /user-contact/user/{userId}/contacts:
    get:
      operationId: UserContactController_getUserWithContacts
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserContact
  /user-contact/update/{userId}:
    put:
      operationId: UserContactController_updateUserAndContact
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserContact
  /user-contact/stats:
    get:
      operationId: UserContactController_getContactLinkingStats
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - UserContact
  /user-contact/ensure-contact/{userId}:
    post:
      operationId: UserContactController_ensureUserHasContact
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - UserContact
  /user-contact/promote-contact:
    post:
      operationId: UserContactController_promoteContact
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - UserContact
  /user-contact/convert-contact-to-company:
    post:
      operationId: UserContactController_convertContactToCompany
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - UserContact
  /users/{userId}/workplaces:
    get:
      operationId: UserWorkplacesController_getUserWorkplaces
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserWorkplaces
    post:
      operationId: UserWorkplacesController_createWorkplace
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - UserWorkplaces
  /users/{userId}/workplaces/{workplaceId}:
    put:
      operationId: UserWorkplacesController_updateWorkplace
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
        - name: workplaceId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserWorkplaces
    delete:
      operationId: UserWorkplacesController_deleteWorkplace
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
        - name: workplaceId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - UserWorkplaces
  /website-builder/projects:
    get:
      operationId: WebsiteBuilderController_getProjects
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
    post:
      operationId: WebsiteBuilderController_createProject
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}:
    get:
      operationId: WebsiteBuilderController_getProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
    put:
      operationId: WebsiteBuilderController_updateProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
    delete:
      operationId: WebsiteBuilderController_deleteProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/blocks:
    get:
      operationId: WebsiteBuilderController_getProjectBlocks
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
    put:
      operationId: WebsiteBuilderController_updateProjectBlocks
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/assets:
    get:
      operationId: WebsiteBuilderController_getProjectAssets
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
    post:
      operationId: WebsiteBuilderController_uploadAsset
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/assets/{id}:
    delete:
      operationId: WebsiteBuilderController_deleteAsset
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/templates:
    get:
      operationId: WebsiteBuilderController_getTemplates
      parameters:
        - name: category
          required: true
          in: query
          schema:
            type: string
        - name: type
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/templates/{id}:
    get:
      operationId: WebsiteBuilderController_getTemplate
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/publish:
    post:
      operationId: WebsiteBuilderController_publishProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/unpublish:
    post:
      operationId: WebsiteBuilderController_unpublishProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/duplicate:
    post:
      operationId: WebsiteBuilderController_duplicateProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/stats:
    get:
      operationId: WebsiteBuilderController_getProjectStats
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/domains:
    get:
      operationId: WebsiteBuilderController_getProjectDomains
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
    post:
      operationId: WebsiteBuilderController_connectDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/domains/{domainId}:
    put:
      operationId: WebsiteBuilderController_updateDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: domainId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
    delete:
      operationId: WebsiteBuilderController_disconnectDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: domainId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/domains/{domainId}/verify:
    post:
      operationId: WebsiteBuilderController_verifyDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: domainId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/domains/{domainId}/dns-instructions:
    post:
      operationId: WebsiteBuilderController_getDnsInstructions
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: domainId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /website-builder/projects/{id}/go-live:
    post:
      operationId: WebsiteBuilderController_goLive
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WebsiteBuilder
  /ai/generation/project:
    post:
      operationId: AIGenerationController_generateProject
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - AIGeneration
  /ai/generation/content:
    post:
      operationId: AIGenerationController_generateContent
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - AIGeneration
  /ai/generation/image:
    post:
      operationId: AIGenerationController_generateImage
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - AIGeneration
  /ai/generation/history/{userId}:
    get:
      operationId: AIGenerationController_getGenerationHistory
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - AIGeneration
  /ai/generation/suggestions/{userId}:
    get:
      operationId: AIGenerationController_getSuggestions
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - AIGeneration
  /media:
    get:
      operationId: MediaController_getUserMedia
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Media
  /media/{id}:
    get:
      operationId: MediaController_getMedia
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Media
    put:
      operationId: MediaController_updateMedia
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Media
    delete:
      operationId: MediaController_deleteMedia
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Media
  /media/upload:
    post:
      operationId: MediaController_uploadMedia
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Media
  /media/generate:
    post:
      operationId: MediaController_generateAIImage
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Media
  /media/{id}/usage:
    post:
      operationId: MediaController_trackMediaUsage
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Media
  /media/stats/overview:
    get:
      operationId: MediaController_getMediaStats
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Media
  /domains:
    get:
      operationId: DomainController_getDomains
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Domain
    post:
      operationId: DomainController_createDomain
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Domain
  /domains/{id}:
    get:
      operationId: DomainController_getDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Domain
    put:
      operationId: DomainController_updateDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Domain
    delete:
      operationId: DomainController_deleteDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Domain
  /domains/{id}/dns-records:
    post:
      operationId: DomainController_addDnsRecord
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Domain
  /domains/dns-records/{recordId}:
    put:
      operationId: DomainController_updateDnsRecord
      parameters:
        - name: recordId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Domain
    delete:
      operationId: DomainController_deleteDnsRecord
      parameters:
        - name: recordId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Domain
  /domains/{id}/verify:
    post:
      operationId: DomainController_verifyDomain
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Domain
  /domains/{id}/dns-instructions:
    get:
      operationId: DomainController_getDnsInstructions
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Domain
  /admin/metrics:
    get:
      operationId: AdminController_getMetrics
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Admin
  /workplaces/user/workplaces:
    get:
      operationId: WorkplaceController_getUserWorkplaces
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Workplace
  /workplaces:
    post:
      operationId: WorkplaceController_createWorkplace
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Workplace
  /workplaces/{id}:
    get:
      operationId: WorkplaceController_getWorkplace
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Workplace
    put:
      operationId: WorkplaceController_updateWorkplace
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Workplace
  /workplaces/{id}/members:
    get:
      operationId: WorkplaceController_getWorkplaceMembers
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Workplace
    post:
      operationId: WorkplaceController_addMember
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Workplace
  /workplaces/{id}/members/{userId}:
    put:
      operationId: WorkplaceController_updateMember
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Workplace
    delete:
      operationId: WorkplaceController_removeMember
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Workplace
  /workplace-invites/{workplaceId}/invite:
    post:
      operationId: WorkplaceInviteController_inviteUser
      parameters:
        - name: workplaceId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - WorkplaceInvite
  /workplace-invites/my-invites:
    get:
      operationId: WorkplaceInviteController_getMyInvites
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - WorkplaceInvite
  /workplace-invites/{workplaceId}/invites:
    get:
      operationId: WorkplaceInviteController_getWorkplaceInvites
      parameters:
        - name: workplaceId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WorkplaceInvite
  /workplace-invites/{inviteId}/accept:
    put:
      operationId: WorkplaceInviteController_acceptInvite
      parameters:
        - name: inviteId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WorkplaceInvite
  /workplace-invites/{inviteId}/decline:
    put:
      operationId: WorkplaceInviteController_declineInvite
      parameters:
        - name: inviteId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WorkplaceInvite
  /workplaces/{workplaceId}/members:
    get:
      operationId: WorkplaceMembersController_getWorkplaceMembers
      parameters:
        - name: workplaceId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WorkplaceMembers
  /workplaces/{workplaceId}/members/{userId}:
    put:
      operationId: WorkplaceMembersController_updateMemberRole
      parameters:
        - name: workplaceId
          required: true
          in: path
          schema:
            type: string
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WorkplaceMembers
    delete:
      operationId: WorkplaceMembersController_removeMember
      parameters:
        - name: workplaceId
          required: true
          in: path
          schema:
            type: string
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - WorkplaceMembers
  /hierarchy/buildings:
    post:
      operationId: HierarchyController_createBuilding
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Hierarchy
    get:
      operationId: HierarchyController_getBuildings
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/buildings/{id}:
    get:
      operationId: HierarchyController_getBuildingById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    patch:
      operationId: HierarchyController_updateBuilding
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    delete:
      operationId: HierarchyController_deleteBuilding
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/departments:
    post:
      operationId: HierarchyController_createDepartment
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Hierarchy
    get:
      operationId: HierarchyController_getDepartments
      parameters:
        - name: buildingId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/departments/{id}:
    get:
      operationId: HierarchyController_getDepartmentById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    patch:
      operationId: HierarchyController_updateDepartment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    delete:
      operationId: HierarchyController_deleteDepartment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/cabinets:
    post:
      operationId: HierarchyController_createCabinet
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Hierarchy
    get:
      operationId: HierarchyController_getCabinets
      parameters:
        - name: departmentId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/cabinets/{id}:
    get:
      operationId: HierarchyController_getCabinetById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    patch:
      operationId: HierarchyController_updateCabinet
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    delete:
      operationId: HierarchyController_deleteCabinet
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/drawers:
    post:
      operationId: HierarchyController_createDrawer
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Hierarchy
    get:
      operationId: HierarchyController_getDrawers
      parameters:
        - name: cabinetId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/drawers/{id}:
    get:
      operationId: HierarchyController_getDrawerById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    patch:
      operationId: HierarchyController_updateDrawer
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    delete:
      operationId: HierarchyController_deleteDrawer
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/folders:
    post:
      operationId: HierarchyController_createFolder
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Hierarchy
    get:
      operationId: HierarchyController_getFolders
      parameters:
        - name: drawerId
          required: true
          in: query
          schema:
            type: string
        - name: parentId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/folders/{id}:
    get:
      operationId: HierarchyController_getFolderById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    patch:
      operationId: HierarchyController_updateFolder
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    delete:
      operationId: HierarchyController_deleteFolder
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/tree:
    get:
      operationId: HierarchyController_getTree
      parameters:
        - name: workplaceId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/path/{type}/{id}:
    get:
      operationId: HierarchyController_getHierarchyPath
      parameters:
        - name: type
          required: true
          in: path
          schema:
            type: string
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/projects:
    post:
      operationId: HierarchyController_createProject
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Hierarchy
    get:
      operationId: HierarchyController_getProjects
      parameters:
        - name: drawerId
          required: true
          in: query
          schema:
            type: string
        - name: folderId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
  /hierarchy/projects/{id}:
    get:
      operationId: HierarchyController_getProjectById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    patch:
      operationId: HierarchyController_updateProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Hierarchy
    delete:
      operationId: HierarchyController_deleteProject
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: ''
      tags:
        - Hierarchy
  /integrations/hubspot/auth/initiate:
    get:
      operationId: HubSpotController_initiateAuth
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/auth/callback:
    post:
      operationId: HubSpotController_handleCallback
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/status:
    get:
      operationId: HubSpotController_getStatus
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/token:
    get:
      operationId: HubSpotController_getToken
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/disconnect:
    post:
      operationId: HubSpotController_disconnect
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/sync:
    post:
      operationId: HubSpotController_syncData
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/account:
    get:
      operationId: HubSpotController_getAccountInfo
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/test:
    get:
      operationId: HubSpotController_testConnection
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/field-mappings/{entityType}:
    get:
      operationId: HubSpotController_getFieldMappings
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - HubSpot
    post:
      operationId: HubSpotController_setFieldMappings
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/field-mappings/{entityType}/available-fields:
    get:
      operationId: HubSpotController_getAvailableFields
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - HubSpot
  /integrations/hubspot/field-mappings/initialize-defaults:
    post:
      operationId: HubSpotController_initializeDefaultMappings
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - HubSpot
  /integrations/quickbooks/auth/initiate:
    get:
      operationId: QuickBooksController_initiateAuth
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/auth/callback:
    post:
      operationId: QuickBooksController_handleCallback
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/status:
    get:
      operationId: QuickBooksController_getStatus
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/disconnect:
    post:
      operationId: QuickBooksController_disconnect
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/customers:
    get:
      operationId: QuickBooksController_getCustomers
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/invoices:
    get:
      operationId: QuickBooksController_getInvoices
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/payments:
    get:
      operationId: QuickBooksController_getPayments
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/items:
    get:
      operationId: QuickBooksController_getItems
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/sync/customers:
    post:
      operationId: QuickBooksController_syncCustomers
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/sync/invoices:
    post:
      operationId: QuickBooksController_syncInvoices
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/sync/payments:
    post:
      operationId: QuickBooksController_syncPayments
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/sync/items:
    post:
      operationId: QuickBooksController_syncItems
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/field-mappings/{entityType}:
    get:
      operationId: QuickBooksController_getFieldMappings
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/field-mappings:
    post:
      operationId: QuickBooksController_setFieldMappings
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/field-mappings/{id}:
    put:
      operationId: QuickBooksController_updateFieldMapping
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
    delete:
      operationId: QuickBooksController_deleteFieldMapping
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/webhook:
    post:
      operationId: QuickBooksController_handleWebhook
      parameters:
        - name: intuit-signature
          required: true
          in: header
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/company:
    get:
      operationId: QuickBooksController_getCompanyInfo
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - QuickBooks
  /integrations/quickbooks/test-connection:
    post:
      operationId: QuickBooksController_testConnection
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - QuickBooks
  /products/categories:
    get:
      operationId: ProductsController_getCategories
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Products
    post:
      operationId: ProductsController_createCategory
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProductCategoryDto'
      responses:
        '201':
          description: ''
      tags:
        - Products
  /products/bundles:
    get:
      operationId: ProductsController_getBundles
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Products
    post:
      operationId: ProductsController_createBundle
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProductBundleDto'
      responses:
        '201':
          description: ''
      tags:
        - Products
  /products:
    get:
      operationId: ProductsController_getProducts
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Products
    post:
      operationId: ProductsController_createProduct
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProductDto'
      responses:
        '201':
          description: ''
      tags:
        - Products
  /products/bulk/update-status:
    post:
      operationId: ProductsController_bulkUpdateStatus
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Products
  /products/bulk/delete:
    post:
      operationId: ProductsController_bulkDelete
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Products
  /products/{productId}/variants:
    get:
      operationId: ProductsController_getVariants
      parameters:
        - name: productId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Products
    post:
      operationId: ProductsController_createVariant
      parameters:
        - name: productId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProductVariantDto'
      responses:
        '201':
          description: ''
      tags:
        - Products
  /products/variants/{id}:
    put:
      operationId: ProductsController_updateVariant
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductVariantDto'
      responses:
        '200':
          description: ''
      tags:
        - Products
    delete:
      operationId: ProductsController_deleteVariant
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Products
  /products/{id}/inventory:
    put:
      operationId: ProductsController_updateInventory
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Products
  /products/{id}:
    get:
      operationId: ProductsController_getProduct
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Products
    put:
      operationId: ProductsController_updateProduct
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductDto'
      responses:
        '200':
          description: ''
      tags:
        - Products
    delete:
      operationId: ProductsController_deleteProduct
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Products
  /payments:
    get:
      operationId: PaymentsController_getPayments
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Payments
    post:
      operationId: PaymentsController_createPayment
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePaymentDto'
      responses:
        '201':
          description: ''
      tags:
        - Payments
  /payments/analytics/summary:
    get:
      operationId: PaymentsController_getPaymentSummary
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Payments
  /payments/analytics/monthly:
    get:
      operationId: PaymentsController_getMonthlyPaymentAnalytics
      parameters:
        - name: year
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Payments
  /payments/{id}:
    get:
      operationId: PaymentsController_getPayment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Payments
    put:
      operationId: PaymentsController_updatePayment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePaymentDto'
      responses:
        '200':
          description: ''
      tags:
        - Payments
    delete:
      operationId: PaymentsController_deletePayment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Payments
  /payments/{paymentId}/refunds:
    get:
      operationId: PaymentsController_getRefunds
      parameters:
        - name: paymentId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Payments
    post:
      operationId: PaymentsController_createRefund
      parameters:
        - name: paymentId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRefundDto'
      responses:
        '201':
          description: ''
      tags:
        - Payments
  /payments/{id}/process:
    post:
      operationId: PaymentsController_processPayment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Payments
  /payments/{id}/fail:
    post:
      operationId: PaymentsController_failPayment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FailPaymentDto'
      responses:
        '201':
          description: ''
      tags:
        - Payments
  /payments/bulk/update-status:
    post:
      operationId: PaymentsController_bulkUpdateStatus
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkPaymentStatusDto'
      responses:
        '201':
          description: ''
      tags:
        - Payments
  /payments/bulk/delete:
    post:
      operationId: PaymentsController_bulkDelete
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkDeletePaymentsDto'
      responses:
        '201':
          description: ''
      tags:
        - Payments
  /subscriptions:
    post:
      operationId: SubscriptionsController_createSubscription
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSubscriptionDto'
      responses:
        '201':
          description: ''
      tags:
        - Subscriptions
    get:
      operationId: SubscriptionsController_findAllSubscriptions
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/analytics:
    get:
      operationId: SubscriptionsController_getSubscriptionAnalytics
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/upcoming-billing:
    get:
      operationId: SubscriptionsController_getUpcomingBilling
      parameters:
        - name: days
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/{id}:
    get:
      operationId: SubscriptionsController_findSubscriptionById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
    patch:
      operationId: SubscriptionsController_updateSubscription
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSubscriptionDto'
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
    delete:
      operationId: SubscriptionsController_deleteSubscription
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/{id}/pause:
    post:
      operationId: SubscriptionsController_pauseSubscription
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/{id}/resume:
    post:
      operationId: SubscriptionsController_resumeSubscription
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/{id}/cancel:
    post:
      operationId: SubscriptionsController_cancelSubscription
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/plans:
    post:
      operationId: SubscriptionsController_createSubscriptionPlan
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSubscriptionPlanDto'
      responses:
        '201':
          description: ''
      tags:
        - Subscriptions
    get:
      operationId: SubscriptionsController_findAllSubscriptionPlans
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
  /subscriptions/plans/{id}:
    get:
      operationId: SubscriptionsController_findSubscriptionPlanById
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
    patch:
      operationId: SubscriptionsController_updateSubscriptionPlan
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSubscriptionPlanDto'
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
    delete:
      operationId: SubscriptionsController_deleteSubscriptionPlan
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Subscriptions
  /quotes:
    post:
      operationId: QuotesController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateQuoteDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
    get:
      operationId: QuotesController_findAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Quotes
  /quotes/from-deal/{dealId}:
    post:
      operationId: QuotesController_generateFromDeal
      parameters:
        - name: dealId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateQuoteDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
  /quotes/analytics:
    get:
      operationId: QuotesController_getAnalytics
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Quotes
  /quotes/{id}:
    get:
      operationId: QuotesController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Quotes
    patch:
      operationId: QuotesController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateQuoteDto'
      responses:
        '200':
          description: ''
      tags:
        - Quotes
    delete:
      operationId: QuotesController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Quotes
  /quotes/{id}/send:
    post:
      operationId: QuotesController_sendQuote
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendQuoteDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
  /quotes/{id}/accept:
    post:
      operationId: QuotesController_acceptQuote
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AcceptQuoteDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
  /quotes/{id}/decline:
    post:
      operationId: QuotesController_declineQuote
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeclineQuoteDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
  /quotes/{id}/convert-invoice:
    post:
      operationId: QuotesController_convertToInvoice
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConvertToInvoiceDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
  /quotes/{id}/revise:
    post:
      operationId: QuotesController_reviseQuote
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateQuoteDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
  /quotes/{id}/void:
    post:
      operationId: QuotesController_voidQuote
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoidQuoteDto'
      responses:
        '201':
          description: ''
      tags:
        - Quotes
  /invoices:
    post:
      operationId: InvoicesController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInvoiceDto'
      responses:
        '201':
          description: ''
      tags:
        - Invoices
    get:
      operationId: InvoicesController_findAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Invoices
  /invoices/from-quote/{quoteId}:
    post:
      operationId: InvoicesController_generateFromQuote
      parameters:
        - name: quoteId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInvoiceDto'
      responses:
        '201':
          description: ''
      tags:
        - Invoices
  /invoices/from-deal/{dealId}:
    post:
      operationId: InvoicesController_generateFromDeal
      parameters:
        - name: dealId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInvoiceDto'
      responses:
        '201':
          description: ''
      tags:
        - Invoices
  /invoices/overdue:
    get:
      operationId: InvoicesController_getOverdue
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Invoices
  /invoices/analytics:
    get:
      operationId: InvoicesController_getAnalytics
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Invoices
  /invoices/{id}:
    get:
      operationId: InvoicesController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Invoices
    patch:
      operationId: InvoicesController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateInvoiceDto'
      responses:
        '200':
          description: ''
      tags:
        - Invoices
    delete:
      operationId: InvoicesController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Invoices
  /invoices/{id}/send:
    post:
      operationId: InvoicesController_sendInvoice
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendInvoiceDto'
      responses:
        '201':
          description: ''
      tags:
        - Invoices
  /invoices/{id}/record-payment:
    post:
      operationId: InvoicesController_recordPayment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecordPaymentDto'
      responses:
        '201':
          description: ''
      tags:
        - Invoices
  /invoices/{id}/void:
    post:
      operationId: InvoicesController_voidInvoice
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoidInvoiceDto'
      responses:
        '201':
          description: ''
      tags:
        - Invoices
  /deals:
    post:
      operationId: DealsController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDealDto'
      responses:
        '201':
          description: ''
      tags:
        - Deals
    get:
      operationId: DealsController_findAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Deals
  /deals/forecast:
    get:
      operationId: DealsController_getForecast
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Deals
  /deals/pipeline:
    get:
      operationId: DealsController_getPipelineView
      parameters:
        - name: pipelineId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Deals
  /deals/{id}:
    get:
      operationId: DealsController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Deals
    patch:
      operationId: DealsController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDealDto'
      responses:
        '200':
          description: ''
      tags:
        - Deals
    delete:
      operationId: DealsController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Deals
  /deals/{id}/stage:
    post:
      operationId: DealsController_moveToStage
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MoveDealStageDto'
      responses:
        '201':
          description: ''
      tags:
        - Deals
  /deals/{id}/close-won:
    post:
      operationId: DealsController_closeWon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CloseDealDto'
      responses:
        '201':
          description: ''
      tags:
        - Deals
  /deals/{id}/close-lost:
    post:
      operationId: DealsController_closeLost
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CloseDealDto'
      responses:
        '201':
          description: ''
      tags:
        - Deals
  /deals/pipelines:
    post:
      operationId: DealPipelinesController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDealPipelineDto'
      responses:
        '201':
          description: ''
      tags:
        - DealPipelines
    get:
      operationId: DealPipelinesController_findAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - DealPipelines
  /deals/pipelines/{id}:
    get:
      operationId: DealPipelinesController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DealPipelines
    patch:
      operationId: DealPipelinesController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDealPipelineDto'
      responses:
        '200':
          description: ''
      tags:
        - DealPipelines
    delete:
      operationId: DealPipelinesController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DealPipelines
  /deals/pipelines/{id}/stages:
    post:
      operationId: DealPipelinesController_createStage
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDealStageDto'
      responses:
        '201':
          description: ''
      tags:
        - DealPipelines
  /deals/pipelines/{id}/stages/{stageId}:
    patch:
      operationId: DealPipelinesController_updateStage
      parameters:
        - name: stageId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDealStageDto'
      responses:
        '200':
          description: ''
      tags:
        - DealPipelines
    delete:
      operationId: DealPipelinesController_removeStage
      parameters:
        - name: stageId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - DealPipelines
  /contacts:
    get:
      operationId: ContactsController_getContacts
      parameters:
        - name: type
          required: true
          in: query
          schema:
            type: string
        - name: companyId
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Contacts
    post:
      operationId: ContactsController_createContact
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Contacts
  /contacts/{id}:
    get:
      operationId: ContactsController_getContact
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Contacts
    put:
      operationId: ContactsController_updateContact
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Contacts
    delete:
      operationId: ContactsController_deleteContact
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Contacts
  /integrations/status:
    get:
      operationId: IntegrationStatusController_getIntegrationStatus
      parameters:
        - name: platform
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - IntegrationStatus
  /integrations/status/{platform}:
    get:
      operationId: IntegrationStatusController_getPlatformStatus
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - IntegrationStatus
  /integrations/test/{platform}:
    post:
      operationId: IntegrationStatusController_testConnection
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - IntegrationStatus
  /integrations/health/{platform}:
    get:
      operationId: IntegrationStatusController_getHealthStatus
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - IntegrationStatus
  /integrations/health/{platform}/check:
    post:
      operationId: IntegrationStatusController_checkHealth
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
      tags:
        - IntegrationStatus
  /integrations/sync-status:
    get:
      operationId: IntegrationStatusController_getSyncStatus
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - IntegrationStatus
  /webhooks/hubspot:
    post:
      operationId: WebhooksController_handleHubSpotWebhook
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/quickbooks:
    post:
      operationId: WebhooksController_handleQuickBooksWebhook
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/clickup:
    post:
      operationId: WebhooksController_handleClickUpWebhook
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/stripe:
    post:
      operationId: WebhooksController_handleStripeWebhook
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/google-workspace:
    post:
      operationId: WebhooksController_handleGoogleWorkspaceWebhook
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/microsoft-365:
    post:
      operationId: WebhooksController_handleMicrosoft365Webhook
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/info/{platform}:
    get:
      operationId: WebhooksController_getWebhookInfo
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/test/{platform}:
    post:
      operationId: WebhooksController_testWebhook
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/register/{platform}:
    post:
      operationId: WebhooksController_registerWebhook
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/list/{platform}:
    get:
      operationId: WebhooksController_listWebhooks
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /webhooks/unregister/{platform}/{webhookId}:
    post:
      operationId: WebhooksController_unregisterWebhook
      parameters:
        - name: platform
          required: true
          in: path
          schema:
            type: string
        - name: webhookId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Webhooks
  /vault/mirror/events:
    post:
      operationId: VaultController_mirrorIngest
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Vault
  /vault/entries:
    get:
      operationId: VaultController_entries
      parameters:
        - name: workspaceId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Vault
  /vault/resolve:
    get:
      operationId: VaultController_resolve
      parameters:
        - name: workspaceId
          required: true
          in: query
          schema:
            type: string
        - name: vaultKey
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Vault
  /vault/grants:
    post:
      operationId: VaultController_createGrant
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Vault
  /vault/grants/{id}:
    delete:
      operationId: VaultController_deleteGrant
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Vault
  /ai-integrations:
    post:
      operationId: AIIntegrationController_createAIIntegration
      parameters: []
      responses:
        '201':
          description: AI integration created successfully
        '400':
          description: Invalid input data
        '403':
          description: Insufficient permissions
      security:
        - bearer: []
      summary: Create AI-powered integration
      tags:
        - AI Integrations
  /ai-integrations/upload-openapi:
    post:
      operationId: AIIntegrationController_uploadOpenAPISpec
      parameters: []
      responses:
        '201':
          description: OpenAPI spec uploaded and processed
        '400':
          description: Invalid file format
      security:
        - bearer: []
      summary: Upload OpenAPI specification file
      tags:
        - AI Integrations
  /ai-integrations/crawl-documentation:
    post:
      operationId: AIIntegrationController_crawlDocumentation
      parameters: []
      responses:
        '201':
          description: Documentation crawled and processed
        '400':
          description: Invalid URL or crawling failed
      security:
        - bearer: []
      summary: Crawl API documentation from URL
      tags:
        - AI Integrations
  /ai-integrations/manual-entry:
    post:
      operationId: AIIntegrationController_createManualIntegration
      parameters: []
      responses:
        '201':
          description: Manual integration created
        '400':
          description: Invalid input data
      security:
        - bearer: []
      summary: Create integration from manual entry
      tags:
        - AI Integrations
  /ai-integrations/{id}/deploy:
    post:
      operationId: AIIntegrationController_deployIntegration
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: Integration deployed successfully
        '400':
          description: Deployment failed
        '404':
          description: AI request not found
      security:
        - bearer: []
      summary: Deploy AI-generated integration
      tags:
        - AI Integrations
  /ai-integrations/{id}/approve:
    put:
      operationId: AIIntegrationController_approveIntegration
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Integration approved
        '404':
          description: Integration not found
      security:
        - bearer: []
      summary: Approve integration for deployment
      tags:
        - AI Integrations
  /ai-integrations/{id}/reject:
    put:
      operationId: AIIntegrationController_rejectIntegration
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Integration rejected
        '404':
          description: Integration not found
      security:
        - bearer: []
      summary: Reject integration
      tags:
        - AI Integrations
  /ai-integrations/integrations:
    get:
      operationId: AIIntegrationController_getIntegrations
      parameters:
        - name: status
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Integrations retrieved successfully
      security:
        - bearer: []
      summary: Get all custom integrations
      tags:
        - AI Integrations
  /ai-integrations/ai-requests:
    get:
      operationId: AIIntegrationController_getAIRequests
      parameters:
        - name: status
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: AI requests retrieved successfully
      security:
        - bearer: []
      summary: Get all AI integration requests
      tags:
        - AI Integrations
  /ai-integrations/ai-requests/{id}:
    get:
      operationId: AIIntegrationController_getAIRequest
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: AI request retrieved successfully
        '404':
          description: AI request not found
      security:
        - bearer: []
      summary: Get specific AI integration request
      tags:
        - AI Integrations
  /ai-integrations/integrations/{id}:
    get:
      operationId: AIIntegrationController_getIntegration
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Integration retrieved successfully
        '404':
          description: Integration not found
      security:
        - bearer: []
      summary: Get specific custom integration
      tags:
        - AI Integrations
    delete:
      operationId: AIIntegrationController_deleteIntegration
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '204':
          description: Integration deleted successfully
        '404':
          description: Integration not found
      security:
        - bearer: []
      summary: Delete custom integration
      tags:
        - AI Integrations
  /ai-integrations/status:
    get:
      operationId: AIIntegrationController_getSystemStatus
      parameters: []
      responses:
        '200':
          description: System status retrieved
      security:
        - bearer: []
      summary: Get AI integration system status
      tags:
        - AI Integrations
  /ai-integrations/test-connection:
    post:
      operationId: AIIntegrationController_testOpenAIConnection
      parameters: []
      responses:
        '200':
          description: Connection test completed
      security:
        - bearer: []
      summary: Test OpenAI connection
      tags:
        - AI Integrations
info:
  title: Monocle API
  description: >-
    Monocle public API — task management, client/contact data, workplace
    hierarchy, deals, quotes, invoices, payments, integrations, and webhooks.
    OpenAPI is the contract source of truth: every supported integration surface
    is described here. See https://monocle.welldoit.solutions/developers for
    guides.
  version: '1.0'
  contact:
    name: Monocle Developers
    url: https://monocle.welldoit.solutions/developers
    email: developers@welldoit.solutions
tags:
  - name: auth
    description: Authentication and session management
  - name: api-keys
    description: Workplace-scoped API key lifecycle (Phase 4)
  - name: tasks
    description: Task management operations
  - name: hierarchy
    description: Workplace hierarchy and membership
  - name: contacts
    description: Contacts and client data
  - name: deals
    description: Deal pipeline operations
  - name: quotes
    description: Quote generation and lifecycle
  - name: invoices
    description: Invoice generation and tracking
  - name: payments
    description: Payments and reconciliation
  - name: products
    description: Catalog and pricing
  - name: subscriptions
    description: Subscription management
  - name: integrations
    description: Third-party integration status and config
  - name: webhooks
    description: Inbound and outbound webhooks
  - name: mcp
    description: Model Context Protocol surface (Phase 4)
  - name: extensions
    description: Browser / workplace extension surface (Phase 4)
servers:
  - url: https://api.monocle.welldoit.solutions
    description: Production
components:
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: >-
        Workplace-scoped API key or session JWT. Send as `Authorization: Bearer
        <token>`.
  schemas:
    CreateApiKeyDto:
      type: object
      properties: {}
    RotateKeyDto:
      type: object
      properties: {}
    ResolveConflictDto:
      type: object
      properties: {}
    CreateProductCategoryDto:
      type: object
      properties: {}
    CreateProductBundleDto:
      type: object
      properties: {}
    CreateProductDto:
      type: object
      properties: {}
    CreateProductVariantDto:
      type: object
      properties: {}
    UpdateProductVariantDto:
      type: object
      properties: {}
    UpdateProductDto:
      type: object
      properties: {}
    CreatePaymentDto:
      type: object
      properties: {}
    UpdatePaymentDto:
      type: object
      properties: {}
    CreateRefundDto:
      type: object
      properties: {}
    FailPaymentDto:
      type: object
      properties: {}
    BulkPaymentStatusDto:
      type: object
      properties: {}
    BulkDeletePaymentsDto:
      type: object
      properties: {}
    CreateSubscriptionDto:
      type: object
      properties: {}
    UpdateSubscriptionDto:
      type: object
      properties: {}
    CreateSubscriptionPlanDto:
      type: object
      properties: {}
    UpdateSubscriptionPlanDto:
      type: object
      properties: {}
    CreateQuoteDto:
      type: object
      properties: {}
    UpdateQuoteDto:
      type: object
      properties: {}
    SendQuoteDto:
      type: object
      properties: {}
    AcceptQuoteDto:
      type: object
      properties: {}
    DeclineQuoteDto:
      type: object
      properties: {}
    ConvertToInvoiceDto:
      type: object
      properties: {}
    VoidQuoteDto:
      type: object
      properties: {}
    CreateInvoiceDto:
      type: object
      properties: {}
    UpdateInvoiceDto:
      type: object
      properties: {}
    SendInvoiceDto:
      type: object
      properties: {}
    RecordPaymentDto:
      type: object
      properties: {}
    VoidInvoiceDto:
      type: object
      properties: {}
    CreateDealDto:
      type: object
      properties: {}
    UpdateDealDto:
      type: object
      properties: {}
    MoveDealStageDto:
      type: object
      properties: {}
    CloseDealDto:
      type: object
      properties: {}
    CreateDealPipelineDto:
      type: object
      properties: {}
    UpdateDealPipelineDto:
      type: object
      properties: {}
    CreateDealStageDto:
      type: object
      properties: {}
    UpdateDealStageDto:
      type: object
      properties: {}
