Skip to content

AI API reference

Access all Quant AI features programmatically via the v3 REST API. This page provides an overview of available endpoints organised by category.

All AI endpoints share the following base URL, on the dashboard host of your platform.

https://dashboard.quantcdn.io/api/v3/organizations/{org}/ai # QuantCDN
https://dash.quantgov.cloud/api/v3/organizations/{org}/ai # QuantGov

Replace {org} with your organisation machine name. The path accepts both organizations and organisations. The AI API is not served from the content API host (api.quantcdn.io).

Send a dashboard API token as a Bearer token in the Authorization header. Create the token in the dashboard under your profile, API Tokens. A project token from the Integrations page (the Quant-Token used by the content API) does not work here and returns 401.

Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://dashboard.quantcdn.io/api/v3/organizations/{org}/ai/models
Method Endpoint Description
GET /models List available AI models
GET /models/{modelId} Get model details and capabilities

Filter models by capability with the feature query parameter: chat, embeddings, vision, streaming, or all (for example /models?feature=chat). Use a model ID from this list in your requests. On QuantGov the list contains Australian-resident models only.

Method Endpoint Description
POST /chat Send a chat message (buffered response)
POST /chat/stream Send a chat message (streaming SSE response)
GET /chat/executions/{id} Poll for async execution result
POST /chat/callback Submit client tool results to a durable execution in waiting_callback

Example chat request:

Terminal window
curl -X POST https://dashboard.quantcdn.io/api/v3/organizations/{org}/ai/chat \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"modelId": "MODEL_ID_FROM_MODELS_LIST",
"messages": [{"role": "user", "content": "Hello"}],
"maxTokens": 1024
}'

There is no public WebSocket endpoint. Use /chat/stream for streaming.

Field Description
modelId Required. A model ID from GET /models
messages Required. Each message has a role (user, assistant, system) and content (a string, or text, image, video, and document blocks with base64 data; 25 MB per request)
systemPrompt, maxTokens, temperature, topP, stopSequences Optional generation settings
responseFormat {"type": "json", "jsonSchema": {...}} for structured JSON output on models that support it
toolConfig Tool calling: tools[].toolSpec with name, description, and inputSchema.json (a JSON Schema). When the model asks for a tool, the response contains response.toolUse with toolUseId, name, and input. Set autoExecute: true with an allowedTools list to let the platform run built-in tools
sessionId Continue a session; omit for a stateless call
async true for durable execution
Method Endpoint Description
POST /embeddings Generate text embeddings. input is a string or an array of up to 100 strings

Image generation is not available.

Method Endpoint Description
GET /sessions List sessions
POST /sessions Create a session
GET /sessions/{id} Get session details
PUT /sessions/{id} Update a session
DELETE /sessions/{id} Delete a session
PUT /sessions/{id}/extend Extend session TTL

A session keeps the conversation on the server. Create it with a required userId and optional sessionGroup, metadata, and expirationMinutes (default 60, 5 to 1440), then pass its sessionId in chat requests. Extend it with additionalMinutes (up to 1440). List sessions by userId or sessionGroup.

Method Endpoint Description
GET /agents List agents
POST /agents Create an agent
GET /agents/{id} Get agent details
PUT /agents/{id} Update an agent
DELETE /agents/{id} Delete an agent
POST /agents/{id}/chat Chat with an agent
GET / PUT / DELETE /agents/{id}/overlay Organisation overlay on a pre-built agent. PUT replaces the whole overlay

Agent chat takes message and optional sessionId, userId, stream (SSE), and async. Without a sessionId a new session is created. The agent runs its own tools.

Method Endpoint Description
GET / POST /skills List or create skills
GET / PUT / DELETE /skills/{id} Read, update, or delete a skill
POST /skills/import Import a skill from GitHub
POST /skills/{id}/sync Sync a skill from its source
GET /skills/collections List skill collections
POST /skills/import-collection Import a directory of skills as a namespaced collection
POST /skills/collections/{namespace}/sync Sync a collection
DELETE /skills/collections/{namespace} Delete a collection and its skills
Method Endpoint Description
GET / PUT /governance Read or replace the governance configuration
GET /governance/spend Current spend
GET / POST /filter-policies List or create filter policies
GET / PUT / DELETE /filter-policies/{id} Read, update, or delete a filter policy
Method Endpoint Description
GET /custom-tools List custom tools
POST /custom-tools Register a custom tool
DELETE /custom-tools/{id} Delete a custom tool
GET /tools/executions/{id} Get tool execution status
Method Endpoint Description
GET /vector-db/collections List collections
POST /vector-db/collections Create a collection
DELETE /vector-db/collections/{id} Delete a collection
POST /vector-db/collections/{id}/documents Upload documents
DELETE /vector-db/collections/{id}/documents Delete documents
POST /vector-db/collections/{id}/query Search a collection
Method Endpoint Description
GET /tasks List tasks
POST /tasks Create a task
GET /tasks/{id} Get task details
PUT /tasks/{id} Update a task
DELETE /tasks/{id} Delete a task
GET /tasks/{id}/dependency-graph Get task dependency graph
Method Endpoint Description
GET /orchestrations List orchestrations
POST /orchestrations Create an orchestration
DELETE /orchestrations/{id} Delete an orchestration
POST /orchestrations/{id}/start Start an orchestration
POST /orchestrations/{id}/pause Pause an orchestration
POST /orchestrations/{id}/resume Resume an orchestration
POST /orchestrations/{id}/cancel Cancel an orchestration
GET /orchestrations/{id}/batches List orchestration batches
Method Endpoint Description
GET /files List files
POST /files Upload a file
DELETE /files/{id} Delete a file
Method Endpoint Description
GET /usage Organisation usage breakdown (needs the subscription permission)
GET /usage/me Your own usage

The /chat/stream endpoint returns Server-Sent Events (SSE). A start event opens the stream, each content event carries a piece of text in delta, and a done event closes it with token usage.

id: chunk-0
event: start
data: {"requestId":"abc123","model":"...","streaming":true}
id: chunk-1
event: content
data: {"delta":"Hello","complete":false}
id: chunk-2
event: content
data: {"delta":" there!","complete":false}
id: chunk-3
event: done
data: {"complete":true,"usage":{"inputTokens":8,"outputTokens":15,"totalTokens":23}}

An error that happens after the stream has started (for example a spend limit) arrives as an event: error with a JSON data object that has an error message. The HTTP status of the response stays 200, so read the event type of every event. Treat a stream that ends without a done event as failed.

For long-running operations, set async: true in your chat request. The response is 202 with a requestId and a pollUrl. Poll GET /chat/executions/{requestId} until the status is complete (other statuses: pending, running, waiting_callback, failed), then read the result. Start polling at 1 second and back off to 30 seconds.

Terminal window
# Start an async chat request
curl -X POST https://dashboard.quantcdn.io/api/v3/organizations/{org}/ai/chat \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"modelId": "MODEL_ID_FROM_MODELS_LIST",
"messages": [{"role": "user", "content": "Analyse this dataset..."}],
"async": true
}'
# Poll for the result
curl https://dashboard.quantcdn.io/api/v3/organizations/{org}/ai/chat/executions/{requestId} \
-H "Authorization: Bearer YOUR_API_TOKEN"

When the status is waiting_callback, the response lists pendingTools and a callbackId. Run those tools in your application and send the results to POST /chat/callback with {"callbackId": "...", "toolResults": [{"toolUseId": "...", "result": {...}}]}. Each callbackId can be used once.

Status Meaning
401 Missing or invalid token, or a project token instead of a dashboard API token
403 The token’s user lacks permission; AI services are disabled for the organisation; the model is not approved by your governance policy; or (QuantGov) the model is not available, with the error model_not_available_in_region
429 A spend limit was reached

Workflows have no REST endpoints. Build them in the dashboard and start them with a webhook or schedule trigger.