QuantCDN AI Vector Database API
Vector database collections for RAG and semantic search
Documentation
Documentation
https://docs.quantcdn.io/
GettingStarted
https://docs.quantcdn.io/api/get-started-content/
Vector database collections for RAG and semantic search
openapi: 3.0.0
info:
description: Unified API for QuantCDN Admin and QuantCloud Platform services
title: QuantCDN AI Agents AI Vector Database API
version: 4.15.8
servers:
- description: QuantCDN Public Cloud
url: https://dashboard.quantcdn.io
- description: QuantGov Cloud
url: https://dash.quantgov.cloud
security:
- BearerAuth: []
tags:
- description: Vector database collections for RAG and semantic search
name: AI Vector Database
paths:
/api/v3/organizations/{organisation}/ai/vector-db/collections:
get:
description: Lists all vector database collections (knowledge bases) for an organization.
operationId: listVectorCollections
parameters:
- description: The organisation ID
explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/listVectorCollections_200_response'
description: Collections retrieved successfully
'403':
description: Access denied
'500':
description: Failed to retrieve collections
summary: List Vector Database Collections
tags:
- AI Vector Database
post:
description: "Creates a new vector database collection (knowledge base category) for semantic search. Collections store documents with embeddings for RAG (Retrieval Augmented Generation).\n *\n * **Use Cases:**\n * - Product documentation ('docs')\n * - Company policies ('policies')\n * - Support knowledge base ('support')\n * - Technical specifications ('specs')"
operationId: createVectorCollection
parameters:
- description: The organisation ID
explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/createVectorCollection_request'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/createVectorCollection_201_response'
description: Collection created successfully
'400':
description: Invalid request parameters
'403':
description: Access denied
'409':
description: Collection with this name already exists
'500':
description: Failed to create collection
summary: Create Vector Database Collection
tags:
- AI Vector Database
/api/v3/organizations/{organisation}/ai/vector-db/collections/{collectionId}:
delete:
description: Deletes a vector database collection and all its documents. This action cannot be undone.
operationId: deleteVectorCollection
parameters:
- description: The organisation ID
explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
- description: The collection ID
explode: false
in: path
name: collectionId
required: true
schema:
format: uuid
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/deleteSkillCollection_200_response'
description: Collection deleted successfully
'403':
description: Access denied
'404':
description: Collection not found
'500':
description: Failed to delete collection
summary: Delete Collection
tags:
- AI Vector Database
get:
description: Get detailed information about a specific vector database collection.
operationId: getVectorCollection
parameters:
- description: The organisation ID
explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
- description: The collection ID
explode: false
in: path
name: collectionId
required: true
schema:
format: uuid
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/getVectorCollection_200_response'
description: Collection details retrieved successfully
'403':
description: Access denied
'404':
description: Collection not found
'500':
description: Failed to retrieve collection
summary: Get Collection Details
tags:
- AI Vector Database
/api/v3/organizations/{organisation}/ai/vector-db/collections/{collectionId}/documents:
delete:
description: "Delete documents from a collection. Supports three deletion modes:\n *\n * 1. **Purge All** - Set `purgeAll: true` to delete ALL documents in the collection\n *\n * 2. **By Document IDs** - Provide `documentIds` array with specific document UUIDs\n *\n * 3. **By Metadata** - Provide `metadata` object with `field` and `values` to delete documents where the metadata field matches any of the values\n *\n * **Drupal Integration:**\n * When using with Drupal AI Search, use metadata deletion with:\n * - `field: 'drupal_entity_id'` to delete all chunks for specific entities\n * - `field: 'drupal_long_id'` to delete specific chunks"
operationId: deleteVectorDocuments
parameters:
- description: Organisation machine name
explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
- description: Collection UUID
explode: false
in: path
name: collectionId
required: true
schema:
format: uuid
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/deleteVectorDocuments_request'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/deleteVectorDocuments_200_response'
description: Documents deleted successfully
'400':
description: Invalid request - must specify purgeAll, documentIds, or metadata
'403':
description: Access denied
'404':
description: Collection not found
'500':
description: Failed to delete documents
summary: Delete Documents from Collection
tags:
- AI Vector Database
get:
description: Lists documents in a collection with pagination. Supports filtering by document key.
operationId: listVectorDocuments
parameters:
- explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
- explode: false
in: path
name: collectionId
required: true
schema:
format: uuid
type: string
style: simple
- description: Filter by document key
explode: true
in: query
name: key
required: false
schema:
type: string
style: form
- explode: true
in: query
name: limit
required: false
schema:
default: 50
maximum: 100
type: integer
style: form
- explode: true
in: query
name: offset
required: false
schema:
default: 0
type: integer
style: form
responses:
'200':
description: Documents retrieved successfully
'403':
description: Access denied
'404':
description: Collection not found
'500':
description: Failed to list documents
summary: List Documents in Collection
tags:
- AI Vector Database
post:
description: "Uploads documents to a vector database collection with automatic embedding generation. Documents are chunked (if needed), embedded using the collection's embedding model, and stored.\n *\n * **Supported Content:**\n * - Plain text content\n * - URLs to fetch content from\n * - Markdown documents\n *\n * **Metadata:**\n * Each document can include metadata (title, source_url, section, tags) that is returned with search results."
operationId: uploadVectorDocuments
parameters:
- description: The organisation ID
explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
- description: The collection ID
explode: false
in: path
name: collectionId
required: true
schema:
format: uuid
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/uploadVectorDocuments_request'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/uploadVectorDocuments_200_response'
description: Documents uploaded successfully
'400':
description: Invalid request parameters
'403':
description: Access denied
'404':
description: Collection not found
'500':
description: Failed to upload documents
summary: Upload Documents to Collection
tags:
- AI Vector Database
/api/v3/organizations/{organisation}/ai/vector-db/collections/{collectionId}/query:
post:
description: "Performs semantic search on a collection using vector similarity. Returns the most relevant documents based on meaning, not keyword matching.\n *\n * **Three Search Modes:**\n *\n * 1. **Text Query** - Provide `query` string, server generates embedding\n * - Query text is embedded using the collection's embedding model\n * - Embeddings are cached for repeated queries\n *\n * 2. **Vector Query** - Provide pre-computed `vector` array\n * - Skip embedding generation (faster)\n * - Useful when you've already embedded the query elsewhere\n * - Vector dimension must match collection (e.g., 1024 for Titan v2)\n *\n * 3. **Metadata List** - Set `listByMetadata: true` with `filter`\n * - Skip semantic search entirely\n * - Return all documents matching the filter\n * - Supports cursor-based pagination for large datasets\n * - Results ordered by sortBy/sortOrder (default: created_at DESC)\n *\n * **Filtering:**\n * - `filter.exact`: Exact match on metadata fields (AND logic)\n * - `filter.contains`: Array contains filter for tags (ANY match)\n * - Filters can be combined with semantic search or used alone with listByMetadata\n *\n * **Pagination (listByMetadata mode only):**\n * - Use `cursor` from previous response's `nextCursor` to get next page\n * - Uses keyset pagination for efficient traversal of large datasets\n * - Control sort with `sortBy` and `sortOrder`\n *\n * **Use Cases:**\n * - Find relevant documentation for user questions\n * - Power RAG (Retrieval Augmented Generation) in AI assistants\n * - Semantic search across knowledge bases\n * - List all artifacts by building/worker/tag"
operationId: queryVectorCollection
parameters:
- description: The organisation ID
explode: false
in: path
name: organisation
required: true
schema:
type: string
style: simple
- description: The collection ID
explode: false
in: path
name: collectionId
required: true
schema:
format: uuid
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/queryVectorCollection_request'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/queryVectorCollection_200_response'
description: Search completed successfully
'400':
description: Invalid request parameters
'403':
description: Access denied
'404':
description: Collection not found
'500':
description: Failed to perform search
summary: Semantic Search Query
tags:
- AI Vector Database
components:
schemas:
deleteSkillCollection_200_response:
example:
success: true
message: Collection deleted successfully
properties:
success:
example: true
type: boolean
message:
example: Collection deleted successfully
type: string
type: object
queryVectorCollection_200_response:
example:
filter: '{}'
nextCursor: nextCursor
pagination:
sortOrder: asc
limit: 5
sortBy: created_at
query: query
executionTimeMs: 5
searchMode: text
count: 1
hasMore: true
results:
- metadata:
key: ''
similarity: 0.08008282
documentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
embedding:
- 6.027456183070403
- 6.027456183070403
content: content
- metadata:
key: ''
similarity: 0.08008282
documentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
embedding:
- 6.027456183070403
- 6.027456183070403
content: content
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
properties:
results:
items:
$ref: '#/components/schemas/queryVectorCollection_200_response_results_inner'
type: array
query:
description: Original query text (null if vector or metadata search was used)
nullable: true
type: string
searchMode:
description: 'Search mode used: text (query provided), vector (pre-computed), metadata (listByMetadata)'
enum:
- text
- vector
- metadata
type: string
filter:
description: Filter that was applied (if any)
nullable: true
type: object
count:
description: Number of results returned
type: integer
executionTimeMs:
description: Query execution time in milliseconds
type: integer
collectionId:
format: uuid
type: string
hasMore:
description: True if more results available (listByMetadata mode only)
type: boolean
nextCursor:
description: Cursor for next page. Pass as cursor param to continue. Null when no more results. Only in listByMetadata mode.
nullable: true
type: string
pagination:
$ref: '#/components/schemas/queryVectorCollection_200_response_pagination'
type: object
deleteVectorDocuments_200_response:
example:
deletedCount: 0
message: message
collectionId: collectionId
properties:
message:
type: string
collectionId:
type: string
deletedCount:
type: integer
type: object
queryVectorCollection_request_filter:
description: Filter results by metadata fields. Applied AFTER semantic search (or alone in listByMetadata mode). All conditions use AND logic.
properties:
exact:
additionalProperties: true
description: Exact match on metadata fields. Keys are metadata field names, values are expected values.
example:
buildingId: building-123
type: research-report
type: object
contains:
additionalProperties:
items:
type: string
type: array
description: Array contains filter for array metadata fields (like tags). Returns documents where the metadata array contains ANY of the specified values.
example:
tags:
- important
- reviewed
type: object
type: object
uploadVectorDocuments_200_response:
example:
chunksCreated: 0
success: true
message: message
documentIds:
- documentIds
- documentIds
properties:
success:
example: true
type: boolean
documentIds:
items:
type: string
type: array
chunksCreated:
type: integer
message:
type: string
type: object
deleteVectorDocuments_request:
properties:
purgeAll:
description: Delete ALL documents in collection
type: boolean
documentIds:
description: Delete specific documents by UUID
items:
format: uuid
type: string
type: array
keys:
description: Delete documents by key
items:
maxLength: 512
type: string
type: array
metadata:
$ref: '#/components/schemas/deleteVectorDocuments_request_metadata'
type: object
deleteVectorDocuments_request_metadata:
properties:
field:
description: Metadata field name (e.g., 'drupal_entity_id')
type: string
values:
description: Values to match (OR logic)
items:
type: string
type: array
type: object
listVectorCollections_200_response:
example:
collections:
- documentCount: 0
createdAt: 2000-01-23 04:56:07+00:00
name: product-docs
description: description
embeddingModel: amazon.titan-embed-text-v2:0
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
- documentCount: 0
createdAt: 2000-01-23 04:56:07+00:00
name: product-docs
description: description
embeddingModel: amazon.titan-embed-text-v2:0
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
count: 6
properties:
collections:
items:
$ref: '#/components/schemas/listVectorCollections_200_response_collections_inner'
type: array
count:
type: integer
type: object
queryVectorCollection_request:
properties:
query:
description: Natural language search query (mutually exclusive with vector)
example: How do I authenticate with the API?
maxLength: 1000
minLength: 3
type: string
vector:
description: Pre-computed embedding vector (mutually exclusive with query). Array length must match collection dimension.
example:
- 0.0234
- -0.0891
- 0.0456
items:
format: float
type: number
type: array
limit:
default: 5
description: Maximum number of results to return
maximum: 20
minimum: 1
type: integer
threshold:
default: 0.7
description: Minimum similarity score (0-1, higher = more relevant)
format: float
maximum: 1
minimum: 0
type: number
includeEmbeddings:
default: false
description: Include embedding vectors in response (for debugging)
type: boolean
filter:
$ref: '#/components/schemas/queryVectorCollection_request_filter'
listByMetadata:
default: false
description: If true, skip semantic search and return all documents matching the filter. Requires filter. Supports cursor pagination.
type: boolean
cursor:
description: Pagination cursor for listByMetadata mode. Use nextCursor from previous response. Opaque format - do not construct manually.
type: string
sortBy:
default: created_at
description: Field to sort by in listByMetadata mode
enum:
- created_at
- document_id
type: string
sortOrder:
default: desc
description: Sort direction in listByMetadata mode
enum:
- asc
- desc
type: string
type: object
queryVectorCollection_200_response_pagination:
description: Pagination info (listByMetadata mode only)
example:
sortOrder: asc
limit: 5
sortBy: created_at
nullable: true
properties:
sortBy:
enum:
- created_at
- document_id
type: string
sortOrder:
enum:
- asc
- desc
type: string
limit:
type: integer
type: object
listVectorCollections_200_response_collections_inner:
example:
documentCount: 0
createdAt: 2000-01-23 04:56:07+00:00
name: product-docs
description: description
embeddingModel: amazon.titan-embed-text-v2:0
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
properties:
collectionId:
format: uuid
type: string
name:
example: product-docs
type: string
description:
type: string
documentCount:
type: integer
embeddingModel:
example: amazon.titan-embed-text-v2:0
type: string
createdAt:
format: date-time
type: string
type: object
queryVectorCollection_200_response_results_inner:
example:
metadata:
key: ''
similarity: 0.08008282
documentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
embedding:
- 6.027456183070403
- 6.027456183070403
content: content
properties:
documentId:
format: uuid
type: string
content:
description: Document text content
type: string
similarity:
description: Cosine similarity score (1.0 for metadata-only queries)
format: float
maximum: 1
minimum: 0
type: number
metadata:
additionalProperties: true
type: object
embedding:
description: Vector embedding (only if includeEmbeddings=true)
items:
type: number
type: array
type: object
uploadVectorDocuments_request_documents_inner_metadata:
properties:
title:
type: string
source_url:
type: string
section:
type: string
tags:
items:
type: string
type: array
type: object
getVectorCollection_200_response_collection:
example:
documentCount: 0
createdAt: 2000-01-23 04:56:07+00:00
name: name
description: description
embeddingModel: embeddingModel
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
dimensions: 6
updatedAt: 2000-01-23 04:56:07+00:00
properties:
collectionId:
format: uuid
type: string
name:
type: string
description:
type: string
documentCount:
type: integer
embeddingModel:
type: string
dimensions:
type: integer
createdAt:
format: date-time
type: string
updatedAt:
format: date-time
type: string
type: object
uploadVectorDocuments_request_documents_inner:
properties:
content:
description: Document text content
type: string
key:
description: Stable document key for upsert
maxLength: 512
type: string
metadata:
$ref: '#/components/schemas/uploadVectorDocuments_request_documents_inner_metadata'
required:
- content
type: object
getVectorCollection_200_response:
example:
collection:
documentCount: 0
createdAt: 2000-01-23 04:56:07+00:00
name: name
description: description
embeddingModel: embeddingModel
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
dimensions: 6
updatedAt: 2000-01-23 04:56:07+00:00
properties:
collection:
$ref: '#/components/schemas/getVectorCollection_200_response_collection'
type: object
uploadVectorDocuments_request:
properties:
documents:
items:
$ref: '#/components/schemas/uploadVectorDocuments_request_documents_inner'
type: array
required:
- documents
type: object
createVectorCollection_201_response_collection:
example:
name: name
description: description
embeddingModel: embeddingModel
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
dimensions: 0
properties:
collectionId:
format: uuid
type: string
name:
type: string
description:
type: string
embeddingModel:
type: string
dimensions:
type: integer
type: object
createVectorCollection_201_response:
example:
success: true
collection:
name: name
description: description
embeddingModel: embeddingModel
collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
dimensions: 0
message: Collection created successfully
properties:
success:
example: true
type: boolean
collection:
$ref: '#/components/schemas/createVectorCollection_201_response_collection'
message:
example: Collection created successfully
type: string
type: object
createVectorCollection_request:
properties:
name:
description: Collection name (used for reference)
example: product-documentation
type: string
description:
example: Product user guides and API documentation
type: string
embeddingModel:
description: 'Embedding model to use. Supported: amazon.titan-embed-text-v2:0, cohere.embed-english-v3, cohere.embed-multilingual-v3'
example: amazon.titan-embed-text-v2:0
type: string
dimensions:
description: 'Embedding dimensions (default: 1024)'
example: 1024
type: integer
required:
- embeddingModel
- name
type: object
securitySchemes:
BearerAuth:
bearerFormat: JWT
description: 'Enter your Bearer token in the format: `Bearer <your-token-here>`. Obtain your API token from the QuantCDN dashboard under Profile > API Tokens.'
scheme: bearer
type: http