AppDirect AI Management API

Create, retrieve, and manage AI assistants

OpenAPI Specification

appdirect-ai-management-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  description: The Companies API allows developers to manage marketplace companies and their user memberships.
  title: Companies AI Embed AI Management API
  license:
    name: Apache License, Version 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0
  version: v296.0-SNAPSHOT
servers:
- url: https://marketplace.appdirect.com/api
- url: https://virtserver.swaggerhub.com
tags:
- name: AI Management
  description: Create, retrieve, and manage AI assistants
paths:
  /api/v1/api-keys:
    patch:
      tags:
      - AI Management
      summary: Update AI
      description: Updates fields on the specified AI.
      operationId: updateAI
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the AI to update.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AIUpdateRequest'
      responses:
        '200':
          description: Updated AI details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AIDetail'
        '400':
          description: Bad request - invalid input.
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '404':
          description: AI not found with the given identifier.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
    delete:
      tags:
      - AI Management
      summary: Delete AI
      description: Deletes the specified AI.
      operationId: deleteAI
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the AI to delete.
        schema:
          type: string
      responses:
        '204':
          description: AI deleted successfully.
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '404':
          description: AI not found with the given identifier.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
  /api/v1/ai:
    post:
      tags:
      - AI Management
      summary: Create New AI
      description: Creates a new AI specified by the given identifier.
      operationId: createAI
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AICreateRequest'
      responses:
        '200':
          description: Details of the specified AI.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AIDetail'
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '404':
          description: AI not found with the given identifier.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
  /api/v1/ai/import:
    post:
      tags:
      - AI Management
      summary: Import Agent
      description: Creates a new agent from a portable AgentBundle. Tool secrets can be supplied via the secrets map. Skills are imported only when the caller has SKILLS WRITE permission; otherwise they are skipped with a warning. If the bundle model is unavailable, the first available model is substituted and a warning is returned.
      operationId: importAgent
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportAgentRequest'
      responses:
        '201':
          description: Agent successfully imported.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportAgentResponse'
        '400':
          description: Invalid request body or model ID.
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
  /api/v1/ai/{aiId}:
    get:
      tags:
      - AI Management
      summary: Get AI Details
      description: Retrieves details of the AI specified by the given identifier.
      operationId: getAIDetails
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the AI whose details are to be retrieved.
        schema:
          type: string
      responses:
        '200':
          description: Details of the specified AI.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AIDetail'
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '404':
          description: AI not found with the given identifier.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
  /api/v1/ai/{aiId}/export:
    get:
      tags:
      - AI Management
      summary: Export Agent
      description: Exports an agent and its configuration as a portable AgentBundle JSON document. Secrets are stripped from tool configurations and listed in requiredSecrets. Skills are included only when the caller has SKILLS READ permission. Organization-scoped callers can export agents in their org; instance-level callers can export across orgs.
      operationId: exportAgent
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the agent to export.
        schema:
          type: string
      - name: includeDataSources
        in: query
        required: false
        description: Whether to include data sources in the export. Defaults to true.
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
          default: 'true'
      - name: dataSourceIds
        in: query
        required: false
        description: Comma-separated list of specific data source IDs to include. When provided, only the listed data sources are exported.
        schema:
          type: string
      responses:
        '200':
          description: Agent bundle exported successfully.
          headers:
            Content-Disposition:
              description: Attachment filename derived from the agent name.
              schema:
                type: string
                example: attachment; filename="my-agent.json"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentBundle'
        '400':
          description: AI ID is required.
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '404':
          description: Agent not found with the given identifier.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
  /api/v1/ai/{aiId}/approve:
    put:
      tags:
      - AI Management
      summary: Approve an AI
      description: Marks an AI as approved by the organization.
      operationId: approveAI
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the AI to be approved.
        schema:
          type: string
      responses:
        '200':
          description: AI successfully approved.
        '401':
          description: Missing authorization context. User must be authenticated.
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '404':
          description: AI not found with the given identifier.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
  /api/v1/ai/{aiId}/revoke:
    put:
      tags:
      - AI Management
      summary: Revoke AI approval
      description: Revokes the organization approval for an AI.
      operationId: revokeAIApproval
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the AI whose approval is to be revoked.
        schema:
          type: string
      responses:
        '200':
          description: AI approval successfully revoked.
        '401':
          description: Missing authorization context. User must be authenticated.
        '403':
          description: Forbidden, the user is not authorized to perform this action.
        '404':
          description: AI not found with the given identifier.
        '500':
          description: Internal Server Error.
      security:
      - ApiKeyAuth: []
  /api/v1/ai/{aiId}/generate-profile:
    put:
      tags:
      - AI Management
      summary: Generate AI profile
      description: Generates an AI profile based on existing AI data.
      operationId: generateAIProfile
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the AI.
        schema:
          type: string
      responses:
        '200':
          description: AI profile generated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AIProfile'
      security:
      - ApiKeyAuth: []
  /api/v1/ai/{aiId}/share:
    put:
      tags:
      - AI Management
      summary: Share an AI
      description: Shares the AI with the provided emails.
      operationId: shareAI
      parameters:
      - name: aiId
        in: path
        required: true
        description: The identifier of the AI.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShareAIRequest'
      responses:
        '200':
          description: AI shared.
      security:
      - ApiKeyAuth: []
  /api/v1/me/ai:
    get:
      tags:
      - AI Management
      summary: List AIs
      parameters:
      - in: query
        name: scope
        schema:
          $ref: '#/components/schemas/ListAIsRequestScope'
        description: The scope to filter results by
      - in: query
        name: groupId
        schema:
          type: string
        description: The id of a group to filter results by
      - in: query
        name: categoryId
        schema:
          type: string
        description: The id of a category to filter results by
      - in: query
        name: approvedByOrg
        schema:
          type: boolean
        description: Filter results by whether the AI has been approved by the organization.
      - in: query
        name: search
        schema:
          type: string
        description: Search term
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/AIDetail'
components:
  schemas:
    AgentBundleDataSourceConfig:
      type: object
      properties:
        originalId:
          type: string
          description: Original data source ID from the export environment, used for same-environment relink on import.
        name:
          type: string
        type:
          $ref: '#/components/schemas/DataSourceType'
        refreshPeriod:
          $ref: '#/components/schemas/DataSourceRefreshPeriod'
        data:
          type: object
          additionalProperties: true
          nullable: true
        knowledgeItems:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleKnowledgeItemConfig'
      required:
      - originalId
      - name
      - type
      - refreshPeriod
      - data
      - knowledgeItems
    AgentBundleToolConfig:
      type: object
      properties:
        name:
          type: string
        type:
          $ref: '#/components/schemas/ToolType'
        data:
          type: object
          additionalProperties: true
          nullable: true
          description: Tool configuration with secrets stripped.
      required:
      - name
      - type
      - data
    ImportAgentResponse:
      type: object
      properties:
        aiId:
          type: string
          description: Identifier of the newly created agent.
        warnings:
          type: array
          items:
            type: string
          description: Non-fatal issues encountered during import, such as model substitution or skipped skills.
      required:
      - aiId
      - warnings
    AgentBundleKnowledgeItemConfig:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
        uniqueId:
          type: string
          nullable: true
        blobUrl:
          type: string
          nullable: true
        filename:
          type: string
          nullable: true
        mimeType:
          type: string
          nullable: true
      required:
      - name
      - type
      - uniqueId
      - blobUrl
      - filename
      - mimeType
    AgentBundleFlowConfig:
      type: object
      properties:
        name:
          type: string
        enabled:
          type: boolean
        versions:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleFlowVersionConfig'
      required:
      - name
      - enabled
      - versions
    PublicCategoryType:
      type: string
      enum:
      - ACCOUNTING_FINANCE
      - AI_MODELS
      - ENGINEERING
      - HUMAN_RESOURCES
      - INFORMATION_TECHNOLOGY
      - LEARNING_DEVELOPMENT
      - MARKETING
      - PRODUCTIVITY
      - SALES
      - ADVISOR
      - FEATURED
    ListAIsRequestScope:
      type: string
      enum:
      - PRIVATE
      - OWNED
      - GROUP
      - SHARED
      - ORGANIZATION
      - PUBLIC
      - ALL
    AIUserInputType:
      type: string
      enum:
      - SHORT_TEXT
      - LONG_TEXT
      - TEXT_CHOICE
      - IMAGE_CHOICE
      - DATE
      - NUMBER
      - PHONE_NUMBER
      - FILE_UPLOAD
      - DISPLAY
      - ADDRESS
    AIProfile:
      type: object
      properties:
        headline:
          type: string
        description:
          type: string
        features:
          type: array
          items:
            $ref: '#/components/schemas/AIProfileFeature'
        showCharacter:
          type: boolean
        showTraining:
          type: boolean
        showPersonality:
          type: boolean
        trainingDescription:
          type: string
        conversations:
          type: array
          items:
            type: object
        socialImage:
          type: string
        idleVideo:
          type: string
        idleVideoError:
          type: string
        showSpeaker:
          type: boolean
        showVideo:
          type: boolean
        voice:
          type: string
        voiceEngine:
          type: string
        videoModel:
          type: string
    AIUpdateRequest:
      type: object
      description: Request object for updating an AI configuration. Send only the fields you want to update.
      properties:
        src:
          type: string
        name:
          type: string
        introduction:
          type: string
          nullable: true
        description:
          type: string
        instructions:
          type: string
        seed:
          type: string
        modelId:
          type: string
        visibility:
          $ref: '#/components/schemas/AIVisibility'
        listInOrgCatalog:
          type: boolean
        listInPublicCatalog:
          type: boolean
        listInTenantCatalog:
          type: boolean
        generateCitations:
          type: boolean
        chatLogsVisible:
          type: boolean
        intermediateStepsVisible:
          type: boolean
        options:
          $ref: '#/components/schemas/AIModelOptions'
        groups:
          type: array
          items:
            type: string
        profile:
          $ref: '#/components/schemas/AIProfile'
        editors:
          type: array
          items:
            $ref: '#/components/schemas/AIEditorUser'
        publicCategories:
          type: array
          items:
            $ref: '#/components/schemas/PublicCategoryType'
        orgCategoryIds:
          type: array
          items:
            type: string
    ToolType:
      type: string
      enum:
      - API_FUNCTION
      - SQL
      - PYTHON
      - USER_INPUT
      - KNOWLEDGE_RETRIEVAL
      - WEB_SEARCH
      - MCP_SERVER
      - IMAGE_GENERATION
      - USER_CONTEXT
      - SPREADSHEET
      - BROWSER
      - SANDBOX
      - OPENAI_FUNCTION
    AgentBundleAgentConfig:
      type: object
      description: Portable agent configuration included in an export bundle.
      properties:
        name:
          type: string
        introduction:
          type: string
          nullable: true
        description:
          type: string
        instructions:
          type: string
        seed:
          type: string
          description: Legacy field from older exports. Merged into instructions on import.
        src:
          type: string
        modelId:
          type: string
        visibility:
          $ref: '#/components/schemas/AIVisibility'
        listInOrgCatalog:
          type: boolean
        listInPublicCatalog:
          type: boolean
        listInTenantCatalog:
          type: boolean
        chatLogsVisible:
          type: boolean
        generateCitations:
          type: boolean
        intermediateStepsVisible:
          type: boolean
        options:
          $ref: '#/components/schemas/AIModelOptions'
          nullable: true
        profile:
          $ref: '#/components/schemas/AIProfile'
          nullable: true
      required:
      - name
      - introduction
      - description
      - instructions
      - src
      - modelId
      - visibility
      - listInOrgCatalog
      - listInPublicCatalog
      - listInTenantCatalog
      - chatLogsVisible
      - generateCitations
      - intermediateStepsVisible
      - options
      - profile
    ImportAgentRequest:
      type: object
      properties:
        bundle:
          $ref: '#/components/schemas/AgentBundle'
        name:
          type: string
          description: Optional override for the imported agent name.
        secrets:
          type: object
          additionalProperties:
            type: string
          description: Credential values keyed by requiredSecrets entries.
      required:
      - bundle
    AIProfileFeature:
      type: object
      properties:
        title:
          type: string
        description:
          type: string
    AgentBundleUserInputConfig:
      type: object
      properties:
        variableName:
          type: string
        type:
          $ref: '#/components/schemas/AIUserInputType'
        label:
          type: string
        configuration:
          type: object
          additionalProperties: true
        showOnChatCreate:
          type: boolean
        orderIndex:
          type: integer
      required:
      - variableName
      - type
      - label
      - configuration
      - showOnChatCreate
      - orderIndex
    ShareAIRequest:
      type: object
      properties:
        emails:
          type: string
      required:
      - emails
    AgentBundleSecretDescriptor:
      type: object
      description: Describes a secret stripped during export. Keys map to credential fields in the import request.
      properties:
        key:
          type: string
          description: Secret key in the format tool:<index>:<name>:<field>.
        description:
          type: string
          description: Human-readable label for the credential field.
        secretType:
          type: string
          enum:
          - apiKey
          - password
          - clientId
          - clientSecret
          - header
          - custom
      required:
      - key
      - description
      - secretType
    AIVisibility:
      type: string
      description: 'Visibility level controlling who can access the AI. PRIVATE: Only the owner can access. GROUP: Only specified groups can access. ORGANIZATION: Anyone in the organization can access. ANYONE_WITH_LINK: Anyone with the link can access.'
      enum:
      - PRIVATE
      - GROUP
      - ORGANIZATION
      - ANYONE_WITH_LINK
    AICreateRequest:
      type: object
      description: Request object for creating an AI configuration.
      properties:
        src:
          type: string
        name:
          type: string
        introduction:
          type: string
          nullable: true
        description:
          type: string
        instructions:
          type: string
        seed:
          type: string
        modelId:
          type: string
        visibility:
          $ref: '#/components/schemas/AIVisibility'
        listInOrgCatalog:
          type: boolean
        listInPublicCatalog:
          type: boolean
        listInTenantCatalog:
          type: boolean
        generateCitations:
          type: boolean
        chatLogsVisible:
          type: boolean
        intermediateStepsVisible:
          type: boolean
        options:
          $ref: '#/components/schemas/AIModelOptions'
        groups:
          type: array
          items:
            type: string
        profile:
          $ref: '#/components/schemas/AIProfile'
        editors:
          type: array
          items:
            $ref: '#/components/schemas/AIEditorUser'
        publicCategories:
          type: array
          items:
            $ref: '#/components/schemas/PublicCategoryType'
        orgCategoryIds:
          type: array
          items:
            type: string
      required:
      - src
      - name
      - description
      - instructions
    AIDetail:
      type: object
      properties:
        id:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        name:
          type: string
        introduction:
          type: string
          nullable: true
        description:
          type: string
        instructions:
          type: string
        seed:
          type: string
        src:
          type: string
        orgId:
          type: string
        userId:
          type: string
        profile:
          $ref: '#/components/schemas/AIProfile'
        userName:
          type: string
        orgName:
          type: string
        categoryId:
          type: string
        visibility:
          $ref: '#/components/schemas/AIVisibility'
        listInOrgCatalog:
          type: boolean
        listInPublicCatalog:
          type: boolean
        listInTenantCatalog:
          type: boolean
        chatLogsVisible:
          type: boolean
        generateCitations:
          type: boolean
        intermediateStepsVisible:
          type: boolean
        modelId:
          type: string
        options:
          $ref: '#/components/schemas/AIModelOptions'
        groups:
          type: array
          items:
            type: string
        editors:
          type: array
          items:
            $ref: '#/components/schemas/AIEditorUser'
        publicCategories:
          type: array
          items:
            $ref: '#/components/schemas/PublicCategoryType'
        orgCategoryIds:
          type: array
          items:
            type: string
        messageCount:
          type: integer
        rating:
          type: number
        ratingCount:
          type: integer
        isShared:
          type: boolean
        hasUserChats:
          type: boolean
        isApprovedByOrg:
          type: boolean
        isPremiumModel:
          type: boolean
        isDeleted:
          type: boolean
    DataSourceRefreshPeriod:
      type: string
      description: How frequently the data source should be refreshed.
      enum:
      - NEVER
      - DAILY
      - WEEKLY
      - MONTHLY
    DataSourceType:
      type: string
      description: The type of the data source.
      enum:
      - API
      - FILE_UPLOAD
      - GOOGLE_DRIVE
      - ONEDRIVE
      - WEB_URL
      - CONFLUENCE
      - JIRA
      - GITHUB
    AgentBundleFlowVersionConfig:
      type: object
      properties:
        version:
          type: integer
        active:
          type: boolean
        description:
          type: string
        data:
          type: object
          additionalProperties: true
      required:
      - version
      - active
      - description
      - data
    AgentBundleSkillConfig:
      type: object
      properties:
        name:
          type: string
          description: 'Skill slug: lowercase alphanumeric characters, hyphens, and underscores.'
        description:
          type: string
        content:
          type: string
        enabled:
          type: boolean
      required:
      - name
      - description
      - content
      - enabled
    AIModelOptions:
      type: object
      description: Configuration options for the AI model's behavior
      properties:
        temperature:
          type: array
          description: Controls randomness in the model's output
          minItems: 1
          maxItems: 1
          items:
            type: number
        topP:
          type: array
          description: Controls diversity via nucleus sampling
          minItems: 1
          maxItems: 1
          items:
            type: number
        topK:
          type: array
          description: Controls diversity by limiting to top K tokens
          minItems: 1
          maxItems: 1
          items:
            type: number
        maxTokens:
          type: array
          description: Maximum number of tokens in the model's response
          minItems: 1
          maxItems: 1
          items:
            type: number
        maxInputTokens:
          type: array
          description: Maximum number of input tokens allowed
          minItems: 1
          maxItems: 1
          items:
            type: number
        frequencyPenalty:
          type: array
          description: Penalizes frequent token usage
          minItems: 1
          maxItems: 1
          items:
            type: number
        presencePenalty:
          type: array
          description: Penalizes new token usage
          minItems: 1
          maxItems: 1
          items:
            type: number
    AIEditorUser:
      type: object
      properties:
        id:
          type: string
          nullable: true
        name:
          type: string
        email:
          type: string
    AgentBundle:
      type: object
      description: Portable agent definition for export and import. Secrets are stripped from tool data and listed in requiredSecrets.
      properties:
        version:
          type: string
          enum:
          - '1.0'
        exportedAt:
          type: string
          format: date-time
        source:
          type: object
          properties:
            apiBaseUrl:
              type: string
            orgId:
              type: string
          required:
          - apiBaseUrl
          - orgId
        agent:
          $ref: '#/components/schemas/AgentBundleAgentConfig'
        tools:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleToolConfig'
        userInputs:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleUserInputConfig'
        flows:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleFlowConfig'
        dataSources:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleDataSourceConfig'
        skills:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleSkillConfig'
        requiredSecrets:
          type: array
          items:
            $ref: '#/components/schemas/AgentBundleSecretDescriptor'
      required:
      - version
      - exportedAt
      - source
      - agent
      - tools
      - userInputs
      - flows
      - dataSources
      - skills
      - requiredSecrets