Knowledge index
Connecting an integration lets a deployment reach a system; indexing it makes that system's content searchable by agents. These endpoints start an index build and report its progress. Each index belongs to the user who built it.
Most integrations index through one uniform pair of routes under /api/vector/{provider}. Confluence, GitHub, and Jira predate that convention and keep their own routes, documented below. All of these require the corresponding integration to be connected first — see Integrations, Confluence, GitHub, and Jira.
- POST /vector/{provider}/index Index an integration
- GET /vector/{provider}/status Retrieve index status
- POST /vector/confluence/index Index Confluence content
- POST /vector/github/vectorize Vectorise GitHub data
- GET /vector/github/status Retrieve GitHub index status
- POST /jira/vector/store Vectorise Jira data
- POST /jira/vector/store-all Vectorise all Jira data
Paths are relative to /api
Index an integration
POST /api/vector/{provider}/index
Starts a background build of the caller's search index for the given provider.
Starts a background job that reads the caller's connected content and refreshes its search index. The call returns immediately; poll Retrieve index status for progress. Only one build runs per user and provider at a time — if one is already running, the call returns started: false.
- Authentication
- Bearer token How it works
Path parameters
-
providerstring RequiredThe integration to index.
Possible values-
bitbucket -
tfs -
dynamics365 -
ms365files
-
Returns
Returns whether a build was started.
Errors
- 400 The integration is not connected for the caller.
- 404 The provider does not support indexing.
curl -X POST "$VDF_BASE_URL/api/vector/bitbucket/index" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/api/vector/bitbucket/index`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/api/vector/bitbucket/index",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"started": true
} Retrieve index status
GET /api/vector/{provider}/status
Returns the progress of the caller's index build for the given provider.
Returns whether a build is running now and the outcome of the last one, for the caller's own index.
- Authentication
- Bearer token How it works
Path parameters
-
providerstring RequiredThe integration to inspect.
Possible values-
bitbucket -
tfs -
dynamics365 -
ms365files
-
Returns
Returns the index status object.
Errors
- 404 The provider does not support indexing.
curl "$VDF_BASE_URL/api/vector/bitbucket/status" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/api/vector/bitbucket/status`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/api/vector/bitbucket/status",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"isConnected": true,
"syncRunning": false,
"syncStatus": "completed",
"lastSyncAt": "2026-09-01T09:34:12Z",
"lastSyncIndexed": 128,
"syncError": null
} Index Confluence content
POST /api/vector/confluence/index
Also available as POST /api/vector-store/confluence
Indexes Confluence pages so agents can search them.
Reads Confluence pages the caller can see and adds them to the search index. Pass spaceKeys to index whole spaces, pageIds to index specific pages, or neither to index a sample of the first few spaces. This endpoint is also reachable at /api/vector-store/confluence.
- Authentication
- Bearer token How it works
Body parameters application/json
-
spaceKeysarray of stringsKeys of the spaces to index.
-
pageIdsarray of stringsIDs of individual pages to index.
-
limitintegerMaximum number of pages to index per space.
Returns
Returns success: true and a confirmation message.
Errors
- 400 Confluence is not connected for the caller.
curl -X POST "$VDF_BASE_URL/api/vector/confluence/index" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"spaceKeys": [
"ENG"
],
"limit": 50
}' const response = await fetch(`${process.env.VDF_BASE_URL}/api/vector/confluence/index`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
spaceKeys: ['ENG'],
limit: 50,
}),
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/api/vector/confluence/index",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"spaceKeys": ["ENG"],
"limit": 50,
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"message": "Confluence content indexed"
} Vectorise GitHub data
POST /api/vector/github/vectorize
Indexes a GitHub repository, or the caller's most recent repositories, for search.
Reads GitHub repositories the connected token can access and adds them to the search index. Pass repository_full_name to index a single repository; omit it to index the caller's most recently updated repositories.
- Authentication
- Bearer token How it works
Body parameters application/json
-
repository_full_namestringFull repository name, for example
acme/api. When omitted, the caller's most recent repositories are indexed.
Returns
Returns a confirmation message and a processing summary in details.
Errors
- 400 GitHub is not connected for the caller.
curl -X POST "$VDF_BASE_URL/api/vector/github/vectorize" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"repository_full_name": "acme/api"
}' const response = await fetch(`${process.env.VDF_BASE_URL}/api/vector/github/vectorize`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
repository_full_name: 'acme/api',
}),
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/api/vector/github/vectorize",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"repository_full_name": "acme/api",
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"message": "GitHub repository acme/api vectorized successfully",
"details": {
"success": true,
"message": "GitHub repository acme/api vectorized successfully",
"warnings": [],
"processing_status": []
}
} Retrieve GitHub index status
GET /api/vector/github/status
Returns whether the caller's GitHub content has been indexed.
Reports whether the caller has indexed GitHub repositories and their components.
- Authentication
- Bearer token How it works
Parameters
No parameters.
Returns
Returns whether your GitHub data has been indexed, in isVectorized, hasRepositories, and hasComponents.
curl "$VDF_BASE_URL/api/vector/github/status" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/api/vector/github/status`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/api/vector/github/status",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"isVectorized": true,
"hasRepositories": true,
"hasComponents": true
} Vectorise Jira data
POST /api/jira/vector/store
Reads the caller's Jira and indexes its projects, boards, issues, epics, comments, and related data for search. Pass project_key and board_id to scope the build; to index everything the caller can see, use Vectorise all Jira data.
- Authentication
- Bearer token How it works
Body parameters application/json
-
projectKeystringKey of the project to index.
-
boardIdstringID of the board to index. Sprint data is indexed only when both
board_idandproject_keyare given on a basic-authentication connection.
Returns
Returns a per-collection processing summary.
Errors
- 401 Jira is not connected for the caller.
curl -X POST "$VDF_BASE_URL/api/jira/vector/store" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"projectKey": "ENG",
"boardId": "42"
}' const response = await fetch(`${process.env.VDF_BASE_URL}/api/jira/vector/store`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
projectKey: 'ENG',
boardId: '42',
}),
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/api/jira/vector/store",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"projectKey": "ENG",
"boardId": "42",
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"message": "Vector processing completed with results.",
"processing_results": [
{
"collection": "jira_issues",
"processed_count": 120,
"status": "All issues processed successfully",
"warnings": []
}
]
} Vectorise all Jira data
POST /api/jira/vector/store-all
Indexes every project and board the caller can see in Jira.
Runs the Jira index build across all projects and boards visible to the connected account, without scoping to a single project or board.
- Authentication
- Bearer token How it works
Parameters
No parameters.
Returns
Returns a per-collection processing summary.
Errors
- 401 Jira is not connected for the caller.
- 502 A Jira API request failed while building the index.
curl -X POST "$VDF_BASE_URL/api/jira/vector/store-all" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/api/jira/vector/store-all`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/api/jira/vector/store-all",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"message": "Vector processing completed with results.",
"processing_results": [
{
"collection": "jira_projects",
"processed_count": 8,
"status": "All projects processed successfully",
"warnings": []
}
]
}