AppDirect Data Sources API
Manage knowledge bases and data sources for AI assistants
Manage knowledge bases and data sources for AI assistants
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/appdirect-data-sources-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.0.0
info:
description: The Companies API allows developers to manage marketplace companies and their user memberships.
title: Companies AI Embed Data Sources 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: Data Sources
description: Manage knowledge bases and data sources for AI assistants
paths:
/api/v1/ai/{aiId}/data-sources:
get:
tags:
- Data Sources
summary: List data sources for the AI
description: Retrieves a list of data sources associated with the given AI identifier.
operationId: listAIDataSources
parameters:
- name: aiId
in: path
required: true
description: The identifier of the AI whose data sources are to be retrieved.
schema:
type: string
responses:
'200':
description: A list of data sources associated with the AI.
content:
application/json:
schema:
$ref: '#/components/schemas/ListDataSourcesResponse'
'404':
description: AI not found with the given identifier.
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
post:
tags:
- Data Sources
summary: Add an existing data source to the specified AI
description: Associates an existing data source with the specified AI.
operationId: addDataSourceToAI
parameters:
- name: aiId
in: path
required: true
description: The unique identifier for the AI to which the data source is to be added.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
dataSourceId:
type: string
description: The unique identifier of the existing data source to be added.
required:
- dataSourceId
responses:
'201':
description: Data source successfully added to the AI.
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAIDataSourceResponse'
'400':
description: Bad request, malformed request syntax or invalid request message framing.
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: Not Found, either of the specified AI or data source are not found.
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
delete:
tags:
- Data Sources
summary: Delete all data sources from the AI
description: Requests deletion of all data sources associated with the specified AI.
operationId: deleteAllAIDataSources
parameters:
- name: aiId
in: path
required: true
description: The identifier of the AI whose data sources are to be deleted.
schema:
type: string
responses:
'204':
description: Delete request accepted.
'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}/data-sources/api:
post:
tags:
- Data Sources
summary: Create a new API data source for the specified AI
description: Adds a new API data source with a specified name and JSON payload for the given AI.
operationId: createApiDataSource
parameters:
- name: aiId
in: path
required: true
description: The unique identifier for the AI.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Name of the data source.
data:
type: object
description: The JSON payload to be used as the data source's knowledge.
required:
- name
- data
responses:
'201':
description: Data source successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/DataSource'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: AI not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/file:
post:
tags:
- Data Sources
summary: 'Adds a file upload data source for the specified AI. Max file size: 4.5Mb.'
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
responses:
'201':
description: File uploaded successfully
content:
application/json:
schema:
$ref: '#/components/schemas/DataSource'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: AI not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/file-blob:
post:
tags:
- Data Sources
summary: Initialize a file-blob upload for the AI
description: Generates a signed upload token for Vercel Blob and creates the data source after upload.
operationId: createFileBlobDataSource
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: Upload token created.
content:
application/json:
schema:
$ref: '#/components/schemas/VercelBlobUploadResponse'
'400':
description: Bad request
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/web-urls:
post:
tags:
- Data Sources
summary: Create a web URL data source for the AI
description: Creates a web URL knowledge source and associates it with the AI.
operationId: createWebUrlDataSource
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebUrlDataSourceInput'
responses:
'201':
description: Data source created.
content:
application/json:
schema:
$ref: '#/components/schemas/DataSource'
'403':
description: Forbidden - web URL data source requires a paid plan.
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/google-drive:
post:
tags:
- Data Sources
summary: Create Google Drive data sources for the AI
description: Creates Google Drive knowledge sources and associates them with the AI.
operationId: createGoogleDriveDataSources
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateGoogleDriveKnowledgeRequest'
responses:
'201':
description: Data sources created.
'400':
description: Bad request
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/onedrive:
post:
tags:
- Data Sources
summary: Create a OneDrive data source for the AI
description: Creates a OneDrive knowledge source and associates it with the AI.
operationId: createOneDriveDataSource
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOneDriveKnowledgeRequest'
responses:
'201':
description: Data source created.
'400':
description: Bad request
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/confluence:
post:
tags:
- Data Sources
summary: Create a Confluence data source for the AI
description: Creates a Confluence knowledge source and associates it with the AI.
operationId: createConfluenceDataSource
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateConfluenceKnowledgeRequest'
responses:
'201':
description: Data source created.
content:
application/json:
schema:
$ref: '#/components/schemas/DataSource'
'403':
description: Forbidden - Confluence data source requires a paid plan.
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/jira:
post:
tags:
- Data Sources
summary: Create a Jira data source for the AI
description: Creates a Jira knowledge source and associates it with the AI.
operationId: createJiraDataSource
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateJiraKnowledgeRequest'
responses:
'201':
description: Data source created.
'403':
description: Forbidden - Jira data source requires a paid plan.
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/github:
post:
tags:
- Data Sources
summary: Create a GitHub data source for the AI
description: Creates a GitHub knowledge source and associates it with the AI.
operationId: createGithubDataSource
parameters:
- in: path
name: aiId
required: true
schema:
type: string
description: The unique identifier for the AI.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateGithubKnowledgeRequest'
responses:
'201':
description: Data source created.
'403':
description: Forbidden - GitHub data source requires a paid plan.
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/{dataSourceId}:
delete:
tags:
- Data Sources
summary: Remove a data source from the AI
description: Removes the specified data source from the AI.
operationId: removeAIDataSource
parameters:
- name: aiId
in: path
required: true
description: The identifier of the AI.
schema:
type: string
- name: dataSourceId
in: path
required: true
description: The identifier of the data source to remove.
schema:
type: string
responses:
'204':
description: Data source removed.
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: AI or data source not found.
security:
- ApiKeyAuth: []
/api/v1/ai/{aiId}/data-sources/delete:
post:
tags:
- Data Sources
summary: Delete multiple data sources from the AI
description: Bulk delete data sources by ID for the specified AI.
operationId: deleteAIDataSources
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/DeleteAIDataSourcesRequest'
responses:
'204':
description: Delete request accepted.
'400':
description: Bad request
'403':
description: Forbidden, the user is not authorized to perform this action.
security:
- ApiKeyAuth: []
/api/v1/data-sources:
get:
tags:
- Data Sources
summary: List all data sources
description: Retrieves a list of data sources associated which the user has access to.
operationId: listDataSources
parameters:
- name: search
in: query
required: false
description: Search term for data sources.
schema:
type: string
- name: type
in: query
required: false
description: Filter by data source type.
schema:
$ref: '#/components/schemas/DataSourceType'
- name: orderBy
in: query
required: false
description: 'Order by field and direction. Prefix field name with ''+'' for ascending or ''-'' for descending order. Allowed fields: createdAt, lastIndexedAt, usageCount.'
schema:
type: string
pattern: ^[+-](createdAt|lastIndexedAt|usageCount)$
- name: page
in: query
required: false
description: Page number for paginated results.
schema:
type: integer
responses:
'200':
description: A list of all data sources which the user has access to.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedDataSourceWithAiDetailsResponse'
'500':
description: Internal Server Error.
security:
- ApiKeyAuth: []
/api/v1/data-sources/{dataSourceId}:
patch:
tags:
- Data Sources
summary: Update a Data Source
description: Updates properties for the specified data source.
operationId: updateDataSource
parameters:
- name: dataSourceId
in: path
required: true
description: The unique identifier of the data source to update.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDataSourceRequest'
responses:
'200':
description: Data source updated.
content:
application/json:
schema:
$ref: '#/components/schemas/DataSource'
'400':
description: Bad request
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: Not Found, the specified data source ID does not exist.
security:
- ApiKeyAuth: []
delete:
tags:
- Data Sources
summary: Delete a Data Source
description: Deletes a specific data source associated with the given AI identifier.
operationId: deleteDataSource
parameters:
- name: dataSourceId
in: path
required: true
description: The unique identifier of the data source to be deleted.
schema:
type: string
responses:
'204':
description: Data source successfully deleted, no content to return.
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: Not Found, the specified data source ID does not exist.
security:
- ApiKeyAuth: []
/api/v1/data-sources/{dataSourceId}/refresh:
put:
tags:
- Data Sources
summary: Refresh a Data Source
description: This endpoint refreshes the specified data source.
operationId: refreshDataSource
parameters:
- name: dataSourceId
in: path
required: true
description: The unique identifier of the data source to be refreshed.
schema:
type: string
- in: query
name: forceRefresh
description: Indicates if the data source should be refreshed even if the content has not been updated
schema:
type: boolean
responses:
'202':
description: Request has been accepted for processing.
'401':
description: Missing authorization context. User must be authenticated.
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: Data source not found with the specified ID.
security:
- ApiKeyAuth: []
/api/v1/data-sources/{dataSourceId}/stats:
get:
tags:
- Data Sources
summary: Get data source stats
description: Retrieves indexing statistics for the specified data source.
operationId: getDataSourceStats
parameters:
- name: dataSourceId
in: path
required: true
description: The unique identifier of the data source.
schema:
type: string
responses:
'200':
description: Data source stats.
content:
application/json:
schema:
$ref: '#/components/schemas/DataSourceKnowledgeStats'
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: Data source not found.
security:
- ApiKeyAuth: []
/api/v1/data-sources/{dataSourceId}/knowledge:
get:
tags:
- Data Sources
summary: List knowledge items for a data source
description: Retrieves paginated knowledge items for the specified data source.
operationId: listDataSourceKnowledge
parameters:
- name: dataSourceId
in: path
required: true
description: The unique identifier of the data source.
schema:
type: string
- name: first
in: query
required: false
description: Number of items to return.
schema:
type: integer
- name: cursor
in: query
required: false
description: Cursor for pagination.
schema:
type: string
- name: page
in: query
required: false
description: Page number for pagination.
schema:
type: integer
responses:
'200':
description: Paginated knowledge results.
content:
application/json:
schema:
$ref: '#/components/schemas/GetKnowledgeResponse'
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: Data source not found.
security:
- ApiKeyAuth: []
/api/v1/data-sources/{dataSourceId}/knowledge/{knowledgeId}:
patch:
tags:
- Data Sources
summary: Update a knowledge item
description: Updates a knowledge item for the specified data source.
operationId: updateKnowledgeItem
parameters:
- name: dataSourceId
in: path
required: true
description: The unique identifier of the data source.
schema:
type: string
- name: knowledgeId
in: path
required: true
description: The identifier of the knowledge item.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateKnowledgeRequest'
responses:
'200':
description: Knowledge item updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Knowledge'
'400':
description: Bad request
'403':
description: Forbidden, the user is not authorized to perform this action.
'404':
description: Data source or knowledge item not found.
security:
- ApiKeyAuth: []
components:
schemas:
CreateAIDataSourceResponse:
type: object
properties:
aiId:
type: string
dataSourceId:
type: string
required:
- aiId
- dataSourceId
AIReference:
type: object
properties:
id:
type: string
name:
type: string
src:
type: string
KnowledgeOriginalContent:
type: object
properties:
contentBlobUrl:
type: string
filename:
type: string
mimeType:
type: string
isContentStoredExternally:
type: boolean
contentUrl:
type: string
CreateConfluenceKnowledgeRequest:
type: object
properties:
oauthTokenId:
type: string
pageId:
type: string
pageName:
type: string
contentType:
type: string
spaceId:
type: string
dataRefreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
indexChildPages:
type: boolean
indexDriveFiles:
type: boolean
indexAttachments:
type: boolean
selectedDriveAccount:
type: string
archive:
type: boolean
allSpaces:
type: boolean
required:
- oauthTokenId
- pageName
Knowledge:
type: object
properties:
id:
type: string
name:
type: string
type:
$ref: '#/components/schemas/DataSourceType'
uniqueId:
type: string
nullable: true
parentUniqueId:
type: string
nullable: true
indexStatus:
$ref: '#/components/schemas/KnowledgeIndexStatus'
documentCount:
type: integer
nullable: true
tokenCount:
type: integer
nullable: true
originalContent:
$ref: '#/components/schemas/KnowledgeOriginalContent'
nullable: true
documentsBlobUrl:
type: string
nullable: true
indexPercentage:
type: string
metadata:
type: object
nullable: true
isBlobStorageDeleted:
type: boolean
cite:
type: boolean
UserSummary:
type: object
properties:
id:
type: string
email:
type: string
name:
type: string
nullable: true
CreateGithubKnowledgeRequest:
type: object
properties:
mode:
type: string
enum:
- repos
- all
gitHubAppInstallationId:
type: integer
repos:
type: array
items:
type: string
dataRefreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
required:
- mode
- gitHubAppInstallationId
UpdateKnowledgeRequest:
type: object
properties:
cite:
type: boolean
required:
- cite
GetKnowledgeResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Knowledge'
pagination:
type: object
properties:
nextCursor:
type: string
Error:
type: object
properties:
error:
type: string
DataSourceIndexStatus:
type: string
description: The indexing status of the data source.
enum:
- INITIALIZED
- INDEXING
- REFRESHING
- PARTIALLY_COMPLETED
- COMPLETED
- FAILED
- DELETION_REQUESTED
- DELETED
- MISSING
GoogleDriveFile:
type: object
properties:
id:
type: string
name:
type: string
UpdateDataSourceRequest:
type: object
properties:
refreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
cite:
type: boolean
nullable: true
ais:
type: array
items:
type: string
orgVisible:
type: boolean
nullable: true
DeleteAIDataSourcesRequest:
type: object
properties:
dataSourceIds:
type: array
items:
type: string
required:
- dataSourceIds
ListDataSourcesResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DataSource'
PaginatedDataSourceWithAiDetailsResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DataSourceWithAiDetails'
total:
type: integer
CreateGoogleDriveKnowledgeRequest:
type: object
properties:
oauthTokenId:
type: string
files:
type: array
items:
$ref: '#/components/schemas/GoogleDriveFile'
dataRefreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
required:
- files
DataSource:
type: object
properties:
id:
type: string
description: Unique identifier for the data source.
createdAt:
type: string
format: date-time
description: The date and time when the data source was created.
updatedAt:
type: string
format: date-time
description: The date and time when the data source was last updated.
lastIndexedAt:
type: string
format: date-time
nullable: true
description: The date and time when the data source was last indexed, if applicable.
orgId:
type: string
description: Organization ID that owns the data source.
ownerUserId:
type: string
description: User ID that created the data source.
name:
type: string
description: Name of the data source.
type:
$ref: '#/components/schemas/DataSourceType'
refreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
indexStatus:
$ref: '#/components/schemas/DataSourceIndexStatus'
indexPercentage:
type: string
description: Percentage of the indexing process completed, if applicable.
data:
type: object
nullable: true
description: Provider-specific data source configuration.
cite:
type: boolean
description: Whether this data source should be cited in responses.
orgVisible:
type: boolean
description: Whether this data source is visible to the organization.
WebUrlFileType:
type: string
enum:
- TEXT
- CSV
- PDF
- MARKDOWN
- DOC
- XLS
DataSourceKnowledgeStats:
type: object
properties:
doneCount:
type: integer
failedCount:
type: integer
pendingCount:
type: integer
indexingCount:
type: integer
totalCount:
type: integer
VercelBlobUploadResponse:
type: object
properties:
url:
type: string
pathname:
type: string
contentType:
type: string
size:
type: integer
additionalProperties: true
DataSourceType:
type: string
description: The type of the data source.
enum:
- API
- FILE_UPLOAD
- GOOGLE_DRIVE
- ONEDRIVE
- WEB_URL
- CONFLUENCE
- JIRA
- GITHUB
DataSourceRefreshPeriod:
type: string
description: How frequently the data source should be refreshed.
enum:
- NEVER
- DAILY
- WEEKLY
- MONTHLY
CreateJiraKnowledgeRequest:
type: object
properties:
oauthTokenId:
type: string
projectName:
type: string
projectKey:
type: string
dataRefreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
required:
- oauthTokenId
- projectName
- projectKey
CreateOneDriveKnowledgeRequest:
type: object
properties:
oauthTokenId:
type: string
fileId:
type: string
filename:
type: string
dataRefreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
required:
- oauthTokenId
- fileId
- filename
WebUrlDataSourceInput:
type: object
properties:
url:
type: string
dataRefreshPeriod:
$ref: '#/components/schemas/DataSourceRefreshPeriod'
includeFiles:
type: boolean
includedFileTypes:
type: array
items:
$ref: '#/components/schemas/WebUrlFileType'
includeUrlGlobs:
type: array
items:
type: string
excludeUrlGlobs:
type: array
items:
type: string
maxPages:
type: integer
maxMemory:
type: integer
timeout:
type: integer
required:
- url
- dataRefreshPeriod
- includeFiles
- includedFileTypes
KnowledgeIndexStatus:
type: string
enum:
- INITIALIZED
- RETRIEVING_CONTENT
- CONTENT_RETRIEVED
- DOCUMENTS_CREATED
- INDEXING
- PARTIALLY_COMPLETED
- COMPLETED
- FAILED
- DELETED
DataSourceWithAiDetails:
allOf:
- $ref: '#/components/schemas/DataSource'
- type: object
properties:
ais:
type: array
items:
$ref: '#/components/schemas/AIReference'
ownerUser:
$ref: '#/components/schemas/UserSummary'
nullable: true