openapi: 3.0.0 info: description: Unified API for QuantCDN Admin and QuantCloud Platform services title: QuantCDN AI Agents AI Sessions 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: Conversation session management for multi-turn interactions name: AI Sessions paths: /api/v3/organizations/{organisation}/ai/sessions: get: description: "Lists active sessions for an organization with flexible filtering options.\n *\n * **Query Combinations:**\n * 1. By Organization (default): Returns all sessions in the organization\n * 2. By Organization + Group: `?sessionGroup=drupal-prod` - Sessions in a specific group\n * 3. By User: `?userId=user-123` - All sessions for a user\n * 4. By User + Group: `?userId=user-123&sessionGroup=drupal-prod` - User's sessions in a specific group\n *\n * **Use Cases:**\n * - List user's conversations in a specific app/environment\n * - Admin view of all sessions in a customer/tenant group\n * - User profile showing all AI conversations across apps" operationId: listAISessions parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Filter sessions by user ID explode: true in: query name: userId required: false schema: example: user-12345 type: string style: form - description: Filter by session group. Returns only sessions matching the specified group. explode: true in: query name: sessionGroup required: false schema: example: drupal-production type: string style: form - description: Maximum number of sessions to return (default 50, max 100) explode: true in: query name: limit required: false schema: default: 50 maximum: 100 minimum: 1 type: integer style: form - description: Offset for pagination explode: true in: query name: offset required: false schema: type: integer style: form - description: Filter by model ID explode: true in: query name: model required: false schema: type: string style: form responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/listAISessions_200_response_inner' type: array description: List of chat sessions '500': description: Failed to fetch sessions summary: List chat sessions with multi-tenant filtering tags: - AI Sessions post: description: Creates an AI session with automatic expiration (60 min default, 24h max). Sessions are isolated by organization. Use userId to identify the user creating the session. Use sessionGroup for logical grouping. Use metadata for additional custom data. Filter sessions by userId or sessionGroup when listing. operationId: createAISession 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/createAISession_request' required: true responses: '201': content: application/json: schema: $ref: '#/components/schemas/createAISession_201_response' description: Session created successfully '400': description: Invalid request (missing userId or invalid parameters) '500': description: Failed to create session summary: Create a new chat session with multi-tenant isolation tags: - AI Sessions /api/v3/organizations/{organisation}/ai/sessions/{sessionId}: delete: operationId: deleteAISession parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The session ID explode: false in: path name: sessionId required: true schema: type: string style: simple responses: '200': content: application/json: schema: $ref: '#/components/schemas/deleteAISession_200_response' description: Session deleted successfully '500': description: Failed to delete session summary: Delete a chat session tags: - AI Sessions get: operationId: getAISession parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The session ID explode: false in: path name: sessionId required: true schema: type: string style: simple responses: '200': content: application/json: schema: $ref: '#/components/schemas/getAISession_200_response' description: The chat session '404': description: Session not found summary: Get a specific chat session tags: - AI Sessions put: description: "Updates session with new conversation messages and tracks token usage. Appends new messages to conversation history and updates session stats.\n *\n * **Typical Flow:**\n * 1. Get session to retrieve conversation history\n * 2. Call AI inference with full message history\n * 3. Update session with new user + assistant messages" operationId: updateAISession parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The session ID explode: false in: path name: sessionId required: true schema: format: uuid type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateAISession_request' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/updateAISession_200_response' description: Session updated successfully '400': description: Invalid request parameters '403': description: Access denied '404': description: Session not found '500': description: Failed to update session summary: Update Session tags: - AI Sessions /api/v3/organizations/{organisation}/ai/sessions/{sessionId}/extend: put: description: Extends the expiration time of an active session. Useful for keeping long-running conversations alive. operationId: extendAISession parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The session ID explode: false in: path name: sessionId required: true schema: format: uuid type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/extendAISession_request' required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/extendAISession_200_response' description: Session extended successfully '400': description: Invalid parameters '403': description: Access denied '404': description: Session not found '500': description: Failed to extend session summary: Extend Session Expiration tags: - AI Sessions components: schemas: extendAISession_200_response: example: sessionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 message: Session extended by 60 minutes expiresAt: 2000-01-23 04:56:07+00:00 properties: sessionId: format: uuid type: string expiresAt: format: date-time type: string message: example: Session extended by 60 minutes type: string type: object createAISession_201_response: example: createdAt: 2000-01-23 04:56:07+00:00 sessionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 expiresAt: 2000-01-23 04:56:07+00:00 status: active properties: sessionId: format: uuid type: string status: enum: - active type: string expiresAt: format: date-time type: string createdAt: format: date-time type: string type: object deleteAISession_200_response: example: message: message properties: message: type: string type: object createAISession_request_initialMessages_inner: properties: role: enum: - system - user - assistant type: string content: type: string type: object updateAISession_request_newMessages_inner: properties: role: enum: - user - assistant type: string content: type: string type: object createAISession_request: properties: userId: description: User identifier for this session example: user-12345 type: string sessionGroup: description: Optional user-defined grouping identifier (e.g., app name, environment, tenant). Use any format that makes sense for your application. example: drupal-production type: string metadata: additionalProperties: true description: Optional custom metadata for additional context example: feature: chat-assistant source: web-app type: object expirationMinutes: default: 60 description: Session expiration in minutes maximum: 1440 minimum: 5 type: integer initialMessages: description: Initial conversation messages (e.g., system prompt) items: $ref: '#/components/schemas/createAISession_request_initialMessages_inner' type: array required: - userId type: object getAISession_200_response: example: messages: - '{}' - '{}' created_at: 2000-01-23 04:56:07+00:00 model: model id: id title: title properties: id: type: string title: type: string model: type: string messages: items: type: object type: array created_at: format: date-time type: string type: object updateAISession_200_response: example: totalMessages: 0 sessionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 totalTokens: 6 status: status updatedAt: 2000-01-23 04:56:07+00:00 properties: sessionId: format: uuid type: string status: type: string totalMessages: type: integer totalTokens: type: integer updatedAt: format: date-time type: string type: object extendAISession_request: properties: additionalMinutes: default: 60 description: Minutes to add to expiration time (default 60, max 1440) example: 60 maximum: 1440 minimum: 1 type: integer type: object listAISessions_200_response_inner: example: updated_at: 2000-01-23 04:56:07+00:00 created_at: 2000-01-23 04:56:07+00:00 model: model id: id title: title properties: id: type: string title: type: string model: type: string created_at: format: date-time type: string updated_at: format: date-time type: string type: object updateAISession_request: properties: newMessages: description: New messages to append to conversation items: $ref: '#/components/schemas/updateAISession_request_newMessages_inner' type: array tokensUsed: description: Tokens consumed in this turn type: integer status: description: Update session status enum: - active - completed type: string metadata: description: Update custom metadata type: object type: object securitySchemes: BearerAuth: bearerFormat: JWT description: 'Enter your Bearer token in the format: `Bearer `. Obtain your API token from the QuantCDN dashboard under Profile > API Tokens.' scheme: bearer type: http