Charthop app API

The app API from Charthop — 18 operation(s) for app.

Operations 26

GET /v1/app Return all publicly visible global apps #
POST /v1/app Create a new app #
GET /v1/app/install/{appId} Get all active installs of this app #
GET /v1/app/name/{appName} Return a particular app by name #
POST /v1/app/notify Send an email notification to the configured notify users, on behalf of an app #
GET /v1/app/org/{orgId} Return all active apps available for a particular org #
GET /v1/app/org/{orgId}/install Find installed app users #
POST /v1/app/org/{orgId}/install Install an app for a particular org #
GET /v1/app/org/{orgId}/install/name/{appName} Get an installed app by name #
POST /v1/app/org/{orgId}/install/validate Validate the installation of an app for a particular org #
GET /v1/app/org/{orgId}/install/{appUserId} Get an installed app #
PATCH /v1/app/org/{orgId}/install/{appUserId} Update the settings of an installed app #
DELETE /v1/app/org/{orgId}/install/{appUserId} Uninstall an app #
POST /v1/app/org/{orgId}/install/{appUserId}/api-operation/{operation} Execute one configured external API operation against the live external service (the app config 'Test' action). Requires readExternal for a read-only operation, writeExternal other #
POST /v1/app/org/{orgId}/install/{appUserId}/code Retrieve an Oauth2 authorization code for this app, which can be exchanged for an access token #
GET /v1/app/org/{orgId}/install/{appUserId}/connections List an installed agent's active MCP connections (one per connected user token) #
DELETE /v1/app/org/{orgId}/install/{appUserId}/connections Revoke MCP connections for an installed agent #
POST /v1/app/org/{orgId}/install/{appUserId}/disable-sync Disable automatic sync for an app installation whose credentials are failing #
GET /v1/app/org/{orgId}/install/{appUserId}/installdata/{installDataName} Retrieve the current token for this app #
POST /v1/app/org/{orgId}/install/{appUserId}/oauth-token/refresh Force-refresh the vendor OAuth token for an app installation #
POST /v1/app/org/{orgId}/install/{appUserId}/run Run an installed app #
GET /v1/app/org/{orgId}/install/{appUserId}/token Retrieve the current token for this app #
POST /v1/app/org/{orgId}/install/{appUserId}/token Generate or regenerate a long-lived access token for the app #
GET /v1/app/{appId} Return a particular app by id #
PATCH /v1/app/{appId} Update an existing app #
DELETE /v1/app/{appId} Delete an app #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/charthop-app-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

charthop-app-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: REST API for ChartHop
  version: V1.0.0
  title: ChartHop access App API
  contact:
    name: ChartHop
    url: https://www.charthop.com
    email: support@charthop.com
servers:
- url: https://localhost
- url: http://localhost
tags:
- name: app
paths:
  /v1/app:
    get:
      tags:
      - app
      summary: Return all publicly visible global apps
      operationId: findGlobalApps
      parameters:
      - name: tag
        in: query
        description: Tag to filter by
        required: false
        schema:
          type: string
      - name: from
        in: query
        description: App id to start from
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsApp'
        '400':
          description: bad request
        '404':
          description: not found
    post:
      tags:
      - app
      summary: Create a new app
      operationId: createApp
      responses:
        '201':
          description: app created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/App'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateApp'
        description: App data to create
        required: true
  /v1/app/install/{appId}:
    get:
      tags:
      - app
      summary: Get all active installs of this app
      operationId: getActiveAppInstalls
      parameters:
      - name: appId
        in: path
        description: App id
        required: true
        schema:
          type: string
      - name: orgTypes
        in: query
        description: Comma-separated list of org types to include. Defaults to all org types.
        required: false
        schema:
          type: string
      - name: hasRunProcess
        in: query
        description: Whether to require that the app has run at least one process. Defaults to true.
        required: false
        schema:
          type: boolean
      - name: internalOptions
        in: query
        description: Filter app users by internal option key-value pair
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsUser'
  /v1/app/name/{appName}:
    get:
      tags:
      - app
      summary: Return a particular app by name
      operationId: getAppByName
      parameters:
      - name: appName
        in: path
        description: App name
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/App'
        '400':
          description: bad request
        '404':
          description: not found
  /v1/app/notify:
    post:
      tags:
      - app
      summary: Send an email notification to the configured notify users, on behalf of an app
      operationId: sendNotification
      responses:
        '204':
          description: notification sent
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NotifyRequest'
        required: true
  /v1/app/org/{orgId}:
    get:
      tags:
      - app
      summary: Return all active apps available for a particular org
      operationId: findApps
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: q
        in: query
        description: Search query
        required: false
        schema:
          type: string
      - name: type
        in: query
        description: Filter by type (app, bundle)
        required: false
        schema:
          type: string
      - name: tags
        in: query
        description: Filter by tags
        required: false
        schema:
          type: string
      - name: from
        in: query
        description: App id to start from
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsApp'
        '400':
          description: bad request
        '404':
          description: not found
  /v1/app/org/{orgId}/install:
    get:
      tags:
      - app
      summary: Find installed app users
      operationId: findInstalledApps
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: type
        in: query
        description: Filter by type (app, bundle)
        required: false
        schema:
          type: string
      - name: tags
        in: query
        description: Filter by tag
        required: false
        schema:
          type: string
      - name: statuses
        in: query
        description: 'Filter by App User statuses, comma-separated. Accepted values: [''NORMAL'', ''INACTIVE'', ''UNINSTALLED'']'
        required: false
        schema:
          type: string
      - name: includeFormer
        in: query
        description: Whether to include app users with NONE access to orgs they pertain to.  Default is false
        required: false
        schema:
          type: boolean
      - name: from
        in: query
        description: App id to start from
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsUser'
        '400':
          description: bad request
        '404':
          description: not found
    post:
      tags:
      - app
      summary: Install an app for a particular org
      operationId: installApp
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '201':
          description: app installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUser'
        description: App user data to create
        required: true
  /v1/app/org/{orgId}/install/name/{appName}:
    get:
      tags:
      - app
      summary: Get an installed app by name
      operationId: getInstalledAppByName
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appName
        in: path
        description: App name
        required: true
        schema:
          type: string
      - name: includeInactive
        in: query
        description: If the installed appUser is inactive, load inactive instead
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/app/org/{orgId}/install/validate:
    post:
      tags:
      - app
      summary: Validate the installation of an app for a particular org
      operationId: validateInstallApp
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '201':
          description: app validated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BundleInstallValidate'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUser'
        description: App user data to create
        required: true
  /v1/app/org/{orgId}/install/{appUserId}:
    get:
      tags:
      - app
      summary: Get an installed app
      operationId: getInstalledApp
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
    patch:
      tags:
      - app
      summary: Update the settings of an installed app
      operationId: updateInstalledApp
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      - name: includeInactive
        in: query
        description: If the installed appUser is inactive, load inactive instead
        required: false
        schema:
          type: boolean
      responses:
        '204':
          description: app updated
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUser'
        description: App user data to update
        required: true
    delete:
      tags:
      - app
      summary: Uninstall an app
      operationId: uninstallApp
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      - name: keepEntityIds
        in: query
        description: Comma-separated list of bundle-installed entities to delete -- if this parameter is omitted, all bundle-installed entities will be deleted
        required: false
        schema:
          type: string
      responses:
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/app/org/{orgId}/install/{appUserId}/api-operation/{operation}:
    post:
      tags:
      - app
      summary: Execute one configured external API operation against the live external service (the app config 'Test' action). Requires readExternal for a read-only operation, writeExternal otherwise; a non-read-only operation runs against the live API and may create, change, or delete real data.
      operationId: testApiOperation
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      - name: operation
        in: path
        description: Operation id
        required: true
        schema:
          type: string
      - name: from
        in: query
        description: Pagination cursor (opaque 'next' from a prior result)
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Maximum number of records to return
        required: false
        schema:
          type: integer
          format: int32
      - name: tokenLevel
        in: query
        description: 'OAuth identity to call as: USER (caller''s own connection) or ORG (shared connection). Defaults to the installation''s mode.'
        required: false
        schema:
          type: string
          enum:
          - ORG
          - USER
      responses:
        '200':
          description: operation executed (inspect the result for the API's status/body)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalApiExecutionResult'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: object
  /v1/app/org/{orgId}/install/{appUserId}/code:
    post:
      tags:
      - app
      summary: Retrieve an Oauth2 authorization code for this app, which can be exchanged for an access token
      operationId: getAuthorizationCode
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      - name: scope
        in: query
        description: Scopes
        required: false
        schema:
          type: string
      responses:
        '201':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessTokenResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/app/org/{orgId}/install/{appUserId}/connections:
    get:
      tags:
      - app
      summary: List an installed agent's active MCP connections (one per connected user token)
      operationId: listMcpConnections
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '403':
          description: permission denied
        '404':
          description: not found
    delete:
      tags:
      - app
      summary: Revoke MCP connections for an installed agent
      operationId: revokeMcpConnections
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: revoked
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RevokeMcpConnectionsRequest'
        required: true
  /v1/app/org/{orgId}/install/{appUserId}/disable-sync:
    post:
      tags:
      - app
      summary: Disable automatic sync for an app installation whose credentials are failing
      operationId: disableSync
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DisableSyncResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisableSyncRequest'
        required: true
  /v1/app/org/{orgId}/install/{appUserId}/installdata/{installDataName}:
    get:
      tags:
      - app
      summary: Retrieve the current token for this app
      operationId: getAppInstallData
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      - name: installDataName
        in: path
        description: Name
        required: true
        schema:
          type: string
      responses:
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/app/org/{orgId}/install/{appUserId}/oauth-token/refresh:
    post:
      tags:
      - app
      summary: Force-refresh the vendor OAuth token for an app installation
      operationId: refreshOauthToken
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthRefreshResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: no active token / refresh failed — re-authorization required
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OauthRefreshRequest'
        required: true
  /v1/app/org/{orgId}/install/{appUserId}/run:
    post:
      tags:
      - app
      summary: Run an installed app
      operationId: runInstalledApp
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: app started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Process'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: object
  /v1/app/org/{orgId}/install/{appUserId}/token:
    get:
      tags:
      - app
      summary: Retrieve the current token for this app
      operationId: getAccessToken
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessTokenResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
    post:
      tags:
      - app
      summary: Generate or regenerate a long-lived access token for the app
      operationId: generateAccessToken
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: appUserId
        in: path
        description: App user id
        required: true
        schema:
          type: string
      responses:
        '201':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessTokenResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScopeRequest'
        required: true
  /v1/app/{appId}:
    get:
      tags:
      - app
      summary: Return a particular app by id
      operationId: getApp
      parameters:
      - name: appId
        in: path
        description: App id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/App'
        '400':
          description: bad request
        '404':
          description: not found
    patch:
      tags:
      - app
      summary: Update an existing app
      operationId: updateApp
      parameters:
      - name: appId
        in: path
        description: App id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: app updated
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateApp'
        description: App data to update
        required: true
    delete:
      tags:
      - app
      summary: Delete an app
      operationId: deleteApp
      parameters:
      - name: appId
        in: path
        description: App id
        required: true
        schema:
          type: string
      responses:
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
components:
  schemas:
    CreateUser:
      type: object
      required:
      - orgs
      properties:
        appId:
          type: string
          description: if the user is an app user, the id of the app
          example: 588f7ee98f138b19220041a7
        name:
          description: full name of user
          $ref: '#/components/schemas/Name'
        email:
          type: string
          description: email address of user
          example: bob@example.com
          minItems: 0
          maxItems: 120
        orgs:
          type: array
          description: list of member orgs with permission levels
          uniqueItems: true
          items:
            $ref: '#/components/schemas/OrgAccess'
        imagePath:
          type: string
          description: path to full-sized profile image in storage
          pattern: ^[a-zA-Z0-9._/-]+$
        status:
          type: string
          description: current status of user
          enum:
          - SUPERUSER
          - NORMAL
          - INACTIVE
          - UNINSTALLED
        type:
          type: string
          description: type of user
          enum:
          - USER
          - APP
        options:
          type: object
          description: for apps, options (specific options are specific to the particular app); for users, user-set preferences
        internalOptions:
          type: object
          description: internal (ChartHop controlled) options
        secrets:
          type: object
          description: write-only secrets; the content of these secrets are not retrievable via the external-facing API
        emailSettings:
          type: array
          description: Email settings for the user
          items:
            $ref: '#/components/schemas/UserEmailSetting'
        sensitive:
          type: string
          description: sensitivity level of the user's configuration; only applicable to APP users
          enum:
          - GLOBAL
          - ORG
          - SENSITIVE
          - PERSONAL
          - MANAGER
          - HIGH
          - PRIVATE
        shareAccess:
          type: array
          description: users and groups who have access to configure this user; only applicable to APP users
          items:
            $ref: '#/components/schemas/ShareAccess'
        agentConfig:
          description: per-user agent configuration overrides
          $ref: '#/components/schemas/AiAgentConfig'
    Geopoint:
      type: object
      required:
      - type
      - coordinates
      properties:
        type:
          type: string
          description: Type of point
          readOnly: true
        coordinates:
          type: array
          description: The longitude and latitude of the point
          readOnly: true
          items:
            type: number
            format: double
    UserEmailSetting:
      type: object
      required:
      - category
      - subscribed
      properties:
        category:
          type: string
          description: Category of emails
          example: ADMINISTRATIVE
          enum:
          - ADMINISTRATIVE
          - BILLING
          - DATA_IMPORT_AND_SYNC_STATUS
          - TRIAL_REMINDERS
          - APPROVAL_NOTIFICATIONS
        subscribed:
          type: boolean
          description: Is user subscribed to the category of emails
    UpdateUser:
      type: object
      properties:
        appId:
          type: string
          description: if the user is an app user, the id of the app
          example: 588f7ee98f138b19220041a7
        name:
          description: full name of user
          $ref: '#/components/schemas/Name'
        email:
          type: string
          description: email address of user
          example: bob@example.com
          minItems: 0
          maxItems: 120
        orgs:
          type: array
          description: list of member orgs with permission levels
          uniqueItems: true
          items:
            $ref: '#/components/schemas/OrgAccess'
        imagePath:
          type: string
          description: path to full-sized profile image in storage
          pattern: ^[a-zA-Z0-9._/-]+$
        status:
          type: string
          description: current status of user
          enum:
          - SUPERUSER
          - NORMAL
          - INACTIVE
          - UNINSTALLED
        options:
          type: object
          description: for apps, options (specific options are specific to the particular app); for users, user-set preferences
        internalOptions:
          type: object
          description: internal (ChartHop controlled) options
        secrets:
          type: object
          description: write-only secrets; the content of these secrets are not retrievable via the external-facing API
        emailSettings:
          type: array
          description: Email settings for the user
          items:
            $ref: '#/components/schemas/UserEmailSetting'
        sensitive:
          type: string
          description: sensitivity level of the user's configuration; only applicable to APP users
          enum:
          - GLOBAL
          - ORG
          - SENSITIVE
          - PERSONAL
          - MANAGER
          - HIGH
          - PRIVATE
        shareAccess:
          type: array
          description: users and groups who have access to configure this user; only applicable to APP users
          items:
            $ref: '#/components/schemas/ShareAccess'
        agentConfig:
          description: per-user agent configuration overrides
          $ref: '#/components/schemas/AiAgentConfig'
    AccessAction:
      type: object
      required:
      - action
      properties:
        action:
          type: string
        fields:
          type: array
          uniqueItems: true
          items:
            type: string
        types:
          type: array
          uniqueItems: true
          items:
            type: string
    Question:
      type: object
      required:
      - id
      - question
      - type
      properties:
        id:
          type: string
          description: globally unique id
          example: 588f7ee98f138b19220041a7
        orgId:
          type: string
          description: parent organization id (empty if global)
          example: 588f7ee98f138b19220041a7
        question:
          type: string
          description: text of the question
          example: What is your favorite color?
        questionTr:
          description: translations for the question text
          $ref: '#/components/schemas/Translations'
        fieldId:
          type: string
          description: if the question is linked to a field, the id of that field. Any question responses will be automatically saved to the field
          example: 588f7ee98f138b19220041a7
        type:
          type: string
          description: datatype of the question
          enum:
          - ADDRESS
          - AUDIO
          - BOOLEAN
          - COMP
          - COMPOUND
          - COMP_BAND
          - CONTACTS
          - CURRENCY
          - DATE
          - DECIMAL
          - ELAPSED_DAYS
          - ELAPSED_MONTHS
          - ELAPSED_YEARS
          - EMAIL
          - ENUM
          - ENUM_EXP

# --- truncated at 32 KB (192 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/charthop/refs/heads/main/openapi/charthop-app-api-openapi.yml