Charthop ai API

The ai API from Charthop — 17 operation(s) for ai.

Operations 24

GET /v1/org/{orgId}/ai/agent-memory List memories for an agent #
POST /v1/org/{orgId}/ai/agent-memory Create a new memory #
GET /v1/org/{orgId}/ai/agent-memory/{memoryId} Get a single memory #
PATCH /v1/org/{orgId}/ai/agent-memory/{memoryId} Update a memory #
DELETE /v1/org/{orgId}/ai/agent-memory/{memoryId} Delete a memory #
POST /v1/org/{orgId}/ai/chat Start a new AI chat with an initial message or question #
GET /v1/org/{orgId}/ai/chat Retrieve previous AI chats #
GET /v1/org/{orgId}/ai/chat/prompt-suggest Retrieve some suggested prompts for starting an AI chat #
GET /v1/org/{orgId}/ai/chat/top-users Find users with the most AI chats over a date range #
GET /v1/org/{orgId}/ai/chat/{chatId} Retrieve a previous AI chat #
PATCH /v1/org/{orgId}/ai/chat/{chatId} Update an existing AI chat's metadata, such as label or shareAccess information #
DELETE /v1/org/{orgId}/ai/chat/{chatId} Delete an AI chat #
POST /v1/org/{orgId}/ai/chat/{chatId}/answer-tool Answer a pending AskUserQuestion tool call in an AI chat #
POST /v1/org/{orgId}/ai/chat/{chatId}/approve-tool Approve pending tool calls in an AI chat #
POST /v1/org/{orgId}/ai/chat/{chatId}/message Send an additional message to an existing AI chat #
GET /v1/org/{orgId}/ai/chat/{chatId}/message/{messageId} Retrieve an individual message from an existing AI chat #
POST /v1/org/{orgId}/ai/chat/{chatId}/message/{messageId}/feedback Send feedback on a message in an AI chat #
POST /v1/org/{orgId}/ai/chat/{chatId}/reject-tool Reject pending tool calls in an AI chat #
PATCH /v1/org/{orgId}/ai/config Update configuration of AI models for this org (ChartHop staff only) #
POST /v1/org/{orgId}/ai/form-response/summary Use AI to generate a summary of text form responses #
POST /v1/org/{orgId}/ai/translate Translate from one language to another using AI #
POST /v1/org/{orgId}/ai/translate/detect-language Detect the dominant language of a text #
POST /v1/org/{orgId}/ai/translate/expression Translate natural language into a CQL filter expression #
DELETE /v1/org/{orgId}/ai/translate/expression Invalidate all cached expression translation responses #

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-ai-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-ai-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: REST API for ChartHop
  version: V1.0.0
  title: ChartHop access AI API
  contact:
    name: ChartHop
    url: https://www.charthop.com
    email: support@charthop.com
servers:
- url: https://localhost
- url: http://localhost
tags:
- name: ai
paths:
  /v1/org/{orgId}/ai/agent-memory:
    get:
      tags:
      - ai
      summary: List memories for an agent
      operationId: listMemories
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: agentUserId
        in: query
        description: Agent user ID
        required: false
        schema:
          type: string
      - name: userId
        in: query
        description: User ID (defaults to current user)
        required: false
        schema:
          type: string
      - name: actionId
        in: query
        description: Action ID, if filtering for a particular action
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '401':
          description: not authorized
        '403':
          description: permission denied
    post:
      tags:
      - ai
      summary: Create a new memory
      operationId: createMemory
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '201':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAiAgentMemory'
        required: true
  /v1/org/{orgId}/ai/agent-memory/{memoryId}:
    get:
      tags:
      - ai
      summary: Get a single memory
      operationId: getMemory
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: memoryId
        in: path
        description: Memory ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
    patch:
      tags:
      - ai
      summary: Update a memory
      operationId: updateMemory
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: memoryId
        in: path
        description: Memory ID
        required: true
        schema:
          type: string
      responses:
        '204':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAiAgentMemory'
        required: true
    delete:
      tags:
      - ai
      summary: Delete a memory
      operationId: deleteMemory
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: memoryId
        in: path
        description: Memory ID
        required: true
        schema:
          type: string
      responses:
        '204':
          description: successful operation
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/org/{orgId}/ai/chat:
    post:
      tags:
      - ai
      summary: Start a new AI chat with an initial message or question
      operationId: startChat
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '201':
          description: successful operation
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/AiChat'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiChatRequest'
        required: true
    get:
      tags:
      - ai
      summary: Retrieve previous AI chats
      operationId: findChats
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: userId
        in: query
        description: User id
        required: false
        schema:
          type: string
      - name: agentUserId
        in: query
        description: Filter by agent user id
        required: false
        schema:
          type: string
      - name: fromAt
        in: query
        description: Timestamp to search from
        required: false
        schema:
          type: string
      - name: untilAt
        in: query
        description: Timestamp to search up until
        required: false
        schema:
          type: string
      - name: from
        in: query
        description: Identifier to paginate from
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
      - name: sort
        in: query
        description: Sort by (default is createAt, can also use updateAt)
        required: false
        schema:
          type: string
      - name: returnAccess
        in: query
        description: 'Return access information -- pass a list of actions to check, for example: create,update,delete'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsAiChat'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/org/{orgId}/ai/chat/prompt-suggest:
    get:
      tags:
      - ai
      summary: Retrieve some suggested prompts for starting an AI chat
      operationId: getSuggestedPrompts
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: limit
        in: query
        description: Number of suggestions to return (defaults to 5)
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiSuggestedPromptsResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/org/{orgId}/ai/chat/top-users:
    get:
      tags:
      - ai
      summary: Find users with the most AI chats over a date range
      operationId: findTopUsers
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: startDate
        in: query
        description: Start date (inclusive)
        required: false
        schema:
          type: string
          format: date
      - name: endDate
        in: query
        description: End date (inclusive)
        required: false
        schema:
          type: string
          format: date
      - name: fields
        in: query
        description: Fields to retrieve, comma-separated
        required: false
        schema:
          type: string
      - name: format
        in: query
        description: Data format to use; default is json, can also use json-extended or json-readable
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
      - name: filter
        in: query
        description: CQL filter to apply on the person
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/org/{orgId}/ai/chat/{chatId}:
    get:
      tags:
      - ai
      summary: Retrieve a previous AI chat
      operationId: getChat
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiChat'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
    patch:
      tags:
      - ai
      summary: Update an existing AI chat's metadata, such as label or shareAccess information
      operationId: updateChat
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      responses:
        '204':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAiChat'
        description: Chat data to update
        required: true
    delete:
      tags:
      - ai
      summary: Delete an AI chat
      operationId: deleteChat
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      responses:
        '204':
          description: chat deleted
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/org/{orgId}/ai/chat/{chatId}/answer-tool:
    post:
      tags:
      - ai
      summary: Answer a pending AskUserQuestion tool call in an AI chat
      operationId: answerToolQuestion
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiChatAnswerToolRequest'
        required: true
  /v1/org/{orgId}/ai/chat/{chatId}/approve-tool:
    post:
      tags:
      - ai
      summary: Approve pending tool calls in an AI chat
      operationId: approveToolUses
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiChatApproveToolRequest'
        required: true
  /v1/org/{orgId}/ai/chat/{chatId}/message:
    post:
      tags:
      - ai
      summary: Send an additional message to an existing AI chat
      operationId: sendMessageToChat
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      responses:
        '201':
          description: successful operation
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/AiChatMessage'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiChatRequest'
        required: true
  /v1/org/{orgId}/ai/chat/{chatId}/message/{messageId}:
    get:
      tags:
      - ai
      summary: Retrieve an individual message from an existing AI chat
      operationId: getChatMessage
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      - name: messageId
        in: path
        description: Message identifier
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiChatMessage'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
  /v1/org/{orgId}/ai/chat/{chatId}/message/{messageId}/feedback:
    post:
      tags:
      - ai
      summary: Send feedback on a message in an AI chat
      operationId: sendChatMessageFeedback
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      - name: messageId
        in: path
        description: Message identifier
        required: true
        schema:
          type: string
      responses:
        '204':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiChatFeedback'
        required: true
  /v1/org/{orgId}/ai/chat/{chatId}/reject-tool:
    post:
      tags:
      - ai
      summary: Reject pending tool calls in an AI chat
      operationId: rejectToolUses
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: chatId
        in: path
        description: Chat identifier
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiChatRejectToolRequest'
        required: true
  /v1/org/{orgId}/ai/config:
    patch:
      tags:
      - ai
      summary: Update configuration of AI models for this org (ChartHop staff only)
      operationId: configureModelForOrg
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAiConfig'
        required: true
  /v1/org/{orgId}/ai/form-response/summary:
    post:
      tags:
      - ai
      summary: Use AI to generate a summary of text form responses
      operationId: summarizeFormResponses
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '204':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SummarizeResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SummarizeFormResponsesRequest'
        required: true
  /v1/org/{orgId}/ai/translate:
    post:
      tags:
      - ai
      summary: Translate from one language to another using AI
      operationId: translate
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '204':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiTranslateResponse'
        '400':
          description: invalid request
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiTranslateRequest'
        required: true
  /v1/org/{orgId}/ai/translate/detect-language:
    post:
      tags:
      - ai
      summary: Detect the dominant language of a text
      operationId: detectLanguage
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetectLanguageResponse'
        '400':
          description: invalid request
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DetectLanguageRequest'
        required: true
  /v1/org/{orgId}/ai/translate/expression:
    post:
      tags:
      - ai
      summary: Translate natural language into a CQL filter expression
      operationId: translateExpression
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiExpressionTranslateResponse'
        '400':
          description: invalid request
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiExpressionTranslateRequest'
        required: true
    delete:
      tags:
      - ai
      summary: Invalidate all cached expression translation responses
      operationId: invalidateExpressionTranslations
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '204':
          description: successful operation
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
components:
  schemas:
    AiExpressionTranslateRequest:
      type: object
      required:
      - text
      properties:
        text:
          type: string
    AiToolResult:
      type: object
      required:
      - toolUseId
      - success
      properties:
        toolUseId:
          type: string
        success:
          type: boolean
        outputText:
          type: string
        outputJson:
          type: object
          additionalProperties:
            type: object
        outputCsv:
          $ref: '#/components/schemas/TabularData'
        navigateUrl:
          type: string
          format: uri
        actionButton:
          $ref: '#/components/schemas/AiToolActionButton'
        userRejected:
          type: boolean
        userRejectedReason:
          type: string
        hintIds:
          type: array
          items:
            type: string
            example: 588f7ee98f138b19220041a7
    UpdateAiChat:
      type: object
      properties:
        label:
          type: string
          description: label for the chat (defaults to the first question asked)
        shareAccess:
          type: array
          description: users who are specifically granted permission to view or edit this chat
          items:
            $ref: '#/components/schemas/ShareAccess'
    AiToolUse:
      type: object
      required:
      - toolUseId
      - name
      - input
      properties:
        toolUseId:
          type: string
        name:
          type: string
        input:
          type: object
          additionalProperties:
            type: object
        entity:
          $ref: '#/components/schemas/AiToolEntity'
        summary:
          type: string
        readOnly:
          type: boolean
    AiChatFeedback:
      type: object
      required:
      - score
      properties:
        score:
          type: integer
          format: int32
    DetectLanguageResponse:
      type: object
      required:
      - language
      properties:
        language:
          type: string
    ShareAccess:
      type: object
      required:
      - access
      properties:
        access:
          type: string
          description: access permission level
          enum:
          - NONE
          - LIMITED_READ
          - LIMITED_WRITE
          - STANDARD_READ
          - STANDARD_WRITE
          - COMPENSATION_READ
          - FULL_READ
          - COMP_PLANNING_PARTICIPANT
          - COMPENSATION_WRITE
          - WRITE
          - COMPENSATION_OWNER
          - OWNER
        userId:
          type: string
          description: user id
          example: 5887a7718f138b6a2a0041a7
        groupId:
          type: string
          description: group id
          example: 5887a7718f138b6a2a0041a7
        fields:
          type: string
          description: fields
          example: name,image,title
    SummarizeResponse:
      type: object
      required:
      - summary
      - responseCount
      properties:
        summary:
          type: string
        responseCount:
          type: integer
          format: int32
    AiChatChannel:
      type: object
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - WEB
          - MOBILE
          - SLACK
          - TEAMS
          - MCP
        externalId:
          type: string
        threadId:
          type: string
        name:
          type: string
    AiChatMessage:
      type: object
      required:
      - id
      - blocks
      - at
      properties:
        id:
          type: string
          example: 588f7ee98f138b19220041a7
        userId:
          type: string
          example: 588f7ee98f138b19220041a7
        userName:
          type: string
        externalUserId:
          type: string
        externalId:
          type: string
        blocks:
          type: array
          items:
            $ref: '#/components/schemas/AiChatMessageBlock'
        at:
          type: string
        latencyMs:
          type: integer
          format: int64
        inputTokenCount:
          type: integer
          format: int32
        outputTokenCount:
          type: integer
          format: int32
        cacheReadInputTokenCount:
          type: integer
          format: int32
        cacheWriteInputTokenCount:
          type: integer
          format: int32
        feedbackScore:
          type: integer
          format: int32
        feedbackText:
          type: string
        actionButtons:
          type: array
          items:
            $ref: '#/components/schemas/AiToolActionButton'
        fileIds:
          type: array
          items:
            type: string
            example: 588f7ee98f138b19220041a7
    UpdateAiConfig:
      type: object
      properties:
        prompts:
          type: array
          description: list of configured prompts for various use cases
          items:
            $ref: '#/components/schemas/AiPromptConfig'
    UpdateAiAgentMemory:
      type: object
      properties:
        content:
          type: string
          description: text content of the memory
          minItems: 0
          maxItems: 2000
        importance:
          type: number
          format: double
          description: importance score from 0.0 (low) to 1.0 (high)
        expireAt:
          type: string
          description: optional expiration timestamp; memory is auto-deleted after this time
          example: '2017-01-24T13:57:52Z'
    ResultsAccess:
      type: object
      required:
      - allowed
      properties:
        ids:
          type: array
          uniqueItems: true
          items:
            type: string
            example: 588f7ee98f138b19220041a7
        allowed:
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/AccessAction'
    CreateAiAgentMemory:
      type: object
      required:
      - agentUserId
      - content
      properties:
        agentUserId:
          type: string
          description: AI agent user id that owns this memory
          example: 588f7ee98f138b19220041a7
        userId:
          type: string
          description: user id this memory is scoped to; null means org-wide
          example: 588f7ee98f138b19220041a7
        actionId:
          type: string
          description: action id this memory is scoped to; null means not action-scoped
          example: 588f7ee98f138b19220041a7
        content:
          type: string
          description: text content of the memory
          minItems: 0
          maxItems: 2000
        importance:
          type: number
          format: double
          description: importance score from 0.0 (low) to 1.0 (high)
        expireAt:
          type: string
          description: optional expiration timestamp; memory is auto-deleted after this time
          example: '2017-01-24T13:57:52Z'
        sourceAiChatId:
          type: string
          description: id of the AI chat that created this memory
          example: 588f7ee98f138b19220041a7
    SummarizeFormResponsesRequest:
      type: object
      required:
      - questionId
      properties:
        questionId:
          type: string
          example: 588f7ee98f138b19220041a7
        formId:
          type: string
          example: 588f7ee98f138b19220041a7
        assessmentId:
          type: string
          example: 588f7ee98f138b19220041a7
        submitPersonFilter:
          type: string
        targetPersonFilter:
          type: string
    AiChatRejectToolRequest:
      type: object
      required:
      - toolUseIds
      properties:
        toolUseIds:
          type: array
          items:
            type: string
        message:
          type: string
    AiPromptConfig:
      type: object
      required:
      - type
      - aiPromptId
      properties:
        type:
          type: string
          enum:
          - AUTO_CHAT
          - CHAT
          - CHAT_SHOULD_RESPOND
          - CHAT_SUMMARY
          - FORM_RESPONSE_SUMMARY
          - REPORT_RESULT_SUMMARY
          - SCENARIO_PLANNING
          - CQL
          - CQL_TRANSLATE
          - PROMPT_SUGGEST
          - JOB_CODE_MATCH
        aiPromptId:
          type: string
          example: 588f7ee98f138b19220041a7
        userId:
          type: string
          example: 588f7ee98f138b19220041a7
    DetectLanguageRequest:
      type: object
      required:
      - text
      properties:
        text:
          type: string
    AiToolActionButton:
      type: object
      required:
      - label
      - url
      properties:
        label:
          type: string
        url:
          type: string
          format: uri
        iconUrl:
          type: string
          format: uri
    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
    TabularData:
      type: object
      required:
      - columnNames
      - rows
      properties:
        columnNames:
          type: array
          items:
            type: string
        rows:
          type: array
          items:
            type: object
            additionalProperties:
              type: object


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