Vector indexes
A vector index makes text searchable by meaning. There are two kinds. An asset index embeds the text content of one of your discovered assets, through its connection. A knowledge index embeds documents drawn from the networks knowledge store, scoped to the networks and versions you select.
Building is where the work happens. An asset index builds in the background — you create it, start a build, then poll its status — because embedding every chunk is slow. A knowledge index builds synchronously. Once an index is built, Run a semantic search ranks its chunks against a query.
Every index and its chunks are private to you. Asset indexes and knowledge indexes are listed and built through separate endpoints and cannot be crossed over.
- GET /v1/vectors/indexes List indexes
- POST /v1/vectors/indexes Create an index
- PUT /v1/vectors/indexes/{index_id} Update an index
- POST /v1/vectors/indexes/{index_id}/build Build an index
- GET /v1/vectors/indexes/{index_id}/status Retrieve index status
- GET /v1/vectors/vault-indexes List knowledge indexes
- POST /v1/vectors/vault-indexes Create a knowledge index
- POST /v1/vectors/vault-indexes/{index_id}/build Build a knowledge index
- GET /v1/vectors/vault-indexes/{index_id}/status Retrieve knowledge index status
- POST /v1/search/semantic Run a semantic search
Paths are relative to /data-api
The vector index object
A vector index and its build state.
Attributes
-
idstringUnique identifier for the index.
-
namestringHuman-readable name.
-
sourceTypestringassetfor an index over a discovered asset, orvaultfor an index over network knowledge. -
connectionIdnullable stringConnection the source asset belongs to. Null for knowledge indexes.
-
assetIdnullable stringAsset being indexed. Null for knowledge indexes.
-
scopeTypenullable stringFor knowledge indexes, the scope:
network_version,network_all_versions, orvisible_selection. Null for asset indexes. -
scopeRefnullable stringFor knowledge indexes, the resolved reference to the scoped networks. Null for asset indexes.
-
chunkSizeintegerMaximum characters per chunk.
-
chunkOverlapintegerCharacters of overlap between consecutive chunks.
-
embeddingModelstringIdentifier of the embedding model used to build the index.
-
statusstringBuild state:
draft,running,success, orfailed. -
documentCountintegerNumber of chunks (asset index) or source documents (knowledge index) in the last build.
-
lastBuiltAtstringWhen the index last finished building, or an empty string if never built.
-
metaobjectBuild metadata; for knowledge indexes this records the scoped networks and versions.
-
createdAtstringWhen the index was created.
-
updatedAtstringWhen the index was last updated.
{
"id": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"name": "Customer notes index",
"sourceType": "asset",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"scopeType": null,
"scopeRef": null,
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "success",
"documentCount": 1240,
"lastBuiltAt": "2026-09-01T12:05:00Z",
"meta": {},
"createdAt": "2026-09-01T12:00:00Z",
"updatedAt": "2026-09-01T12:05:00Z"
} List indexes
GET /data-api/v1/vectors/indexes
Returns your asset-backed vector indexes.
Returns your asset indexes, most recently updated first. Knowledge indexes are returned by List knowledge indexes.
- Authentication
- Bearer token How it works
Parameters
No parameters.
Returns
Returns a list of vector index objects in data.
curl "$VDF_BASE_URL/data-api/v1/vectors/indexes" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/indexes`, {
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']}/data-api/v1/vectors/indexes",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": [
{
"id": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"name": "Customer notes index",
"sourceType": "asset",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"scopeType": null,
"scopeRef": null,
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "success",
"documentCount": 1240,
"lastBuiltAt": "2026-09-01T12:05:00Z",
"meta": {},
"createdAt": "2026-09-01T12:00:00Z",
"updatedAt": "2026-09-01T12:05:00Z"
}
]
} Create an index
POST /data-api/v1/vectors/indexes
Defines an asset-backed vector index.
Creates an index definition in draft status against one of your assets. It holds no chunks until you start a build with Build an index.
- Authentication
- Bearer token How it works
Body parameters application/json
-
namestring RequiredHuman-readable name.
-
connectionIdstring RequiredConnection the source asset belongs to.
-
assetIdstring RequiredAsset to index.
-
chunkSizeintegerMaximum characters per chunk.
-
chunkOverlapintegerCharacters of overlap between consecutive chunks.
-
embeddingModelstringEmbedding model identifier. Defaults to the deployment's configured embedding model.
Returns
Returns the created vector index object in data.
Errors
- 400
name,connectionId, orassetIdis missing. - 404 The connection or asset does not belong to you.
curl -X POST "$VDF_BASE_URL/data-api/v1/vectors/indexes" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Customer notes index",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"chunkSize": 500,
"chunkOverlap": 50
}' const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/indexes`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Customer notes index',
connectionId: 'b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f',
assetId: '7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d',
chunkSize: 500,
chunkOverlap: 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']}/data-api/v1/vectors/indexes",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"name": "Customer notes index",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"chunkSize": 500,
"chunkOverlap": 50,
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": {
"id": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"name": "Customer notes index",
"sourceType": "asset",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"scopeType": null,
"scopeRef": null,
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "draft",
"documentCount": 0,
"lastBuiltAt": "",
"meta": {},
"createdAt": "2026-09-01T12:00:00Z",
"updatedAt": "2026-09-01T12:00:00Z"
}
} Update an index
PUT /data-api/v1/vectors/indexes/{index_id}
Updates an asset index you own.
Updates the fields you supply. Changing the source or chunking does not rebuild the index; start a new build with Build an index.
- Authentication
- Bearer token How it works
Path parameters
-
index_idstring RequiredIdentifier of the index to update.
Body parameters application/json
-
namestringNew name.
-
connectionIdstringMove the index to a different connection you own.
-
assetIdstringIndex a different asset you own.
-
chunkSizeintegerMaximum characters per chunk.
-
chunkOverlapintegerCharacters of overlap between consecutive chunks.
-
embeddingModelstringEmbedding model identifier.
Returns
Returns the updated vector index object in data.
Errors
- 404 No index with this id belongs to you, or the target connection or asset does not belong to you.
curl -X PUT "$VDF_BASE_URL/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Customer notes index v2",
"chunkSize": 800
}' const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b`, {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Customer notes index v2',
chunkSize: 800,
}),
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.put(
f"{os.environ['VDF_BASE_URL']}/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"name": "Customer notes index v2",
"chunkSize": 800,
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": {
"id": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"name": "Customer notes index v2",
"sourceType": "asset",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"scopeType": null,
"scopeRef": null,
"chunkSize": 800,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "success",
"documentCount": 1240,
"lastBuiltAt": "2026-09-01T12:05:00Z",
"meta": {},
"createdAt": "2026-09-01T12:00:00Z",
"updatedAt": "2026-09-01T12:20:00Z"
}
} Build an index
POST /data-api/v1/vectors/indexes/{index_id}/build
Starts a background build of an asset index.
Extracts text from the asset, splits it into chunks, embeds each chunk, and stores the results. The build runs in the background: this call returns immediately with the index in running status. Poll Retrieve index status until it reaches success or failed. The connection's connector must support extraction to a vector index.
- Authentication
- Bearer token How it works
Path parameters
-
index_idstring RequiredIdentifier of the index to build.
Body parameters application/json
-
maxRowsintegerMaximum source rows to read.
-
textColumnsarray of stringsColumns to draw text from. Defaults to the asset's text-like columns.
-
textTemplatestringTemplate that composes each chunk's text from column values, referencing columns by name.
Returns
Returns the index object with its status set to running in data.
Errors
- 404 No index with this id belongs to you, or its asset or connection no longer exists.
- 400 The index is a knowledge index, the connector does not support extraction to a vector index, or its configuration is incomplete.
- 409 A build is already running for this index.
- 500 The build could not be started.
curl -X POST "$VDF_BASE_URL/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b/build" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"maxRows": 500
}' const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b/build`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
maxRows: 500,
}),
});
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']}/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b/build",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"maxRows": 500,
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": {
"id": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"name": "Customer notes index",
"sourceType": "asset",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"scopeType": null,
"scopeRef": null,
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "running",
"documentCount": 0,
"lastBuiltAt": "",
"meta": {},
"createdAt": "2026-09-01T12:00:00Z",
"updatedAt": "2026-09-01T12:03:00Z"
}
} Retrieve index status
GET /data-api/v1/vectors/indexes/{index_id}/status
Returns the current state of an asset index.
Returns the index object, including its status and documentCount. Poll this after starting a build; the count climbs as chunks are embedded.
- Authentication
- Bearer token How it works
Path parameters
-
index_idstring RequiredIdentifier of the index.
Returns
Returns the vector index object in data.
Errors
- 404 No index with this id belongs to you.
curl "$VDF_BASE_URL/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b/status" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b/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']}/data-api/v1/vectors/indexes/1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b/status",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": {
"id": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"name": "Customer notes index",
"sourceType": "asset",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"scopeType": null,
"scopeRef": null,
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "success",
"documentCount": 1240,
"lastBuiltAt": "2026-09-01T12:05:00Z",
"meta": {},
"createdAt": "2026-09-01T12:00:00Z",
"updatedAt": "2026-09-01T12:05:00Z"
}
} List knowledge indexes
GET /data-api/v1/vectors/vault-indexes
Returns your knowledge indexes — those built over the networks knowledge store — most recently updated first.
- Authentication
- Bearer token How it works
Parameters
No parameters.
Returns
Returns a list of vector index objects with sourceType of vault in data.
curl "$VDF_BASE_URL/data-api/v1/vectors/vault-indexes" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/vault-indexes`, {
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']}/data-api/v1/vectors/vault-indexes",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": [
{
"id": "2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b",
"name": "Support networks knowledge",
"sourceType": "vault",
"connectionId": null,
"assetId": null,
"scopeType": "network_version",
"scopeRef": "support-triage@3",
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "success",
"documentCount": 86,
"lastBuiltAt": "2026-09-01T13:05:00Z",
"meta": {
"networkId": "support-triage",
"version": "3",
"networkIds": [],
"limitRuns": 25
},
"createdAt": "2026-09-01T13:00:00Z",
"updatedAt": "2026-09-01T13:05:00Z"
}
]
} Create a knowledge index
POST /data-api/v1/vectors/vault-indexes
Defines a vector index over network knowledge.
Creates a knowledge index in draft status, scoped to networks in the knowledge store. Choose a scopeType and supply the matching references: a single network and version, all versions of a network, or an explicit selection of networks. Build it with Build a knowledge index.
- Authentication
- Bearer token How it works
Body parameters application/json
-
namestring RequiredHuman-readable name.
-
scopeTypestring RequiredWhich knowledge to include.
Possible values-
network_version -
network_all_versions -
visible_selection
-
-
networkIdstringNetwork to scope to, for
network_versionandnetwork_all_versions. -
versionstringNetwork version, for
network_version. -
networkIdsarray of stringsExplicit list of networks, for
visible_selection. -
limitRunsintegerMaximum runs per network version to draw documents from.
-
chunkSizeintegerMaximum characters per chunk.
-
chunkOverlapintegerCharacters of overlap between consecutive chunks.
-
embeddingModelstringEmbedding model identifier. Defaults to the deployment's configured embedding model.
Returns
Returns the created vector index object with sourceType of vault in data.
Errors
- 400
nameis missing,scopeTypeis missing or invalid, or the references needed for the chosen scope could not be resolved.
curl -X POST "$VDF_BASE_URL/data-api/v1/vectors/vault-indexes" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Support networks knowledge",
"scopeType": "network_version",
"networkId": "support-triage",
"version": "3"
}' const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/vault-indexes`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Support networks knowledge',
scopeType: 'network_version',
networkId: 'support-triage',
version: '3',
}),
});
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']}/data-api/v1/vectors/vault-indexes",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"name": "Support networks knowledge",
"scopeType": "network_version",
"networkId": "support-triage",
"version": "3",
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": {
"id": "2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b",
"name": "Support networks knowledge",
"sourceType": "vault",
"connectionId": null,
"assetId": null,
"scopeType": "network_version",
"scopeRef": "support-triage@3",
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "draft",
"documentCount": 0,
"lastBuiltAt": "",
"meta": {
"networkId": "support-triage",
"version": "3",
"networkIds": [],
"limitRuns": 25
},
"createdAt": "2026-09-01T13:00:00Z",
"updatedAt": "2026-09-01T13:00:00Z"
}
} Build a knowledge index
POST /data-api/v1/vectors/vault-indexes/{index_id}/build
Builds a knowledge index from the scoped network documents.
Fetches the documents for the index's scope from the networks knowledge store, chunks and embeds them, and stores the results. Unlike an asset index, this build runs synchronously and returns the finished index. You may override the scope, chunking, and embedding model on the build call.
- Authentication
- Bearer token How it works
Path parameters
-
index_idstring RequiredIdentifier of the knowledge index to build.
Body parameters application/json
-
scopeTypestringOverride the scope for this build.
Possible values-
network_version -
network_all_versions -
visible_selection
-
-
networkIdstringOverride the scoped network.
-
versionstringOverride the scoped network version.
-
networkIdsarray of stringsOverride the explicit network selection.
-
limitRunsintegerOverride the maximum runs per network version.
-
chunkSizeintegerOverride the chunk size.
-
chunkOverlapintegerOverride the chunk overlap.
-
embeddingModelstringOverride the embedding model.
Returns
Returns the finished index object with its status, documentCount, and build metadata in data.
Errors
- 404 No index with this id belongs to you.
- 400 The index is not a knowledge index.
- 502 The knowledge document service was unreachable or returned an invalid response.
- 500 The build failed.
curl -X POST "$VDF_BASE_URL/data-api/v1/vectors/vault-indexes/2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b/build" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/vault-indexes/2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b/build`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
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']}/data-api/v1/vectors/vault-indexes/2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b/build",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": {
"id": "2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b",
"name": "Support networks knowledge",
"sourceType": "vault",
"connectionId": null,
"assetId": null,
"scopeType": "network_version",
"scopeRef": "support-triage@3",
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "success",
"documentCount": 86,
"lastBuiltAt": "2026-09-01T13:05:00Z",
"meta": {
"networkId": "support-triage",
"version": "3",
"networkIds": [],
"limitRuns": 25,
"chunkCount": 512
},
"createdAt": "2026-09-01T13:00:00Z",
"updatedAt": "2026-09-01T13:05:00Z"
}
} Retrieve knowledge index status
GET /data-api/v1/vectors/vault-indexes/{index_id}/status
Returns the current state of a knowledge index.
Returns the knowledge index object, including its status and documentCount.
- Authentication
- Bearer token How it works
Path parameters
-
index_idstring RequiredIdentifier of the knowledge index.
Returns
Returns the vector index object in data.
Errors
- 404 No index with this id belongs to you.
- 400 The index is not a knowledge index.
curl "$VDF_BASE_URL/data-api/v1/vectors/vault-indexes/2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b/status" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/vectors/vault-indexes/2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b/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']}/data-api/v1/vectors/vault-indexes/2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b/status",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": {
"id": "2a3b4c5d-6e7f-4809-9a0b-1c2d3e4f5a6b",
"name": "Support networks knowledge",
"sourceType": "vault",
"connectionId": null,
"assetId": null,
"scopeType": "network_version",
"scopeRef": "support-triage@3",
"chunkSize": 500,
"chunkOverlap": 50,
"embeddingModel": "bge-large-en-v1.5",
"status": "success",
"documentCount": 86,
"lastBuiltAt": "2026-09-01T13:05:00Z",
"meta": {
"networkId": "support-triage",
"version": "3",
"networkIds": [],
"limitRuns": 25
},
"createdAt": "2026-09-01T13:00:00Z",
"updatedAt": "2026-09-01T13:05:00Z"
}
} Run a semantic search
POST /data-api/v1/search/semantic
Ranks an index's chunks against a query and returns the closest matches.
Embeds the query and ranks the chunks of one of your indexes by cosine similarity, returning the closest matches. Works against both asset and knowledge indexes. topK is clamped to at most 50.
- Authentication
- Bearer token How it works
Body parameters application/json
-
indexIdstring RequiredIdentifier of the index to search.
-
querystring RequiredNatural-language query text.
-
topKintegerNumber of matches to return, at most 50.
-
includeEmbeddingbooleanInclude the stored embedding vector of each match.
-
embeddingPreviewDimsintegerWhen including embeddings, return only this many leading dimensions of each vector instead of the full vector.
Returns
Returns a ranked list of matching chunks. Each has chunkId, score, text, sourceRef, indexId, indexName, assetId, connectionId, textLength, createdAt, and updatedAt; when embeddings are stored, embeddingDim and embeddingNorm; and, when requested, embedding or embeddingPreview in data.
Errors
- 400
indexIdorqueryis missing. - 404 No index with this id belongs to you.
curl -X POST "$VDF_BASE_URL/data-api/v1/search/semantic" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"indexId": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"query": "customers reporting slow checkout",
"topK": 5
}' const response = await fetch(`${process.env.VDF_BASE_URL}/data-api/v1/search/semantic`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
indexId: '1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b',
query: 'customers reporting slow checkout',
topK: 5,
}),
});
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']}/data-api/v1/search/semantic",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"indexId": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"query": "customers reporting slow checkout",
"topK": 5,
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"success": true,
"data": [
{
"chunkId": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
"score": 0.8123,
"text": "Customer reported checkout taking over 30 seconds during peak hours.",
"sourceRef": "public.customer_notes:id=8842",
"indexId": "1f2e3d4c-5b6a-4798-8a9b-0c1d2e3f4a5b",
"indexName": "Customer notes index",
"assetId": "7a2d9e10-4c3b-4a1e-9f8d-2b6c1e0f5a3d",
"connectionId": "b3f1c2e4-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"createdAt": "2026-09-01T12:05:00Z",
"updatedAt": "2026-09-01T12:05:00Z",
"textLength": 68,
"embeddingDim": 1024,
"embeddingNorm": 0.999998
}
]
}