openapi: 3.0.0 info: description: Unified API for QuantCDN Admin and QuantCloud Platform services title: QuantCDN 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: "Pre-configured AI assistants with specific system prompts, model settings,\ \ and tool permissions" name: AI Agents - description: Custom tool definitions for AI function calling name: AI Custom Tools - description: S3-backed file storage for AI workloads name: AI File Storage - description: "Chat inference, embeddings, and image generation services" name: AI Inference - description: Foundation model listing and configuration name: AI Models - description: Usage statistics and monitoring for AI services name: AI Monitoring - description: Durable batch processing orchestrations with pause/resume support name: AI Orchestrations - description: Conversation session management for multi-turn interactions name: AI Sessions - description: "Reusable prompts, workflows, and instructions for agents" name: AI Skills - description: Multi-agent task coordination and dependency management name: AI Task Management - description: Built-in tool listing and async tool execution polling name: AI Tools - description: Vector database collections for RAG and semantic search name: AI Vector Database - description: Cloud application lifecycle management name: Applications - description: Backup and restore operations for applications name: Backup Management - description: CDN traffic metrics and analytics name: CDN Metrics - description: Execute commands in application containers name: Commands - description: Docker compose configuration management name: Compose - description: Container management and operations name: Containers - description: Scheduled website crawl operations name: CrawlerSchedules - description: Website crawler configuration and management name: Crawlers - description: Scheduled task management name: Cron - description: Domain and DNS management name: Domains - description: Application environment management and configuration name: Environments - description: HTTP header rule management name: Headers - description: Key-value store operations name: KV - description: Organization management and settings name: Organizations - description: Static site project management name: Projects - description: Cache purging and invalidation name: Purge - description: "Edge rules (redirects, authentication, proxies, etc.)" name: Rules - description: Auto-scaling policies and configuration name: ScalingPolicy - description: SSH key management for container access name: SSH Access - description: Environment variable management name: Variables - description: Persistent storage volume management name: Volumes - description: API token management name: Tokens - description: AI Slack Bots name: AI Slack Bots - description: AI Governance name: AI Governance - description: AI Filter Policies name: AI Filter Policies - description: AI Usage name: AI Usage paths: /api/v2/organizations/{organization}/projects/{project}/crawlers/{crawler}/schedules: get: operationId: CrawlerSchedules_list parameters: - example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: 00000000-0000-0000-0000-000000000000 explode: false in: path name: crawler required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2CrawlerSchedule' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List schedules for a crawler tags: - CrawlerSchedules post: operationId: CrawlerSchedules_add parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Crawler identifier explode: false in: path name: crawler required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2CrawlerScheduleRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2CrawlerSchedule' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Add a new schedule tags: - CrawlerSchedules /api/v2/organizations/{organization}/projects/{project}/crawlers/{crawler}/schedules/{crawler_schedule}: delete: operationId: CrawlerSchedules_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Crawler identifier explode: false in: path name: crawler required: true schema: type: string style: simple - description: Crawler schedule identifier explode: false in: path name: crawler_schedule required: true schema: type: string style: simple responses: "204": description: The crawler schedule has been deleted. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a schedule tags: - CrawlerSchedules get: operationId: CrawlerSchedules_show parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Crawler identifier explode: false in: path name: crawler required: true schema: type: string style: simple - description: Crawler schedule identifier explode: false in: path name: crawler_schedule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2CrawlerSchedule' description: The crawler schedule. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Show a specific schedule tags: - CrawlerSchedules patch: operationId: CrawlerSchedules_edit parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Crawler identifier explode: false in: path name: crawler required: true schema: type: string style: simple - description: Crawler schedule identifier explode: false in: path name: crawler_schedule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2CrawlerScheduleRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2CrawlerSchedule' description: The crawler schedule. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Edit a schedule tags: - CrawlerSchedules /api/v2/organizations/{organization}/projects/{project}/crawlers: get: operationId: Crawlers_list parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple responses: "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List crawlers for the project tags: - Crawlers post: operationId: Crawlers_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2CrawlerRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Crawler' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a new crawler tags: - Crawlers /api/v2/organizations/{organization}/projects/{project}/crawlers/{crawler}: delete: operationId: Crawlers_delete parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: The UUID of the crawler example: 00000000-0000-0000-0000-000000000000 explode: false in: path name: crawler required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a crawler tags: - Crawlers get: operationId: Crawlers_read parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: The UUID of the crawler example: 00000000-0000-0000-0000-000000000000 explode: false in: path name: crawler required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Crawler' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a single crawler tags: - Crawlers patch: operationId: Crawlers_update parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: The UUID of the crawler example: 00000000-0000-0000-0000-000000000000 explode: false in: path name: crawler required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2CrawlerRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Crawler' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a crawler tags: - Crawlers /api/v2/organizations/{organization}/projects/{project}/crawlers/{crawler}/run: post: operationId: Crawlers_run parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: Crawler identifier example: 00000000-0000-0000-0000-000000000000 explode: false in: path name: crawler required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/Crawlers_run_request' required: false responses: "200": content: application/json: schema: $ref: '#/components/schemas/Crawlers_run_200_response' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The resource was not found. "500": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: An unexpected error occurred. summary: Run a crawler tags: - Crawlers /api/v2/organizations/{organization}/projects/{project}/crawlers/{crawler}/runs: get: operationId: Crawlers_getRuns parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: Crawler identifier example: 00000000-0000-0000-0000-000000000000 explode: false in: path name: crawler required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2CrawlerRun' type: array description: The runs "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The resource was not found. "500": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: An unexpected error occurred. summary: Get all runs for a crawler tags: - Crawlers /api/v2/organizations/{organization}/projects/{project}/crawlers/{crawler}/runs/{run_id}: get: operationId: Crawlers_getRunById parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: Crawler identifier example: 00000000-0000-0000-0000-000000000000 explode: false in: path name: crawler required: true schema: type: string style: simple - description: Run identifier example: 1 explode: false in: path name: run_id required: true schema: type: integer style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2CrawlerRun' description: The run "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The resource was not found. "500": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: An unexpected error occurred. summary: Get a run by ID tags: - Crawlers /api/v2/organizations/{organization}/projects/{project}/custom-headers: delete: operationId: Headers_delete parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2CustomHeaderRequest' required: true responses: "204": description: The headers have been deleted. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete custom headers tags: - Headers get: operationId: Headers_list parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: example: X-Custom-Header: value X-Another-Header: another-value schema: additionalProperties: type: string description: Map of header names to header values type: object description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List custom headers for a project tags: - Headers post: operationId: Headers_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2CustomHeaderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2CustomHeader' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create or update custom headers tags: - Headers /api/v2/organizations/{organization}/projects/{project}/domains: get: operationId: Domains_list parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2Domain' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List all domains for a project tags: - Domains post: operationId: Domains_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2DomainRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Domain' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Add a new domain tags: - Domains /api/v2/organizations/{organization}/projects/{project}/domains/{domain}: delete: operationId: Domains_delete parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: Domain id example: "0000" explode: false in: path name: domain required: true schema: type: string style: simple responses: "204": description: The domain has been deleted. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a domain tags: - Domains get: operationId: Domains_read parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: Domain id example: "0000" explode: false in: path name: domain required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Domain' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a single domain tags: - Domains /api/v2/organizations/{organization}/projects/{project}/domains/{domain}/renew: post: operationId: Domains_renew parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: Domain id example: "0000" explode: false in: path name: domain required: true schema: type: string style: simple responses: "202": description: The SSL certificate renewal has been initiated. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Renew the SSL certificate for a domain tags: - Domains /api/v2/organizations/{organization}/projects/{project}/kv: get: operationId: KV_list parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2Store' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List key-value stores tags: - KV post: operationId: KV_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2StoreRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Store' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Add a kv store tags: - KV /api/v2/organizations/{organization}/projects/{project}/kv/{store_id}: delete: operationId: KV_delete parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: "0000" explode: false in: path name: store_id required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a kv store tags: - KV get: operationId: KV_show parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: "0000" explode: false in: path name: store_id required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Store' description: The request has succeeded. "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: KV store not found. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get a kv store tags: - KV /api/v2/organizations/{organization}/projects/{project}/kv/{store_id}/link: delete: description: Remove access to a linked KV store from this project. The store must be linked (not owned by this project). operationId: KV_unlink_from_project parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: KV store identifier example: store-123 explode: false in: path name: store_id required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/KV_link_to_project_200_response' description: Store unlinked successfully "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Store not linked or invalid request "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Cannot unlink store owned by this project summary: Unlink a KV store from this project tags: - KV post: description: Share a KV store from the source project with a target project. The store will be accessible in the target project. operationId: KV_link_to_project parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Source project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - description: KV store identifier example: store-123 explode: false in: path name: store_id required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/KV_link_to_project_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/KV_link_to_project_200_response' description: Store linked successfully "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Store already linked or invalid request "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Store or target project not found "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access forbidden summary: Link a KV store to another project tags: - KV /api/v2/organizations/{organization}/projects/{project}/kv/{store_id}/items: get: operationId: KV_items_list parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: "0000" explode: false in: path name: store_id required: true schema: type: string style: simple - description: Cursor for pagination explode: true in: query name: cursor required: false schema: type: string style: form - description: Number of items to return explode: true in: query name: limit required: false schema: default: 10 type: integer style: form - description: Search filter for keys explode: true in: query name: search required: false schema: type: string style: form - description: "Include values in the response. Secret values will be redacted\ \ as '[ENCRYPTED]' for security." explode: true in: query name: include_values required: false schema: default: false type: boolean style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2StoreItemsListResponse' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List items in a kv store tags: - KV post: operationId: KV_items_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: "0000" explode: false in: path name: store_id required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2StoreItemRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/KV_items_create_200_response' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. "422": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Validation error. summary: Add an item to a kv store tags: - KV /api/v2/organizations/{organization}/projects/{project}/kv/{store_id}/items/{key}: delete: operationId: KV_items_delete parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: "0000" explode: false in: path name: store_id required: true schema: type: string style: simple - explode: false in: path name: key required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/KV_items_delete_200_response' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete an item from a kv store tags: - KV get: description: "Retrieves an item from the KV store. **Security Note:** If the\ \ item was stored as a secret (secret=true), the value will be redacted and\ \ returned as '[ENCRYPTED]' for security. Secrets should be accessed directly\ \ via the Quant Cloud platform KVStore abstraction." operationId: KV_items_show parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: "0000" explode: false in: path name: store_id required: true schema: type: string style: simple - explode: false in: path name: key required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/KV_items_show_200_response' description: The request has succeeded. "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Item not found. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get an item from a kv store tags: - KV put: operationId: KV_items_update parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - example: "0000" explode: false in: path name: store_id required: true schema: type: string style: simple - explode: false in: path name: key required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2StoreItemUpdateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/KV_items_create_200_response' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. "422": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Validation error. summary: Update an item in a kv store tags: - KV /v2/organizations/{organization}/projects/{project}/metrics/hourly: get: description: Returns the last hour of minute-by-minute metrics data operationId: getHourlyMetrics parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Filter by domain ID or domain name explode: true in: query name: domain required: false schema: type: string style: form - description: "Metrics to return (default: hits, bytes). Use the /metrics/available\ \ endpoint to list all metrics by category." explode: true in: query name: "metrics[]" required: false schema: items: enum: - hits - bytes - edge_resp_header_bytes - bereq_body_bytes - bereq_header_bytes - bandwidth - edge_hit_ratio - edge_hit_requests - edge_miss_requests - origin_fetches - origin_fetch_resp_body_bytes - origin_fetch_resp_header_bytes - origin_offload - status_1xx - status_2xx - status_3xx - status_4xx - status_5xx - origin_status_1xx - origin_status_2xx - origin_status_3xx - origin_status_4xx - origin_status_5xx type: string type: array style: form - description: Timestamp format in response explode: true in: query name: timestamp_format required: false schema: default: iso8601 enum: - iso8601 - unix type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2MetricsResponse' description: Hourly metrics data "400": description: Invalid metric requested "404": description: No domains found or domain not found security: - bearerAuth: [] summary: Get hourly metrics tags: - CDN Metrics /v2/organizations/{organization}/projects/{project}/metrics/daily: get: description: Returns the last 30 days of daily metrics data operationId: getDailyMetrics parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Filter by domain ID or domain name explode: true in: query name: domain required: false schema: type: string style: form - description: "Metrics to return (default: hits, bytes). Use the /metrics/available\ \ endpoint to list all metrics by category." explode: true in: query name: "metrics[]" required: false schema: items: enum: - hits - bytes - edge_resp_header_bytes - bereq_body_bytes - bereq_header_bytes - bandwidth - edge_hit_ratio - edge_hit_requests - edge_miss_requests - origin_fetches - origin_fetch_resp_body_bytes - origin_fetch_resp_header_bytes - origin_offload - status_1xx - status_2xx - status_3xx - status_4xx - status_5xx - origin_status_1xx - origin_status_2xx - origin_status_3xx - origin_status_4xx - origin_status_5xx type: string type: array style: form - description: Timestamp format in response explode: true in: query name: timestamp_format required: false schema: default: iso8601 enum: - iso8601 - unix type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2MetricsResponse' description: Daily metrics data "400": description: Invalid metric requested "404": description: No domains found or domain not found security: - bearerAuth: [] summary: Get daily metrics tags: - CDN Metrics /v2/organizations/{organization}/projects/{project}/metrics/monthly: get: description: Returns the last 12 months of monthly metrics data operationId: getMonthlyMetrics parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Filter by domain ID or domain name explode: true in: query name: domain required: false schema: type: string style: form - description: "Metrics to return (default: hits, bytes). Use the /metrics/available\ \ endpoint to list all metrics by category." explode: true in: query name: "metrics[]" required: false schema: items: enum: - hits - bytes - edge_resp_header_bytes - bereq_body_bytes - bereq_header_bytes - bandwidth - edge_hit_ratio - edge_hit_requests - edge_miss_requests - origin_fetches - origin_fetch_resp_body_bytes - origin_fetch_resp_header_bytes - origin_offload - status_1xx - status_2xx - status_3xx - status_4xx - status_5xx - origin_status_1xx - origin_status_2xx - origin_status_3xx - origin_status_4xx - origin_status_5xx type: string type: array style: form - description: Timestamp format in response explode: true in: query name: timestamp_format required: false schema: default: iso8601 enum: - iso8601 - unix type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2MetricsResponse' description: Monthly metrics data "400": description: Invalid metric requested "404": description: No domains found or domain not found security: - bearerAuth: [] summary: Get monthly metrics tags: - CDN Metrics /api/v2/organizations: get: operationId: Organizations_list responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/Organizations_list_200_response_inner' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Retrieve all organizations tags: - Organizations /api/v2/organizations/{organization}: get: operationId: Organizations_read parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Organization' description: The request has succeeded. "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Organization not found. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a single organization tags: - Organizations /api/v2/organizations/{organization}/projects: get: operationId: Projects_list parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2Project' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Retrieve all projects for an organization tags: - Projects post: operationId: Projects_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2ProjectRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/V2Project' description: The request has succeeded and a new resource has been created as a result. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a new project tags: - Projects /api/v2/organizations/{organization}/projects/{project}: delete: operationId: Projects_delete parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a project tags: - Projects get: operationId: Projects_read parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple - explode: false in: query name: with_token required: true schema: default: false type: boolean style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Project' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a single project tags: - Projects patch: operationId: Projects_update parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2ProjectRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2Project' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a project tags: - Projects /api/v2/organizations/{organization}/projects/{project}/purge: post: operationId: Purge_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier example: test-project explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/Purge_create_request' required: true responses: "200": content: application/json: schema: type: string description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Purge cache via URL or cache keys tags: - Purge /api/v2/organizations/{organization}/projects/{project}/rules/auth: get: operationId: RulesAuth_list parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleAuth' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List authentication rules tags: - Rules post: operationId: RulesAuth_create parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleAuthRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleAuth' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create an authentication rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/auth/{rule}: delete: operationId: RulesAuth_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete an authentication rule tags: - Rules get: operationId: RulesAuth_read parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleAuth' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of an authentication rule tags: - Rules patch: operationId: RulesAuth_update parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleAuthRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleAuth' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update an authentication rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/bot-challenge: get: operationId: RulesBotChallenge_list parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleBotChallenge' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List bot challenge rules tags: - Rules post: operationId: RulesBotChallenge_create parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleBotChallengeRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleBotChallenge' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a bot challenge rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/bot-challenge/{rule}: delete: operationId: RulesBotChallenge_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a bot challenge rule tags: - Rules get: operationId: RulesBotChallenge_read parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleBotChallenge' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a bot challenge rule tags: - Rules patch: operationId: RulesBotChallenge_update parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleBotChallengeRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleBotChallenge' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a bot challenge rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/content-filter: get: operationId: RulesContentFilter_list parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleContentFilter' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List content filter rules tags: - Rules post: operationId: RulesContentFilter_create parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleContentFilterRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleContentFilter' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a content filter rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/content-filter/{rule}: delete: operationId: RulesContentFilter_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a content filter rule tags: - Rules get: operationId: RulesContentFilter_read parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleContentFilter' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a content filter rule tags: - Rules patch: operationId: RulesContentFilter_update parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleContentFilterRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleContentFilter' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a content filter rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/custom-response: get: operationId: RulesCustomResponse_list parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleCustomResponse' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List custom response rules tags: - Rules post: operationId: RulesCustomResponse_create parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleCustomResponseRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleCustomResponse' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a custom response rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/custom-response/{rule}: delete: operationId: RulesCustomResponse_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a custom response rule tags: - Rules get: operationId: RulesCustomResponse_read parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleCustomResponse' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a custom response rule tags: - Rules patch: operationId: RulesCustomResponse_update parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleCustomResponseRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleCustomResponse' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a custom response rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/function: get: operationId: RulesFunction_list parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleFunction' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List edge function rules tags: - Rules post: operationId: RulesFunction_create parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleFunctionRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleFunction' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create an edge function rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/function/{rule}: delete: operationId: RulesFunction_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete an edge function rule tags: - Rules get: operationId: RulesFunction_read parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleFunction' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of an edge function rule tags: - Rules patch: operationId: RulesFunction_update parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleFunctionRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleFunction' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update an edge function rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/headers: get: operationId: RulesHeaders_list parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleHeader' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List header rules tags: - Rules post: operationId: RulesHeaders_create parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleHeaderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleHeader' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a header rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/headers/{rule}: delete: operationId: RulesHeaders_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a header rule tags: - Rules get: operationId: RulesHeaders_read parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleHeader' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a header rule tags: - Rules patch: operationId: RulesHeaders_update parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleHeaderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleHeader' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a header rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/proxy: get: operationId: RulesProxy_list parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleProxy' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List proxy rules tags: - Rules post: operationId: RulesProxy_create parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleProxyRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/V2RuleProxy' description: The request has succeeded and a new resource has been created as a result. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a proxy rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/proxy/{rule}: delete: operationId: RulesProxy_delete parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple - explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a proxy rule tags: - Rules get: operationId: RulesProxy_read parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple - explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleProxy' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a proxy rule tags: - Rules patch: operationId: RulesProxy_update parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple - explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleProxyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleProxy' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a proxy rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/redirect: get: operationId: RulesRedirect_list parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleRedirect' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List redirect rules tags: - Rules post: operationId: RulesRedirect_create parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleRedirectRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleRedirect' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a redirect rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/redirect/{rule}: delete: operationId: RulesRedirect_delete parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple - explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a redirect rule tags: - Rules get: operationId: RulesRedirect_read parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple - explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleRedirect' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a redirect rule tags: - Rules patch: operationId: RulesRedirect_update parameters: - explode: false in: path name: organization required: true schema: type: string style: simple - explode: false in: path name: project required: true schema: type: string style: simple - explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleRedirectRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleRedirect' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a redirect rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/serve-static: get: operationId: RulesServeStatic_list parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/V2RuleServeStatic' type: array description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: List serve static rules tags: - Rules post: operationId: RulesServeStatic_create parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleServeStaticRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleServeStatic' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Create a serve static rule tags: - Rules /api/v2/organizations/{organization}/projects/{project}/rules/serve-static/{rule}: delete: operationId: RulesServeStatic_delete parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "204": description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Delete a serve static rule tags: - Rules get: operationId: RulesServeStatic_read parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleServeStatic' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Get details of a serve static rule tags: - Rules patch: operationId: RulesServeStatic_update parameters: - description: Organization identifier explode: false in: path name: organization required: true schema: type: string style: simple - description: Project identifier explode: false in: path name: project required: true schema: type: string style: simple - description: Rule identifier explode: false in: path name: rule required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/V2RuleServeStaticRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/V2RuleServeStatic' description: The request has succeeded. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: The server could not understand the request due to invalid syntax. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. summary: Update a serve static rule tags: - Rules /api/v2/organizations/{organization}/tokens: get: operationId: Tokens_list parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/Tokens_list_200_response_inner' type: array description: The request has succeeded. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. security: - BearerAuth: [] summary: List API tokens scoped to this organization tags: - Tokens post: operationId: Tokens_create parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/Tokens_create_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Tokens_create_201_response' description: Token created. The plain token is returned once and cannot be retrieved again. "400": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Bad request. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. "422": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Validation error. security: - BearerAuth: [] summary: Create a new API token scoped to this organization tags: - Tokens /api/v2/organizations/{organization}/tokens/{token_id}: delete: operationId: Tokens_delete parameters: - description: Organization identifier example: test-org explode: false in: path name: organization required: true schema: type: string style: simple - description: Token ID to revoke example: 42 explode: false in: path name: token_id required: true schema: type: integer style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Tokens_delete_200_response' description: Token revoked successfully. "403": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Access is forbidden. "404": content: application/json: schema: $ref: '#/components/schemas/V2Error' description: Token not found. security: - BearerAuth: [] summary: Revoke an API token tags: - Tokens /api/v3/organizations/{organisation}/ai/models: get: operationId: listAIModels parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Filter models by supported feature example: embeddings explode: true in: query name: feature required: false schema: default: all enum: - chat - embeddings - vision - streaming - all type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listAIModels_200_response' description: List of available AI models "500": description: Failed to fetch models summary: List available AI models for an organization tags: - AI Models /api/v3/organizations/{organisation}/ai/models/{modelId}: get: description: |- Retrieves detailed information about a specific Bedrock model from the catalog. * * **Features:** * - Complete pricing breakdown (input/output per million tokens) * - Context window and output token limits * - Supported features (chat, vision, streaming, embeddings) * - Model availability and deprecation status * - Release date for version tracking * * **Example Model IDs:** * - `amazon.nova-lite-v1:0` - Default multimodal model * - `anthropic.claude-3-5-sonnet-20241022-v2:0` - Latest Claude * - `amazon.titan-embed-text-v2:0` - Latest embeddings operationId: getAIModel parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: "The model identifier (e.g., amazon.nova-lite-v1:0)" example: amazon.nova-lite-v1:0 explode: false in: path name: modelId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getAIModel_200_response' description: Model details retrieved successfully "404": content: application/json: schema: $ref: '#/components/schemas/getAIModel_404_response' description: Model not found in catalog "500": description: Failed to fetch model details summary: Get AI Model Details tags: - AI Models /api/v3/organizations/{organisation}/ai/sessions: get: description: |- Lists active sessions for an organization with flexible filtering options. * * **Query Combinations:** * 1. By Organization (default): Returns all sessions in the organization * 2. By Organization + Group: `?sessionGroup=drupal-prod` - Sessions in a specific group * 3. By User: `?userId=user-123` - All sessions for a user * 4. By User + Group: `?userId=user-123&sessionGroup=drupal-prod` - User's sessions in a specific group * * **Use Cases:** * - List user's conversations in a specific app/environment * - Admin view of all sessions in a customer/tenant group * - 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. * * **Typical Flow:** * 1. Get session to retrieve conversation history * 2. Call AI inference with full message history * 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 /api/v3/organizations/{organisation}/ai/tasks: get: description: |- Lists tasks for an organization with optional filtering. Filters can be combined for powerful queries. * * **Filter Examples:** * - All tasks in a list: ?taskListId=world-1 * - Pending tasks in a list: ?taskListId=world-1&status=pending * - Tasks assigned to an agent: ?assignedAgentId=agent-code-reviewer * - Combined: ?taskListId=world-1&status=in_progress&assignedAgentId=agent-1 * * **Reverse Dependency Lookup:** * Use `dependsOn` to find tasks that depend on a specific task (waiting for it to complete): * - ?dependsOn=task-123 - Returns task IDs only (lightweight) * - ?dependsOn=task-123&includeDetails=true - Returns full task objects * - ?dependsOn=task-123&status=pending - Pending tasks waiting for task-123 * * **Ordering:** * Tasks are returned in reverse chronological order (most recent first). operationId: listTasks parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Filter tasks by task list ID. Task lists are implicit groupings - any string can be used. example: world-1 explode: true in: query name: taskListId required: false schema: type: string style: form - description: Filter tasks by status example: pending explode: true in: query name: status required: false schema: enum: - pending - in_progress - completed - failed - cancelled - blocked type: string style: form - description: Filter tasks by assigned agent ID example: agent-code-reviewer explode: true in: query name: assignedAgentId required: false schema: type: string style: form - description: "Maximum number of tasks 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: "Reverse lookup: find tasks that depend on this task ID. Returns\ \ tasks waiting for the specified task to complete." example: 550e8400-e29b-41d4-a716-446655440000 explode: true in: query name: dependsOn required: false schema: format: uuid type: string style: form - description: "When using dependsOn, return full task objects in addition to\ \ IDs. Default false (IDs only for lightweight responses)." explode: true in: query name: includeDetails required: false schema: default: false type: boolean style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listTasks_200_response' description: "Tasks retrieved successfully. Response format varies: standard\ \ returns {tasks, count}, with dependsOn returns {taskIds, count, dependsOn},\ \ with dependsOn+includeDetails returns {taskIds, tasks, count, dependsOn}" "500": description: Failed to list tasks summary: List tasks with optional filtering tags: - AI Task Management post: description: |- Creates a new task for multi-agent coordination and workflow orchestration. * * **Key Features:** * - **Persistent State**: Tasks survive across conversations and sessions * - **Agent Assignment**: Pre-assign tasks to specific agents * - **Task Lists**: Group related tasks using taskListId (implicit - no need to create lists first) * - **Dependencies**: Define task dependencies for workflow orchestration * - **Metadata**: Store flexible JSON metadata for task-specific data * - **Progress Tracking**: Track progress from 0.0 to 1.0 * * **Use Cases:** * - Break down complex requests into manageable steps * - Assign work to specialized agents * - Track long-running operations * - Coordinate multi-agent workflows operationId: createTask 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/createTask_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/createTask_201_response' description: Task created successfully "400": description: Invalid request "500": description: Failed to create task summary: Create a new task tags: - AI Task Management /api/v3/organizations/{organisation}/ai/tasks/{taskId}: delete: description: |- Permanently deletes a task. This action cannot be undone. * * **Dependency Protection:** * By default, deletion is blocked if other tasks depend on this task (TASK_HAS_DEPENDENTS error). * This prevents breaking workflows. * * **Cascade Delete:** * Use `?cascade=true` to delete the task AND all tasks that depend on it recursively. * Useful for cleaning up entire dependency chains. * * **Examples:** * - DELETE /tasks/{id} - Deletes task if no dependents, otherwise returns 409 error * - DELETE /tasks/{id}?cascade=true - Deletes task and all dependent tasks operationId: deleteTask parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The task UUID explode: false in: path name: taskId required: true schema: format: uuid type: string style: simple - description: "If true, delete task and all dependent tasks recursively" explode: true in: query name: cascade required: false schema: default: false type: boolean style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteTask_200_response' description: Task deleted successfully "409": content: application/json: schema: $ref: '#/components/schemas/deleteTask_409_response' description: Task has dependents - cannot delete without cascade "404": description: Task not found "500": description: Failed to delete task summary: Delete a task tags: - AI Task Management get: description: "Retrieves detailed information about a specific task including\ \ status, progress, dependencies, and results." operationId: getTask parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The task UUID explode: false in: path name: taskId required: true schema: format: uuid type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getTask_200_response' description: Task details retrieved successfully "404": description: Task not found "500": description: Failed to get task summary: Get task details tags: - AI Task Management put: description: |- Updates an existing task. All fields are optional - only provided fields will be updated. * * **Status Transitions:** * - Changing from **pending** to **in_progress** automatically sets startedAt timestamp * - Changing to **completed**, **failed**, or **cancelled** automatically sets completedAt timestamp * - Changing to **blocked** automatically sets blockedAt timestamp * - Changing from **blocked** to **in_progress** or **pending** clears blocked fields * - Completed tasks get a 30-day TTL for automatic cleanup * * **Progress Updates:** * - Update progress (0.0 to 1.0) to track completion percentage * - Update progressMessage for human-readable status updates * - Set result object when task completes successfully * - Set error string when task fails * - Set blockedReason and blockedByTaskIds when blocking a task operationId: updateTask parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The task UUID example: 550e8400-e29b-41d4-a716-446655440000 explode: false in: path name: taskId required: true schema: format: uuid type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateTask_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/updateTask_200_response' description: Task updated successfully "400": description: Invalid request "404": description: Task not found "500": description: Failed to update task summary: Update a task tags: - AI Task Management /api/v3/organizations/{organisation}/ai/tasks/{taskListId}/dependency-graph: get: description: |- Returns the full dependency graph for all tasks in a task list. * * **Use Cases:** * - Visualize task dependencies in a UI (DAG diagram) * - Analyze workflow structure and critical paths * - Find starting tasks (roots) and terminal tasks (leaves) * - Plan parallel execution by identifying independent task groups * * **Response Structure:** * - `taskCount`: Total number of tasks in the list * - `roots`: Task IDs with no dependencies (starting points) * - `leaves`: Task IDs with no dependents (terminal tasks) * - `graph`: Adjacency list with each task's dependencies and dependents operationId: getDependencyGraph parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The task list ID to get the dependency graph for example: world-1 explode: false in: path name: taskListId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getDependencyGraph_200_response' description: Dependency graph retrieved successfully "500": description: Failed to get dependency graph summary: Get dependency graph for a task list tags: - AI Task Management /api/v3/organizations/{organisation}/ai/usage: get: operationId: getAIUsageStats parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Month to retrieve statistics for (YYYY-MM format) explode: true in: query name: month required: false schema: example: 2025-10 type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/getAIUsageStats_200_response' description: Usage statistics "500": description: Failed to fetch usage statistics summary: Get AI usage statistics tags: - AI Monitoring /api/v3/organizations/{organisation}/ai/chat: post: description: |- Sends requests to the AI API Gateway endpoint which buffers responses. Supports text, images, videos, and documents via base64 encoding. * * **Execution Modes:** * - **Sync Mode** (default): Standard JSON response, waits for completion (200 response) * - **Async Mode**: Set `async: true` for long-running tasks with polling (202 response) * * **Async/Durable Mode (`async: true`):** * - Returns immediately with `requestId` and `pollUrl` (HTTP 202) * - Uses AWS Lambda Durable Functions for long-running inference * - Supports client-executed tools via `waiting_callback` state * - Poll `/ai/chat/executions/{requestId}` for status * - Submit client tool results via `/ai/chat/callback` * - Ideal for complex prompts, large contexts, or client-side tools * * **Multimodal Support:** * - **Text**: Simple string content * - **Images**: Base64-encoded PNG, JPEG, GIF, WebP (up to 25MB) * - **Videos**: Base64-encoded MP4, MOV, WebM, etc. (up to 25MB) * - **Documents**: Base64-encoded PDF, DOCX, CSV, etc. (up to 25MB) * * **Supported Models (Multimodal):** * - **Claude 4.5 Series**: Sonnet 4.5, Haiku 4.5, Opus 4.5 (images, up to 20 per request) * - **Claude 3.5 Series**: Sonnet v1/v2 (images, up to 20 per request) * - **Amazon Nova**: Lite, Pro, Micro (images, videos, documents) * * **Usage Tips:** * - Use base64 encoding for images/videos < 5-10MB * - Place media before text prompts for best results * - Label multiple media files (e.g., 'Image 1:', 'Image 2:') * - Maximum 25MB total payload size * * **Response Patterns:** * - **Text-only**: Returns simple text response when no tools requested * - **Single tool**: Returns `toolUse` object when AI requests one tool * - **Multiple tools**: Returns `toolUse` array when AI requests multiple tools * - **Auto-execute sync**: Automatically executes tool and returns final text response * - **Auto-execute async**: Returns toolUse with `executionId` and `status` for polling operationId: chatInference 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/chatInference_request' description: Chat request with optional multimodal content blocks required: true responses: "200": content: application/json: example: response: role: assistant content: The capital of Australia is Canberra. model: amazon.nova-lite-v1:0 requestId: req-abc123 finishReason: stop usage: inputTokens: 12 outputTokens: 8 totalTokens: 20 costCents: 0.18 schema: $ref: '#/components/schemas/chatInference_200_response' description: "Chat inference completed (buffered response, sync mode)" "202": content: application/json: schema: $ref: '#/components/schemas/chatInference_202_response' description: "Async execution started (when `async: true` in request)" "500": description: Failed to perform chat inference summary: Chat inference via API Gateway (buffered responses) with multimodal support tags: - AI Inference /api/v3/organizations/{organisation}/ai/chat/stream: post: description: |- Streams responses from the AI streaming subdomain using Server-Sent Events (SSE). Tokens are streamed in real-time as they are generated. * * **Execution Modes:** * - **Streaming Mode** (default): Real-time SSE token-by-token responses * - **Async Mode**: Set `async: true` for long-running tasks with polling (202 response) * * **Async/Durable Mode (`async: true`):** * - Returns immediately with `requestId` and `pollUrl` (HTTP 202) * - Uses AWS Lambda Durable Functions for long-running inference * - Supports client-executed tools via `waiting_callback` state * - Poll `/ai/chat/executions/{requestId}` for status * - Submit client tool results via `/ai/chat/callback` * * **Multimodal Support:** * - **Text**: Simple string content * - **Images**: Base64-encoded PNG, JPEG, GIF, WebP (up to 25MB) * - **Videos**: Base64-encoded MP4, MOV, WebM, etc. (up to 25MB) * - **Documents**: Base64-encoded PDF, DOCX, CSV, etc. (up to 25MB) * * **Supported Models (Multimodal):** * - **Claude 4.5 Series**: Sonnet 4.5, Haiku 4.5, Opus 4.5 (images, up to 20 per request) * - **Claude 3.5 Series**: Sonnet v1/v2 (images, up to 20 per request) * - **Amazon Nova**: Lite, Pro, Micro (images, videos, documents) * * **Usage Tips:** * - Use base64 encoding for images/videos < 5-10MB * - Place media before text prompts for best results * - Label multiple media files (e.g., 'Image 1:', 'Image 2:') * - Maximum 25MB total payload size * - Streaming works with all content types (text, image, video, document) operationId: chatInferenceStream 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/chatInferenceStream_request' description: Chat request with optional multimodal content blocks required: true responses: "200": content: text/event-stream: example: |- id: chunk-0 event: start data: {"requestId":"abc123","model":"amazon.nova-lite-v1:0","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}} schema: description: "Server-Sent Events stream with chunks of generated text.\ \ Format: id, event, data lines separated by newlines." type: string description: "Streaming response (text/event-stream, sync mode)" "202": content: application/json: schema: $ref: '#/components/schemas/chatInference_202_response' description: "Async execution started (when `async: true` in request)" "500": description: Failed to perform streaming inference summary: Chat inference via streaming endpoint (true HTTP streaming) with multimodal support tags: - AI Inference /api/v3/organizations/{organisation}/ai/embeddings: post: description: |- Generates vector embeddings for text content using embedding models. Used for semantic search, document similarity, and RAG applications. * * **Features:** * - Single text or batch processing (up to 100 texts) * - Configurable dimensions (256, 512, 1024, 8192 for Titan v2) * - Optional normalization to unit length * - Usage tracking for billing * * **Use Cases:** * - Semantic search across documents * - Similarity matching for content recommendations * - RAG (Retrieval-Augmented Generation) pipelines * - Clustering and classification * * **Available Embedding Models:** * - amazon.titan-embed-text-v2:0 (default, supports 256-8192 dimensions) * - amazon.titan-embed-text-v1:0 (1536 dimensions fixed) operationId: embeddings parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple requestBody: content: application/json: example: input: The Australian government announced new climate policy modelId: amazon.titan-embed-text-v2:0 dimensions: 1024 normalize: true schema: $ref: '#/components/schemas/embeddings_request' description: Embedding request with single or multiple texts required: true responses: "200": content: application/json: example: embeddings: - 0.0215 - 8.0E-4 - 0.0312 - -0.0087 - 0.0273 model: amazon.titan-embed-text-v2:0 dimension: 1024 usage: inputTokens: 8 totalTokens: 8 schema: $ref: '#/components/schemas/embeddings_200_response' description: Embeddings generated successfully "400": description: Invalid request parameters "403": description: Access denied "500": description: Failed to generate embeddings summary: Generate text embeddings for semantic search and RAG applications tags: - AI Inference /api/v3/organizations/{organisation}/ai/image-generation: post: description: |- Generates images using Amazon Nova Canvas image generation model. * * **Region Restriction:** Nova Canvas is ONLY available in: * - `us-east-1` (US East, N. Virginia) * - `ap-northeast-1` (Asia Pacific, Tokyo) * - `eu-west-1` (Europe, Ireland) * ❌ NOT available in `ap-southeast-2` (Sydney) * * **Supported Task Types:** * - **TEXT_IMAGE**: Basic text-to-image generation * - **TEXT_IMAGE with Conditioning**: Layout-guided generation using edge detection or segmentation * - **COLOR_GUIDED_GENERATION**: Generate images with specific color palettes * - **IMAGE_VARIATION**: Create variations of existing images * - **INPAINTING**: Fill masked areas in images * - **OUTPAINTING**: Extend images beyond their borders * - **BACKGROUND_REMOVAL**: Remove backgrounds from images * - **VIRTUAL_TRY_ON**: Try on garments/objects on people * * **Quality Options:** * - **standard**: Faster generation, lower cost * - **premium**: Higher quality, slower generation * * **Timeout:** Image generation can take up to 5 minutes operationId: imageGeneration parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple requestBody: content: application/json: example: taskType: TEXT_IMAGE textToImageParams: text: A serene mountain landscape at sunset with snow-capped peaks negativeText: "blurry, low quality, distorted" style: PHOTOREALISM imageGenerationConfig: width: 1024 height: 1024 quality: premium numberOfImages: 1 cfgScale: 7 region: us-east-1 schema: $ref: '#/components/schemas/imageGeneration_request' description: Image generation request required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/imageGeneration_200_response' description: Image(s) generated successfully "400": description: Invalid request parameters "403": description: Access denied "500": description: Failed to generate images summary: Generate images with Amazon Nova Canvas tags: - AI Inference /api/v3/organizations/{organisation}/ai/tools: get: description: |- Retrieves all available built-in tools that can be used with function calling. These tools can be included in `toolConfig` when making AI inference requests. * * **Available Built-in Tools:** * - `get_weather`: Get current weather for a location using Open-Meteo API * - `calculate`: Perform basic mathematical calculations (add, subtract, multiply, divide) * - `search_web`: Search the web for information (mock implementation) * - `generate_image`: Generate images with Amazon Nova Canvas (async execution, 10-15s typical runtime) * * **Use Cases:** * - Discover available tools dynamically without hardcoding * - Get complete tool specifications including input schemas * - Build UI for tool selection * - Validate tool names before sending requests * * **Dynamic Tool Discovery:** * This endpoint enables clients to: * 1. Fetch all available tools on page load * 2. Display tool capabilities to users * 3. Filter tools based on user permissions * 4. Use `allowedTools` whitelist for security * * **Alternative Endpoint:** * - `GET /ai/tools/names` - Returns only tool names (faster, lighter response) operationId: listAITools 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/listAITools_200_response' description: Available tools retrieved successfully "403": description: Access denied "500": description: Failed to fetch tools summary: List available built-in tools for function calling tags: - AI Tools /api/v3/organizations/{organisation}/ai/tools/names: get: description: Retrieves just the names of available built-in tools. Useful for quick validation or UI dropdown population without the full tool specifications. operationId: listAIToolNames 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/listAIToolNames_200_response' description: Tool names retrieved successfully "403": description: Access denied "500": description: Failed to fetch tool names summary: List tool names only (lightweight response) tags: - AI Tools /api/v3/organizations/{organisation}/ai/tools/executions/{executionId}: get: description: |- Retrieves the status and result of an async tool execution. Used for polling long-running tools like image generation. * * **Async Tool Execution Pattern:** * This endpoint enables a polling pattern for long-running tools that would otherwise hit API Gateway's 30-second timeout. * * **Flow:** * 1. AI requests tool use (e.g., `generate_image`) * 2. Chat API returns `toolUse` with execution tracking info * 3. Client starts polling this endpoint with the `executionId` * 4. When `status === 'complete'`, retrieve `result` and send back to AI * 5. AI incorporates result into final response * * **Status Values:** * - `pending`: Tool execution queued, not yet started * - `running`: Tool is currently executing * - `complete`: Tool execution finished successfully, `result` available * - `failed`: Tool execution failed, `error` available * * **Polling Recommendations:** * - Poll every 2-3 seconds for image generation * - Exponential backoff for other tools (start 1s, max 5s) * - Stop polling after 5 minutes (consider failed) * - Auto-cleanup after 24 hours (TTL) * * **Use Cases:** * - Image generation (10-15s typical runtime) * - Video processing * - Large file uploads/downloads * - Complex database queries * - External API calls with high latency operationId: getAIToolExecutionStatus parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Tool execution identifier explode: false in: path name: executionId required: true schema: example: exec_0123456789abcdef0123456789abcdef pattern: "^exec_[a-f0-9]{32}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getAIToolExecutionStatus_200_response' description: Tool execution status retrieved successfully "404": content: application/json: schema: $ref: '#/components/schemas/getAIToolExecutionStatus_404_response' description: Execution not found (may have expired after 24h) "403": description: Access denied "500": description: Failed to retrieve execution status summary: Get async tool execution status and result tags: - AI Tools /api/v3/organizations/{organisation}/ai/chat/executions/{identifier}: get: description: |- Poll the status of an async/durable chat execution. * * **When to use:** After starting chat inference with `async: true`, poll this endpoint * to check execution status and retrieve results when complete. * * **Identifier:** Accepts either: * - `requestId` (recommended): The short ID returned from the async request * - `executionArn`: The full AWS Lambda durable execution ARN (must be URL-encoded) * * **Statuses:** * - `pending`: Execution is starting (retry shortly) * - `running`: Execution is in progress * - `waiting_callback`: Execution paused, waiting for client tool results * - `complete`: Execution finished successfully * - `failed`: Execution failed with error * * **Client Tool Callback:** * When status is `waiting_callback`, submit tool results via `POST /ai/chat/callback`. * * **Polling Recommendations:** * - Start with 1 second delay, exponential backoff up to 30 seconds * - Stop polling after 15 minutes (consider failed) operationId: getDurableExecutionStatus parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: "Either the requestId from async response, or full executionArn\ \ (URL-encoded)" example: XkdVWiEfSwMEPrw= explode: false in: path name: identifier required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getDurableExecutionStatus_200_response' description: Execution status retrieved "404": description: Execution not found "403": description: Access denied "500": description: Failed to retrieve execution status summary: Get Durable Execution Status tags: - AI Inference /api/v3/organizations/{organisation}/ai/chat/callback: post: description: |- Submit tool execution results to resume a suspended durable execution. * * **When to use:** When polling the execution status returns `waiting_callback`, use this endpoint * to submit the results of client-executed tools. The execution will then resume. * * **Flow:** * 1. Start async chat with client-executed tools (`autoExecute: []` or tools not in autoExecute list) * 2. Poll status until `waiting_callback` * 3. Execute tools locally using `pendingTools` from status response * 4. Submit results here with the `callbackId` * 5. Poll status until `complete` * * **Important:** Each `callbackId` can only be used once. After submission, poll the execution * status to see the updated state. operationId: submitToolCallback 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/submitToolCallback_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/submitToolCallback_200_response' description: "Callback submitted successfully, execution will resume" "400": description: Invalid request (missing callbackId or toolResults) "404": description: Callback not found or already processed "403": description: Access denied "500": description: Failed to submit callback summary: Submit Client Tool Results (Callback) tags: - AI Inference /api/v3/organizations/{organisation}/ai/tools/orchestrations/{orchestrationId}: get: description: |- Retrieves the status and synthesized result of a multi-tool async execution orchestration. * * **Note:** This endpoint is for async tool execution polling (`/tools/orchestrations`). * For durable batch processing orchestrations, see `GET /orchestrations` endpoints. * * **Orchestration Pattern:** * When the AI requests multiple async tools simultaneously, an orchestration is created * to track all tool executions and synthesize their results into a single coherent response. * * **Flow:** * 1. AI requests multiple async tools (e.g., image generation + web search) * 2. Chat API creates orchestration and returns orchestrationId * 3. Tool Orchestrator Lambda polls all async tools * 4. When all tools complete, Orchestrator synthesizes results using AI * 5. Client polls this endpoint and receives final synthesized response * * **Status Values:** * - pending: Orchestration created, tools not yet started * - polling: Orchestrator is actively polling async tools * - synthesizing: All tools complete, AI is synthesizing response * - complete: Orchestration finished, synthesizedResponse available * - failed: Orchestration failed, error available * * **Polling Recommendations:** * - Poll every 2 seconds * - Maximum poll time: 10 minutes * - Orchestrator handles tool polling internally * * **Benefits over individual polling:** * - Single poll endpoint for multiple async tools * - AI synthesizes all results into coherent response * - Answers the original user question, not just tool summaries operationId: getAIOrchestrationStatus parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier for aggregated async tool executions explode: false in: path name: orchestrationId required: true schema: example: orch_abc123def456789012345678901234 pattern: "^orch_[a-f0-9]{32}$" type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getAIOrchestrationStatus_200_response' description: Orchestration status retrieved successfully "404": content: application/json: schema: $ref: '#/components/schemas/getAIOrchestrationStatus_404_response' description: Orchestration not found (may have expired after 24h) "403": description: Access denied "500": description: Failed to retrieve orchestration status summary: Get Tool Orchestration Status (Async Tool Polling) tags: - AI Tools /api/v3/organizations/{organisation}/ai/tools/executions: get: description: |- Lists recent async tool executions for an organization. Useful for debugging, monitoring, and building admin UIs. * * **Query Patterns:** * - All recent executions: `GET /ai/tools/executions` * - Filter by status: `GET /ai/tools/executions?status=running` * - Limit results: `GET /ai/tools/executions?limit=20` * * **Results:** * - Ordered by creation time (newest first) * - Limited to 50 by default (configurable via `limit` parameter) * - Only shows executions not yet expired (24h TTL) * * **Use Cases:** * - Monitor all active tool executions * - Debug failed executions * - Build admin dashboards * - Track tool usage patterns * - Audit async operations operationId: listAIToolExecutions parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Filter by execution status explode: true in: query name: status required: false schema: enum: - pending - running - complete - failed type: string style: form - description: Maximum number of executions to return explode: true in: query name: limit required: false schema: default: 50 maximum: 100 minimum: 1 type: integer style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listAIToolExecutions_200_response' description: Tool executions retrieved successfully "400": description: Invalid parameters "403": description: Access denied "500": description: Failed to retrieve executions summary: List tool executions for monitoring and debugging tags: - AI Tools /api/v3/organizations/{organisation}/ai/agents: get: description: |- Lists all AI agents for an organization. Agents are pre-configured AI assistants with specific system prompts, model settings, and tool permissions. * * **Features:** * - Filter by group (e.g., 'development', 'compliance') * - Organization-scoped * - Returns agent configurations without execution history operationId: listAIAgents parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: "Optional group filter (e.g., 'development', 'compliance')" explode: true in: query name: group required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listAIAgents_200_response' description: List of agents retrieved successfully "403": description: Access denied "500": description: Failed to retrieve agents summary: List AI Agents tags: - AI Agents post: description: |- Creates a new AI agent with specific configuration, system prompt, and tool permissions. * * **Agent Configuration:** * - **System Prompt**: Instructions that guide the agent's behavior * - **Model**: Which foundation model to use (e.g., 'amazon.nova-pro-v1:0') * - **Temperature**: Creativity level (0-1) * - **Allowed Tools**: Which tools the agent can auto-execute * - **Allowed Collections**: Vector DB collections for RAG * - **Group**: Optional categorization (e.g., 'development', 'compliance') * * **Auto-Execution:** * All tools are automatically executed when an agent requests them (no client confirmation needed). operationId: createAIAgent 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/createAIAgent_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/createAIAgent_201_response' description: Agent created successfully "400": description: Invalid request parameters "403": description: Access denied "500": description: Failed to create agent summary: Create AI Agent tags: - AI Agents /api/v3/organizations/{organisation}/ai/agents/{agentId}: delete: description: Permanently deletes an AI agent. This action cannot be undone. operationId: deleteAIAgent parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The agent ID explode: false in: path name: agentId required: true schema: format: uuid type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteAIAgent_200_response' description: Agent deleted successfully "403": description: Access denied "404": description: Agent not found "500": description: Failed to delete agent summary: Delete Agent tags: - AI Agents get: description: Retrieves detailed configuration for a specific AI agent. operationId: getAIAgent parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The agent ID explode: false in: path name: agentId required: true schema: format: uuid type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getAIAgent_200_response' description: Agent details retrieved successfully "403": description: Access denied "404": description: Agent not found "500": description: Failed to retrieve agent summary: Get Agent Details tags: - AI Agents put: description: "Updates an existing AI agent configuration. All fields except\ \ agentId, organizationId, createdAt, and createdBy can be updated." operationId: updateAIAgent parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The agent ID explode: false in: path name: agentId required: true schema: format: uuid type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateAIAgent_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/updateAIAgent_200_response' description: Agent updated successfully "400": description: Invalid request parameters "403": description: Access denied "404": description: Agent not found "500": description: Failed to update agent summary: Update Agent tags: - AI Agents /api/v3/organizations/{organisation}/ai/agents/{agentId}/chat: post: description: |- Initiates a chat session with a specific AI agent. The agent's configuration (system prompt, temperature, model, allowed tools) is automatically applied. * * **Key Features:** * - **Session Management**: Automatic session creation and state tracking * - **Multi-turn Conversations**: Full conversation history maintained server-side * - Agent's system prompt is prepended to conversation * - Only agent's allowed tools are available * - All tools are auto-executed on cloud (no client confirmation needed) * - Temperature and model from agent config * - Supports sync, streaming, and async modes * * **Execution Modes:** * - **Sync Mode** (default): Standard JSON response, waits for completion * - **Streaming Mode**: Set `stream: true` for SSE token-by-token responses * - **Async Mode**: Set `async: true` for long-running tasks with polling * * **Async/Durable Mode (`async: true`):** * - Returns immediately with `requestId` and `pollUrl` (HTTP 202) * - Uses AWS Lambda Durable Functions for long-running agent tasks * - All tools are auto-executed on cloud (no `waiting_callback` state) * - Poll `/ai/chat/executions/{requestId}` for status * - Ideal for agents with slow tools (image generation, web search, etc.) * * **Session Support:** * - Omit `sessionId` to create a new session automatically * - Include `sessionId` to continue an existing conversation * - Sessions expire after 60 minutes of inactivity * - Sessions work in all modes (sync, streaming, async) * - Use `/sessions/{sessionId}` to retrieve full conversation history operationId: chatWithAIAgent parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The agent ID explode: false in: path name: agentId required: true schema: format: uuid type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/chatWithAIAgent_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/chatWithAIAgent_200_response' description: Agent response generated successfully (sync mode) "202": content: application/json: schema: $ref: '#/components/schemas/chatWithAIAgent_202_response' description: "Async execution started (when `async: true` in request)" "400": description: Invalid request parameters "403": description: Access denied "404": description: Agent not found "500": description: Failed to chat with agent summary: Chat with AI Agent tags: - AI Agents /api/v3/organizations/{organisation}/ai/agents/{agentId}/overlay: delete: description: "Removes the per-organisation overlay for a global agent, reverting\ \ it to platform defaults." operationId: deleteAgentOverlay parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Global agent identifier explode: false in: path name: agentId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteAgentOverlay_200_response' description: Overlay deleted — agent reverted to defaults "403": description: Access denied "404": description: Not a global agent "500": description: Failed to reset overlay summary: Delete Agent Overlay tags: - AI Agents get: description: "Returns the per-organisation overlay for a global agent, plus\ \ base agent metadata for UI context. If no overlay exists the response contains\ \ `overlay: null`. Overlays can only be created for global agents." operationId: getAgentOverlay parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: "Global agent identifier (e.g., 'quantgov-code')" explode: false in: path name: agentId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getAgentOverlay_200_response' description: Overlay retrieved (may be null if none set) "403": description: Access denied "404": description: Not a global agent "500": description: Failed to retrieve overlay summary: Get Agent Overlay tags: - AI Agents put: description: Creates or replaces the per-organisation overlay for a global agent. PUT is full replacement — omitted optional fields are removed. Include `version` from a prior GET to enable compare-and-swap (409 on conflict). Omit for last-writer-wins. operationId: upsertAgentOverlay parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Global agent identifier explode: false in: path name: agentId required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/upsertAgentOverlay_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/upsertAgentOverlay_200_response' description: Overlay created or updated "400": description: Invalid request parameters "403": description: Access denied "404": description: Not a global agent "409": description: Version conflict — overlay was modified concurrently "500": description: Failed to save overlay summary: Upsert Agent Overlay tags: - AI Agents /api/v3/organizations/{organisation}/ai/custom-tools: get: description: Lists all registered custom edge function tools for an organization. operationId: listCustomTools 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/listCustomTools_200_response' description: Custom tools retrieved successfully "403": description: Access denied "500": description: Failed to retrieve custom tools summary: List Custom Tools tags: - AI Custom Tools post: description: |- Registers a custom edge function as a tool that AI models can invoke. Provide `edgeFunctionCode` (JavaScript) and the API will deploy it to the CDN, compute the edge function URL, and register the tool. * * **Edge Function Contract:** * - Edge functions must accept POST requests with JSON payload * - Expected request format: `{ 'toolName': '...', 'input': {...}, 'orgId': '...' }` * - Must return JSON response with either `result` or `error` field * * **Idempotent Updates:** * POSTing with the same `name` will update the existing tool — the edge function code is redeployed to the same UUID and the tool registration is updated. * * **Async Tools:** * Set `isAsync: true` for operations >5 seconds. The edge function should return `{ executionId: '...' }` and the AI will poll for completion. operationId: createCustomTool 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/createCustomTool_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/createCustomTool_201_response' description: Custom tool registered successfully "400": description: Invalid request parameters "403": description: Access denied "500": description: Failed to register custom tool summary: Register Custom Edge Function Tool tags: - AI Custom Tools /api/v3/organizations/{organisation}/ai/custom-tools/{toolName}: delete: description: Deletes a custom tool registration and its deployed edge function. operationId: deleteCustomTool parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The tool name to delete explode: false in: path name: toolName required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteCustomTool_200_response' description: Custom tool deleted successfully "403": description: Access denied "404": description: Tool not found "500": description: Failed to delete custom tool summary: Delete Custom Tool tags: - AI Custom Tools get: description: Retrieves a single registered custom tool by name. operationId: getCustomTool parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The tool name to retrieve explode: false in: path name: toolName required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getCustomTool_200_response' description: Custom tool retrieved successfully "403": description: Access denied "404": description: Tool not found "500": description: Failed to retrieve custom tools summary: Get Custom Tool tags: - AI Custom Tools /api/v3/organizations/{organisation}/ai/skills: get: description: |- Lists all skills available to the organization. Skills are reusable prompts, * workflows, or instructions that can be assigned to agents or invoked directly. * * **Skill Sources:** * - `inline`: Created directly via the API * - `skills.sh`: Imported from skills.sh registry * - `github`: Imported from a GitHub repository * - `local`: Uploaded from local file operationId: listSkills parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Filter skills by tag explode: true in: query name: tag required: false schema: type: string style: form - description: Filter skills by collection namespace (e.g. 'superpowers') explode: true in: query name: namespace required: false schema: type: string style: form - description: Maximum number of skills to return explode: true in: query name: limit required: false schema: default: 50 maximum: 100 minimum: 1 type: integer style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listSkills_200_response' description: List of skills retrieved successfully "403": description: Access denied "500": description: Failed to retrieve skills summary: List Organization's Skills tags: - AI Skills post: description: |- Creates a new skill with inline content. Use this for custom skills * that are defined directly in your organization. * * **Trigger Conditions:** * - Natural language description of when to use the skill * - Used by AI to determine when to suggest or apply the skill * - Example: 'When the user asks about code review or security analysis' operationId: createSkill 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/createSkill_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/createSkill_201_response' description: Skill created successfully "400": description: Invalid request parameters "403": description: Access denied "500": description: Failed to create skill summary: Create Inline Skill tags: - AI Skills /api/v3/organizations/{organisation}/ai/skills/{skillId}: delete: description: Permanently deletes a skill. This will also remove it from any agents that have it assigned. operationId: deleteSkill parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The skill ID explode: false in: path name: skillId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteSkill_200_response' description: Skill deleted successfully "403": description: Access denied "404": description: Skill not found "500": description: Failed to delete skill summary: Delete Skill tags: - AI Skills get: description: "Retrieves full details of a skill including its content, source\ \ information, and metadata." operationId: getSkill parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The skill ID explode: false in: path name: skillId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getSkill_200_response' description: Skill details retrieved successfully "403": description: Access denied "404": description: Skill not found "500": description: Failed to retrieve skill summary: Get Skill Details tags: - AI Skills put: description: |- Updates an existing skill. For imported skills, this updates * local overrides (name, tags, triggerCondition) but not the source content. * Use the sync endpoint to update source content. operationId: updateSkill parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The skill ID explode: false in: path name: skillId required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateSkill_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/updateSkill_200_response' description: Skill updated successfully "400": description: Invalid request parameters "403": description: Access denied "404": description: Skill not found "500": description: Failed to update skill summary: Update Skill tags: - AI Skills /api/v3/organizations/{organisation}/ai/skills/import: post: description: |- Imports a skill from an external source like skills.sh registry or GitHub repository. * * **Supported Sources:** * - `skills.sh`: Import from the skills.sh community registry * - `github`: Import from a GitHub repository (public or private) * * **Version Control:** * - Skills can be pinned to specific versions * - Use the sync endpoint to update to latest version operationId: importSkill 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/importSkill_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/importSkill_201_response' description: Skill imported successfully "400": description: Invalid request parameters "403": description: Access denied "502": description: Failed to fetch skill from source "500": description: Failed to import skill summary: Import Skill from External Source tags: - AI Skills /api/v3/organizations/{organisation}/ai/skills/{skillId}/sync: post: description: |- Re-fetches skill content from its original source. * Only applicable to skills imported from external sources (skills.sh, github). * Inline skills cannot be synced. * * **Version Behavior:** * - If version is pinned, fetches that specific version * - If no version specified, fetches latest operationId: syncSkill parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The skill ID explode: false in: path name: skillId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/importSkill_201_response' description: Skill synced successfully "400": description: Cannot sync inline skill "403": description: Access denied "404": description: Skill not found "502": description: Failed to fetch skill from source "500": description: Failed to sync skill summary: Sync Skill from Source tags: - AI Skills /api/v3/organizations/{organisation}/ai/skills/collections: get: description: "Lists distinct namespaces (collections) for the organization,\ \ with skill counts and skill names for each collection." operationId: listSkillCollections 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/listSkillCollections_200_response' description: Collections retrieved successfully "403": description: Access denied "500": description: Failed to retrieve collections summary: List Skill Collections tags: - AI Skills /api/v3/organizations/{organisation}/ai/skills/import-collection: post: description: |- Discovers all skill directories under a given path in a GitHub repository * and imports each as a skill within the specified namespace. Each subdirectory must contain a SKILL.md file. * * **Namespace:** Used for grouping and slash-command invocation (e.g., `/superpowers:brainstorming`). * * **Idempotent:** If a skill with the same namespace + name already exists, it is updated. operationId: importSkillCollection 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/importSkillCollection_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/importSkillCollection_201_response' description: Collection imported successfully "400": description: Invalid request parameters "403": description: Access denied "502": description: GitHub API error "500": description: Failed to import collection summary: Import Skill Collection from GitHub tags: - AI Skills /api/v3/organizations/{organisation}/ai/skills/collections/{namespace}/sync: post: description: |- Re-syncs all skills in a namespace from their GitHub source. Detects new * skills added to the repository and flags skills removed from the source. Does NOT auto-delete removed skills. operationId: syncSkillCollection parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Collection namespace explode: false in: path name: namespace required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/syncSkillCollection_200_response' description: Collection synced successfully "400": description: Invalid request "403": description: Access denied "404": description: Collection not found "502": description: GitHub API error "500": description: Failed to sync collection summary: Sync Skill Collection tags: - AI Skills /api/v3/organizations/{organisation}/ai/skills/collections/{namespace}: delete: description: Permanently deletes all skills in the specified namespace. operationId: deleteSkillCollection parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: Collection namespace explode: false in: path name: namespace required: true schema: 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 Skill Collection tags: - AI Skills /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). * * **Use Cases:** * - Product documentation ('docs') * - Company policies ('policies') * - Support knowledge base ('support') * - 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: * * 1. **Purge All** - Set `purgeAll: true` to delete ALL documents in the collection * * 2. **By Document IDs** - Provide `documentIds` array with specific document UUIDs * * 3. **By Metadata** - Provide `metadata` object with `field` and `values` to delete documents where the metadata field matches any of the values * * **Drupal Integration:** * When using with Drupal AI Search, use metadata deletion with: * - `field: 'drupal_entity_id'` to delete all chunks for specific entities * - `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. * * **Supported Content:** * - Plain text content * - URLs to fetch content from * - Markdown documents * * **Metadata:** * 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. * * **Three Search Modes:** * * 1. **Text Query** - Provide `query` string, server generates embedding * - Query text is embedded using the collection's embedding model * - Embeddings are cached for repeated queries * * 2. **Vector Query** - Provide pre-computed `vector` array * - Skip embedding generation (faster) * - Useful when you've already embedded the query elsewhere * - Vector dimension must match collection (e.g., 1024 for Titan v2) * * 3. **Metadata List** - Set `listByMetadata: true` with `filter` * - Skip semantic search entirely * - Return all documents matching the filter * - Supports cursor-based pagination for large datasets * - Results ordered by sortBy/sortOrder (default: created_at DESC) * * **Filtering:** * - `filter.exact`: Exact match on metadata fields (AND logic) * - `filter.contains`: Array contains filter for tags (ANY match) * - Filters can be combined with semantic search or used alone with listByMetadata * * **Pagination (listByMetadata mode only):** * - Use `cursor` from previous response's `nextCursor` to get next page * - Uses keyset pagination for efficient traversal of large datasets * - Control sort with `sortBy` and `sortOrder` * * **Use Cases:** * - Find relevant documentation for user questions * - Power RAG (Retrieval Augmented Generation) in AI assistants * - Semantic search across knowledge bases * - 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 /api/v3/organizations/{organisation}/ai/files: get: description: Lists files stored in S3 for this organization with optional metadata filtering and pagination. operationId: listFiles parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: JSON-encoded metadata filter. Supports exact match and array contains filters. explode: true in: query name: filter required: false schema: example: "{}" type: string style: form - description: Maximum files to return explode: true in: query name: limit required: false schema: default: 50 maximum: 200 type: integer style: form - description: Pagination cursor from previous response explode: true in: query name: cursor required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listFiles_200_response' description: List of files "400": description: Invalid filter parameter "403": description: Access denied "500": description: Failed to list files summary: List Files tags: - AI File Storage post: description: |- Uploads a file to S3 storage for later retrieval. * * **Two Upload Modes:** * * 1. **Direct Upload (≤7MB):** Send base64-encoded content in request body. * * 2. **Presigned URL Upload (any size):** Set `requestUploadUrl: true` to get a presigned S3 PUT URL, then upload directly to S3. * * **Supported Content Types:** * - Images: image/png, image/jpeg, image/gif, image/webp, image/svg+xml * - Documents: application/pdf, text/plain, text/markdown, text/html * - Code: text/javascript, application/json, text/css, text/yaml * - Archives: application/zip, application/gzip * - Video: video/mp4, video/webm (use presigned URL for large files) * * **Metadata:** * Attach any custom metadata for filtering. `artifactType` is auto-populated from contentType if not provided. operationId: uploadFile 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/uploadFile_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/uploadFile_201_response' description: File uploaded or presigned URL generated "400": description: Invalid request parameters "403": description: Access denied "413": description: File too large (use requestUploadUrl for large files) "500": description: Failed to upload file summary: Upload File to S3 tags: - AI File Storage /api/v3/organizations/{organisation}/ai/files/{fileId}: delete: description: Deletes a file from S3 storage. operationId: deleteFile parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The file ID explode: false in: path name: fileId required: true schema: format: uuid type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteFile_200_response' description: File deleted successfully "403": description: Access denied "404": description: File not found "500": description: Failed to delete file summary: Delete File tags: - AI File Storage get: description: Retrieves file metadata and a presigned download URL (valid for 1 hour). operationId: getFile parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The file ID explode: false in: path name: fileId required: true schema: format: uuid type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getFile_200_response' description: File metadata and download URL "403": description: Access denied "404": description: File not found "500": description: Failed to get file summary: Get File tags: - AI File Storage /api/v3/organizations/{organisation}/ai/orchestrations: get: description: |- List durable orchestrations for an organization with optional filtering. * * **Note:** This is different from `/tools/orchestrations` which handles async tool execution * polling. These durable orchestrations are for long-running batch processing loops. * * **Filter Options:** * - `status`: Filter by orchestration status * - `limit`: Max results (default 20, max 100) * - `cursor`: Pagination cursor operationId: listOrchestrations parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Filter by orchestration status explode: true in: query name: status required: false schema: enum: - pending - running - paused - completed - failed - cancelled type: string style: form - description: Maximum number of results explode: true in: query name: limit required: false schema: default: 20 maximum: 100 minimum: 1 type: integer style: form - description: Pagination cursor from previous response explode: true in: query name: cursor required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listOrchestrations_200_response' description: List of orchestrations "403": description: Access denied "500": description: Failed to list orchestrations summary: List Durable Orchestrations tags: - AI Orchestrations post: description: |- Create a new durable orchestration for batch processing. * * **Input Sources:** * - `static`: Process a fixed list of items * - `task_query`: Process tasks matching a query * - `generator`: AI generates items from a prompt * * **Stop Conditions:** * - `all_complete`: Stop when all items processed * - `max_iterations`: Stop after N iterations * - `condition`: AI evaluates a prompt to decide * - `manual`: Run until manually stopped * * **Auto-start:** * By default, the orchestration starts immediately. Set `autoStart: false` to create in pending state. operationId: createOrchestration parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/createOrchestration_request' required: true responses: "201": content: application/json: schema: type: object description: Orchestration created "400": description: Invalid request "403": description: Access denied "500": description: Failed to create orchestration summary: Create Durable Orchestration tags: - AI Orchestrations /api/v3/organizations/{organisation}/ai/orchestrations/{orchestrationId}: delete: description: "Delete an orchestration. Can only delete orchestrations in completed,\ \ failed, or cancelled status." operationId: deleteOrchestration parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier explode: false in: path name: orchestrationId required: true schema: type: string style: simple responses: "204": description: Orchestration deleted "400": description: Cannot delete active orchestration "403": description: Access denied "404": description: Orchestration not found "500": description: Failed to delete orchestration summary: Delete Durable Orchestration tags: - AI Orchestrations get: description: |- Get orchestration details including status and progress. * * **Progress Tracking:** * - `total`: Total items to process * - `completed`: Successfully processed * - `failed`: Failed processing * - `pending`: Awaiting processing operationId: getOrchestration parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier example: orch_1704067200_abc123xyz explode: false in: path name: orchestrationId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Orchestration details "403": description: Access denied "404": description: Orchestration not found "500": description: Failed to get orchestration summary: Get Durable Orchestration tags: - AI Orchestrations /api/v3/organizations/{organisation}/ai/orchestrations/{orchestrationId}/start: post: description: "Start a pending orchestration. Only works on orchestrations created\ \ with `autoStart: false`." operationId: startOrchestration parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier explode: false in: path name: orchestrationId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Orchestration started "400": description: Orchestration not in pending state "403": description: Access denied "404": description: Orchestration not found "500": description: Failed to start orchestration summary: Start Durable Orchestration tags: - AI Orchestrations /api/v3/organizations/{organisation}/ai/orchestrations/{orchestrationId}/pause: post: description: "Pause a running orchestration. The current batch will complete,\ \ but no new batches will start. Can be resumed later." operationId: pauseOrchestration parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier explode: false in: path name: orchestrationId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Orchestration paused "400": description: Orchestration not running "403": description: Access denied "404": description: Orchestration not found "500": description: Failed to pause orchestration summary: Pause Durable Orchestration tags: - AI Orchestrations /api/v3/organizations/{organisation}/ai/orchestrations/{orchestrationId}/resume: post: description: Resume a paused orchestration. Processing continues from where it left off. operationId: resumeOrchestration parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier explode: false in: path name: orchestrationId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Orchestration resumed "400": description: Orchestration not paused "403": description: Access denied "404": description: Orchestration not found "500": description: Failed to resume orchestration summary: Resume Durable Orchestration tags: - AI Orchestrations /api/v3/organizations/{organisation}/ai/orchestrations/{orchestrationId}/cancel: post: description: "Cancel an orchestration permanently. Cannot be resumed. Any in-progress\ \ items will complete, but no new processing starts." operationId: cancelOrchestration parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier explode: false in: path name: orchestrationId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Orchestration cancelled "400": description: Orchestration already completed/cancelled "403": description: Access denied "404": description: Orchestration not found "500": description: Failed to cancel orchestration summary: Cancel Durable Orchestration tags: - AI Orchestrations /api/v3/organizations/{organisation}/ai/orchestrations/{orchestrationId}/batches: get: description: Get history of batches processed by this orchestration. Returns paginated batch records with status and item counts. operationId: listOrchestrationBatches parameters: - description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple - description: Orchestration identifier explode: false in: path name: orchestrationId required: true schema: type: string style: simple - description: Maximum number of batches to return explode: true in: query name: limit required: false schema: default: 20 maximum: 100 minimum: 1 type: integer style: form - description: Pagination cursor from previous response explode: true in: query name: cursor required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listOrchestrationBatches_200_response' description: Batch history "403": description: Access denied "404": description: Orchestration not found "500": description: Failed to list orchestration batches summary: List Orchestration Batches tags: - AI Orchestrations /api/v3/organizations/{organisation}/ai/slack-bots: get: description: Lists all Slack bots configured for the organization. Each bot is backed by an AI agent and can be connected to a Slack workspace. Agent configuration fields are flattened onto each bot object. operationId: listSlackBots 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/listSlackBots_200_response' description: Slack bots retrieved successfully "403": description: Access denied "500": description: Failed to retrieve Slack bots summary: List Slack Bots tags: - AI Slack Bots post: description: |- Creates a new Slack bot with inline AI agent configuration. A backing agent is created automatically — callers do not need to manage agents separately. * * **Setup Types:** * - `quant`: Quant-managed Slack app — uses shared OAuth credentials * - `byo`: Bring Your Own — customer provides their own Slack app credentials operationId: createSlackBot 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/createSlackBot_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/createSlackBot_201_response' description: Slack bot created successfully "400": description: Invalid request parameters "403": description: Access denied "500": description: Failed to create Slack bot summary: Create Slack Bot tags: - AI Slack Bots /api/v3/organizations/{organisation}/ai/slack-bots/{botId}: delete: description: "Permanently deletes a Slack bot, disconnects it from the workspace,\ \ and deletes its backing AI agent." operationId: deleteSlackBot parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The Slack bot ID explode: false in: path name: botId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteSlackBot_200_response' description: Slack bot deleted successfully "403": description: Access denied "404": description: Slack bot not found "500": description: Failed to delete Slack bot summary: Delete Slack Bot tags: - AI Slack Bots get: description: "Retrieves details for a specific Slack bot including its configuration,\ \ connection status, and flattened agent configuration." operationId: getSlackBot parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The Slack bot ID explode: false in: path name: botId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getSlackBot_200_response' description: Slack bot details retrieved successfully "403": description: Access denied "404": description: Slack bot not found "500": description: Failed to retrieve Slack bot summary: Get Slack Bot tags: - AI Slack Bots put: description: Updates a Slack bot's configuration and/or its backing agent. Only provided fields are updated. operationId: updateSlackBot parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The Slack bot ID explode: false in: path name: botId required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateSlackBot_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/createSlackBot_201_response' description: Slack bot updated successfully "400": description: Invalid request parameters "403": description: Access denied "404": description: Slack bot not found "500": description: Failed to update Slack bot summary: Update Slack Bot tags: - AI Slack Bots /api/v3/organizations/{organisation}/ai/slack-bots/{botId}/workspace/users: get: description: Searches users in the Slack workspace connected to this bot. Requires the bot to be connected via OAuth. operationId: searchSlackWorkspaceUsers parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The Slack bot ID explode: false in: path name: botId required: true schema: type: string style: simple - description: Search query to filter users by name explode: true in: query name: q required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/searchSlackWorkspaceUsers_200_response' description: Workspace users retrieved successfully "403": description: Access denied "404": description: Slack bot not found or not connected "500": description: Failed to search users summary: Search Slack Workspace Users tags: - AI Slack Bots /api/v3/organizations/{organisation}/ai/slack-bots/{botId}/workspace/channels: get: description: Searches channels in the Slack workspace connected to this bot. Requires the bot to be connected via OAuth. operationId: searchSlackWorkspaceChannels parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The Slack bot ID explode: false in: path name: botId required: true schema: type: string style: simple - description: Search query to filter channels by name explode: true in: query name: q required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/searchSlackWorkspaceChannels_200_response' description: Workspace channels retrieved successfully "403": description: Access denied "404": description: Slack bot not found or not connected "500": description: Failed to search channels summary: Search Slack Workspace Channels tags: - AI Slack Bots /api/v3/organizations/{organisation}/ai/governance: get: operationId: getGovernanceConfig 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/getGovernanceConfig_200_response' description: AI governance configuration "500": description: Failed to retrieve governance configuration summary: Get AI governance configuration for an organisation tags: - AI Governance put: operationId: updateGovernanceConfig 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/updateGovernanceConfig_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/updateGovernanceConfig_200_response' description: Governance configuration updated successfully "422": description: Validation error "500": description: Failed to update governance configuration summary: Update AI governance configuration for an organisation tags: - AI Governance /api/v3/organizations/{organisation}/ai/governance/spend: get: operationId: getGovernanceSpend 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/getGovernanceSpend_200_response' description: AI spend summary "500": description: Failed to retrieve spend summary summary: Get AI spend summary for an organisation tags: - AI Governance /api/v3/organizations/{organisation}/ai/filter-policies: get: operationId: listFilterPolicies parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: List of filter policies "500": description: Failed to retrieve filter policies summary: List AI filter policies for an organisation tags: - AI Filter Policies post: operationId: createFilterPolicy 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/createFilterPolicy_request' required: true responses: "201": content: application/json: schema: type: object description: Filter policy created successfully "422": description: Validation error "500": description: Failed to create filter policy summary: Create an AI filter policy for an organisation tags: - AI Filter Policies /api/v3/organizations/{organisation}/ai/filter-policies/{policyId}: delete: operationId: deleteFilterPolicy parameters: - explode: false in: path name: organisation required: true schema: type: string style: simple - explode: false in: path name: policyId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Filter policy deleted successfully "500": description: Failed to delete filter policy summary: Delete a specific AI filter policy tags: - AI Filter Policies get: operationId: getFilterPolicy parameters: - explode: false in: path name: organisation required: true schema: type: string style: simple - explode: false in: path name: policyId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Filter policy details "404": description: Filter policy not found summary: Get a specific AI filter policy tags: - AI Filter Policies put: operationId: updateFilterPolicy parameters: - explode: false in: path name: organisation required: true schema: type: string style: simple - explode: false in: path name: policyId required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateFilterPolicy_request' required: true responses: "200": content: application/json: schema: type: object description: Filter policy updated successfully "422": description: Validation error "500": description: Failed to update filter policy summary: Update a specific AI filter policy tags: - AI Filter Policies /api/v3/organizations/{organisation}/ai/filter-policies/{policyId}/enable: put: operationId: enableFilterPolicy parameters: - explode: false in: path name: organisation required: true schema: type: string style: simple - explode: false in: path name: policyId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Filter policy enabled successfully "500": description: Failed to enable filter policy summary: Enable a specific AI filter policy tags: - AI Filter Policies /api/v3/organizations/{organisation}/ai/filter-policies/{policyId}/disable: put: operationId: disableFilterPolicy parameters: - explode: false in: path name: organisation required: true schema: type: string style: simple - explode: false in: path name: policyId required: true schema: type: string style: simple responses: "200": content: application/json: schema: type: object description: Filter policy disabled successfully "500": description: Failed to disable filter policy summary: Disable a specific AI filter policy tags: - AI Filter Policies /api/v3/organizations/{organisation}/ai/usage/me: get: operationId: getMyUsage 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/getMyUsage_200_response' description: User AI usage summary "401": description: Cannot determine caller identity "500": description: Failed to retrieve usage data summary: Get AI usage summary for the authenticated user tags: - AI Usage /api/v3/organizations/{organisation}/applications: get: operationId: listApplications parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/Application' type: array description: A list of applications summary: Get all applications for an organisation tags: - Applications post: operationId: createApplication 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/CreateApplicationRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Application' description: The created application "400": description: The request is invalid "403": content: application/json: schema: $ref: '#/components/schemas/createApplication_403_response' description: Application limit reached - organisation has reached the maximum number of allowed applications summary: Create a new application tags: - Applications /api/v3/organizations/{organisation}/applications/{application}: delete: operationId: deleteApplication parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID explode: false in: path name: application required: true schema: type: string style: simple responses: "204": description: The application deleted "404": description: The application not found summary: Delete an application tags: - Applications get: operationId: getApplication parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID explode: false in: path name: application required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Application' description: The application "404": description: The application not found summary: Get a single application tags: - Applications /api/v3/organizations/{organisation}/applications/ecr-login: get: operationId: getEcrLoginCredentials 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/getEcrLoginCredentials_200_response' description: The ECR login credentials summary: Get ECR login credentials tags: - Applications /api/v3/organizations/{organisation}/environments/{environment}/commands: get: operationId: listCommands parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Command' description: The commands summary: Get all commands for an environment tags: - Commands post: operationId: createCommand parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/createCommand_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Command' description: The command summary: Create a command for an environment tags: - Commands /api/v3/organizations/{organisation}/environments/{environment}/commands/{command}: get: operationId: getCommand parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The command ID example: test-cmd explode: false in: path name: command required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Command' description: The command summary: Get a command tags: - Commands /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/compose: get: operationId: getEnvironmentCompose parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Compose' description: The compose file "404": description: The compose file not found summary: Get the compose file for an environment tags: - Compose patch: description: "Partially updates top-level fields of the environment's compose\ \ definition, such as architecture, task-level CPU/Memory, or min/max scaling\ \ capacity. Only fields included in the request body are modified. The 'containers'\ \ array, if provided, REPLACES the existing containers array; if omitted,\ \ the existing containers are NOT modified by this PATCH operation. (For modifying\ \ individual containers, use PATCH /containers/{containerName}). This triggers\ \ a validation, registers a new task definition, and updates the service." operationId: patchEnvironmentCompose parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/patchEnvironmentCompose_request' description: Partial compose definition updates. All fields are optional. required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/patchEnvironmentCompose_202_response' description: "Request accepted, compose definition partial update is processing.\ \ Returns the full updated compose definition." "400": content: application/json: schema: $ref: '#/components/schemas/patchEnvironmentCompose_400_response' description: Invalid compose definition or validation failed. "404": description: Application or environment not found summary: Partially Update Environment Compose Definition tags: - Compose /api/v3/organizations/{organisation}/compose/validate: post: description: "Accepts a docker-compose.yml file content, translates it into\ \ the internal compose definition format, and validates it. Quant Cloud provides\ \ comprehensive support for standard Docker Compose features including commands,\ \ entrypoints, health checks, dependencies, volume mounts, resource limits,\ \ and more. For detailed documentation on supported features and examples,\ \ see: https://docs.quantcdn.io/introduction-to-quant-cloud/importing-docker-compose/.\ \ Supports image tag suffixing via the imageSuffix query parameter or by sending\ \ a JSON wrapper with yamlContent and imageSuffix fields. When provided, internal\ \ image tags are transformed to {containerName}-{suffix} format (e.g., 'nginx-feature-xyz')." operationId: validateCompose parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: "Optional. Image tag suffix to apply during translation. Transforms\ \ internal image tags to consistent '{containerName}-{suffix}' format (e.g.,\ \ 'nginx-pr-456'). External images are left unchanged. Useful for feature\ \ branch deployments." example: pr-456 explode: true in: query name: imageSuffix required: false schema: pattern: "^[a-z0-9]([a-z0-9-]*[a-z0-9])?$" type: string style: form requestBody: content: application/json: schema: $ref: '#/components/schemas/validateCompose_request' description: The docker-compose.yml file content. Can be sent as raw YAML string or as a JSON wrapper containing both yamlContent (string) and imageSuffix (string) fields. Query parameter imageSuffix takes precedence if both are provided. required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/validateCompose_200_response' description: Validation successful. Body contains the translated compose definition and any warnings. "422": content: application/json: schema: $ref: '#/components/schemas/validateCompose_422_response' description: Invalid YAML input or validation failed summary: Validate a compose file tags: - Compose /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/containers: get: operationId: listContainers parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": description: The containers in the environment "404": description: The environment not found summary: Get the containers in an environment tags: - Containers /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/containers/{container}: put: operationId: updateContainer parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The container ID example: test-container explode: false in: path name: container required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/Container' required: true responses: "200": description: The updated container "404": description: The container not found summary: Update a container in an environment tags: - Containers /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/cron: get: operationId: listCronJobs parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Cron' description: The cron jobs "404": description: The environment not found summary: Get all cron jobs for an environment tags: - Cron post: operationId: createCronJob parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/createCronJob_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Cron' description: The created cron job "400": description: The request is invalid "422": content: application/json: schema: $ref: '#/components/schemas/patchEnvironmentCompose_400_response' description: The request is invalid summary: Create a new cron job tags: - Cron /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/cron/{cron}: delete: operationId: deleteCronJob parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The cron job ID explode: false in: path name: cron required: true schema: type: string style: simple responses: "204": description: The cron job deleted summary: Delete a cron job tags: - Cron get: operationId: getCronJob parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The cron job ID explode: false in: path name: cron required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Cron' description: The cron job "404": description: The cron job not found summary: Get a cron job tags: - Cron patch: operationId: updateCronJob parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The cron job ID explode: false in: path name: cron required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateCronJob_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Cron' description: The updated cron job "404": description: The cron job not found summary: Update a cron job tags: - Cron /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/cron/{cron}/runs: get: operationId: listCronJobRuns parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The cron job ID example: test-cron explode: false in: path name: cron required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/CronRun' type: array description: The runs summary: Get all runs for a cron job tags: - Cron /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/cron/{cron}/runs/{run}: get: operationId: getCronRun parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The cron job ID example: test-cron explode: false in: path name: cron required: true schema: type: string style: simple - description: The cron run ID explode: false in: path name: run required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/CronRun' description: The cron run summary: Get a cron run tags: - Cron /api/v3/organizations/{organisation}/applications/{application}/environments: get: operationId: listEnvironments parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/EnvironmentSummary' type: array description: List of environments with summary information including deployment status "404": description: The organisation or application not found summary: Get all environments for an application tags: - Environments post: operationId: createEnvironment parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/createEnvironment_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/EnvironmentResponse' description: The environment created "400": description: The environment data is invalid "403": content: application/json: schema: $ref: '#/components/schemas/createEnvironment_403_response' description: Environment limit reached - application has reached the maximum number of allowed environments summary: Create a new environment tags: - Environments /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}: delete: operationId: deleteEnvironment parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "204": description: The environment deleted "404": description: The environment not found summary: Delete an environment tags: - Environments get: operationId: getEnvironment parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/EnvironmentResponse' description: The environment with runtime details "404": description: The environment not found summary: Get a single environment tags: - Environments put: description: "Replaces the entire task definition for the environment based\ \ on the provided multi-container compose definition. This will create a new\ \ task definition revision and update the ECS service, triggering a redeployment.\ \ Optionally accepts minCapacity and maxCapacity at the root level for convenience." operationId: updateEnvironment parameters: - description: The organisation ID explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID explode: false in: path name: environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateEnvironment_request' required: true responses: "202": description: "Request accepted, compose definition update is processing." "400": content: application/json: schema: $ref: '#/components/schemas/patchEnvironmentCompose_400_response' description: Invalid compose definition or validation failed. "404": description: Application or environment not found summary: Update Environment Compose Definition tags: - Environments /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/state: put: operationId: updateEnvironmentState parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateEnvironmentState_request' required: true responses: "204": description: The environment state updated "400": description: The environment data is invalid summary: Update the state of an environment tags: - Environments /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/logs: get: description: "Retrieves logs from CloudWatch for the specified environment with\ \ optional filtering by time range, container, and pattern matching. Supports\ \ pagination via nextToken." operationId: getEnvironmentLogs parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: Start time for log retrieval (ISO 8601 format or Unix timestamp) explode: true in: query name: startTime required: false schema: type: string style: form - description: End time for log retrieval (ISO 8601 format or Unix timestamp) explode: true in: query name: endTime required: false schema: type: string style: form - description: Filter logs by specific container name explode: true in: query name: containerName required: false schema: type: string style: form - description: CloudWatch Logs filter pattern for searching log content explode: true in: query name: filterPattern required: false schema: type: string style: form - description: Maximum number of log entries to return per page explode: true in: query name: limit required: false schema: maximum: 10000 minimum: 1 type: integer style: form - description: Pagination token from previous response for retrieving next page of results explode: true in: query name: nextToken required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/getEnvironmentLogs_200_response' description: The logs "404": description: The environment not found "422": description: Validation error summary: Get the logs for an environment tags: - Environments /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/metrics: get: description: "Retrieves CloudWatch metrics for the specified environment with\ \ optional filtering by time range, container, and metric configuration." operationId: getEnvironmentMetrics parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: Start time for metrics retrieval (Unix timestamp in milliseconds) explode: true in: query name: startTime required: false schema: type: integer style: form - description: End time for metrics retrieval (Unix timestamp in milliseconds) explode: true in: query name: endTime required: false schema: type: integer style: form - description: "Period in seconds for metric aggregation (e.g., 60 for 1 minute,\ \ 300 for 5 minutes)" explode: true in: query name: period required: false schema: type: integer style: form - description: "Comma-separated list of CloudWatch statistics (e.g., Average,\ \ Maximum, Minimum, Sum, SampleCount)" explode: true in: query name: statistics required: false schema: type: string style: form - description: Filter metrics by specific container name explode: true in: query name: containerName required: false schema: type: string style: form responses: "200": content: application/json: schema: description: CloudWatch metrics data type: object description: The metrics "404": description: The environment not found "422": description: Validation error summary: Get the metrics for an environment tags: - Environments /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/sync/{type}: get: operationId: listSyncOperations parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The sync type explode: false in: path name: type required: true schema: enum: - database - filesystem type: string style: simple responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/SyncOperation' type: array description: The sync operations summary: List the sync operations for an environment tags: - Environments post: operationId: syncToEnvironment parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The sync type explode: false in: path name: type required: true schema: enum: - database - filesystem type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/syncToEnvironment_request' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SyncOperation' description: The sync operation details summary: Perform a sync operation from a source environment to the current environment tags: - Environments /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/backups/{type}: get: description: "Retrieves a list of backups (database or filesystem) for the environment\ \ with status, size, and metadata. Supports filtering and ordering via query\ \ parameters." operationId: listBackups parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The backup type explode: false in: path name: type required: true schema: enum: - database - filesystem type: string style: simple - description: "Sort order for backups by creation date (asc = oldest first,\ \ desc = newest first)" explode: true in: query name: order required: false schema: default: desc enum: - asc - desc type: string style: form - description: Maximum number of backups to return (max 100) explode: true in: query name: limit required: false schema: default: 50 maximum: 100 minimum: 1 type: integer style: form - description: "Only return backups created before this ISO 8601 timestamp (e.g.,\ \ 2025-01-01T00:00:00Z)" explode: true in: query name: createdBefore required: false schema: format: date-time type: string style: form - description: "Only return backups created after this ISO 8601 timestamp (e.g.,\ \ 2024-12-01T00:00:00Z)" explode: true in: query name: createdAfter required: false schema: format: date-time type: string style: form - description: Filter backups by status explode: true in: query name: status required: false schema: enum: - completed - failed - running type: string style: form - description: Token for retrieving the next page of results explode: true in: query name: nextToken required: false schema: type: string style: form responses: "200": content: application/json: schema: $ref: '#/components/schemas/listBackups_200_response' description: List of backups "422": content: application/json: schema: $ref: '#/components/schemas/listBackups_422_response' description: Invalid backup type summary: List backups for an environment tags: - Backup Management post: operationId: createBackup parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The backup type explode: false in: path name: type required: true schema: enum: - database - filesystem type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/createBackup_request' required: false responses: "202": content: application/json: schema: $ref: '#/components/schemas/createBackup_202_response' description: Backup operation initiated summary: Create a backup for an environment tags: - Backup Management /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/backups/{type}/{backupId}: delete: operationId: deleteBackup parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The backup type explode: false in: path name: type required: true schema: enum: - database - filesystem type: string style: simple - description: The backup ID explode: false in: path name: backupId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/deleteBackup_200_response' description: Backup deleted successfully summary: Delete a backup tags: - Backup Management /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/backups/{type}/{backupId}/download: get: operationId: downloadBackup parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The backup type explode: false in: path name: type required: true schema: enum: - database - filesystem type: string style: simple - description: The backup ID explode: false in: path name: backupId required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/downloadBackup_200_response' description: Download URL generated successfully summary: Generate a download URL for a backup tags: - Backup Management /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/scaling-policies: get: operationId: getScalingPolicies parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": description: The scaling policy for the environment summary: Get the scaling policies for an environment tags: - ScalingPolicy put: operationId: updateScalingPolicy parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/ScalingPolicy' required: true responses: "200": description: The scaling policy for the environment summary: Update the scaling policy for an environment tags: - ScalingPolicy /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/scaling-policies/{policyName}: delete: operationId: deleteScalingPolicy parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The policy name explode: false in: path name: policyName required: true schema: type: string style: simple responses: "204": description: The scaling policy for the environment summary: Delete the scaling policy for an environment tags: - ScalingPolicy /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/ssh-access: get: operationId: getSshAccessCredentials parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/getSshAccessCredentials_200_response' description: SSH access credentials "403": description: Insufficient permissions "404": description: Environment not found "500": description: Failed to generate SSH access credentials summary: Get SSH access credentials for an environment tags: - SSH Access /api/v3/organizations/{api_organisation}/applications/{api_application}/environments/{api_environment}/variables: get: operationId: listEnvironmentVariables parameters: - description: The organisation ID example: test-org explode: false in: path name: api_organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: api_application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: api_environment required: true schema: type: string style: simple responses: "200": description: A list of variables summary: Get all variables for an environment tags: - Variables put: operationId: bulkSetEnvironmentVariables parameters: - description: The organisation ID example: test-org explode: false in: path name: api_organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: api_application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: api_environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/bulkSetEnvironmentVariables_request' required: true responses: "200": description: Environment variables set/replaced successfully summary: Bulk set/replace environment variables tags: - Variables /api/v3/organizations/{api_organisation}/applications/{api_application}/environments/{api_environment}/variables/{api_variable}: delete: operationId: deleteEnvironmentVariable parameters: - description: The organisation ID explode: false in: path name: api_organisation required: true schema: type: string style: simple - description: The application ID explode: false in: path name: api_application required: true schema: type: string style: simple - description: The environment ID explode: false in: path name: api_environment required: true schema: type: string style: simple - description: The variable key explode: false in: path name: api_variable required: true schema: type: string style: simple responses: "204": description: The variable deleted "404": description: The variable not found summary: Delete a variable tags: - Variables put: operationId: updateEnvironmentVariable parameters: - description: The organisation ID example: test-org explode: false in: path name: api_organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: api_application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: api_environment required: true schema: type: string style: simple - description: The variable key explode: false in: path name: api_variable required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/updateEnvironmentVariable_request' required: true responses: "200": description: The variable updated "404": description: The variable not found summary: Update a variable tags: - Variables /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/volumes: get: operationId: listVolumes parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Volume' description: The volumes "404": description: The environment not found summary: Get all volumes for an environment tags: - Volumes post: operationId: createVolume parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/createVolume_request' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Volume' description: The volume created "404": description: The environment not found summary: Create a new volume tags: - Volumes /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/volumes/{volume}: delete: operationId: deleteVolume parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The volume ID explode: false in: path name: volume required: true schema: type: string style: simple responses: "204": description: The volume deleted "404": description: The environment not found summary: Delete a volume tags: - Volumes get: operationId: getVolume parameters: - description: The organisation ID example: test-org explode: false in: path name: organisation required: true schema: type: string style: simple - description: The application ID example: test-app explode: false in: path name: application required: true schema: type: string style: simple - description: The environment ID example: test-env explode: false in: path name: environment required: true schema: type: string style: simple - description: The volume ID explode: false in: path name: volume required: true schema: type: string style: simple responses: "200": content: application/json: schema: $ref: '#/components/schemas/Volume' description: The volume "404": description: The environment not found summary: Get a volume tags: - Volumes components: parameters: organisation: description: The organisation machine name explode: false in: path name: organisation required: true schema: type: string style: simple schemas: V2Error: example: message: The requested resource was not found error: true properties: message: description: Error message example: The requested resource was not found type: string error: description: Error flag example: true type: boolean required: - error - message type: object CreateApplicationRequest: example: composeDefinition: spotConfiguration: strategy: spot-only taskMemory: 2 maxCapacity: 7 containers: - originProtectionConfig: ipAllow: - ipAllow - ipAllow enabled: true memory: 6 dependsOn: - condition: START containerName: containerName - condition: START containerName: containerName workingDirectory: workingDirectory exposedPorts: - 5 - 5 cpu: 0 imageReference: identifier: identifier type: internal secrets: - name: name valueFrom: valueFrom - name: name valueFrom: valueFrom memoryReservation: 1 command: - command - command environment: - name: name value: value - name: name value: value readonlyRootFilesystem: false originProtection: false healthCheck: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 name: name mountPoints: - readOnly: false containerPath: containerPath sourceVolume: sourceVolume - readOnly: false containerPath: containerPath sourceVolume: sourceVolume entryPoint: - entryPoint - entryPoint user: user essential: true - originProtectionConfig: ipAllow: - ipAllow - ipAllow enabled: true memory: 6 dependsOn: - condition: START containerName: containerName - condition: START containerName: containerName workingDirectory: workingDirectory exposedPorts: - 5 - 5 cpu: 0 imageReference: identifier: identifier type: internal secrets: - name: name valueFrom: valueFrom - name: name valueFrom: valueFrom memoryReservation: 1 command: - command - command environment: - name: name value: value - name: name value: value readonlyRootFilesystem: false originProtection: false healthCheck: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 name: name mountPoints: - readOnly: false containerPath: containerPath sourceVolume: sourceVolume - readOnly: false containerPath: containerPath sourceVolume: sourceVolume entryPoint: - entryPoint - entryPoint user: user essential: true minCapacity: 4 taskCpu: 3 enableCrossAppNetworking: false architecture: architecture enableCrossEnvNetworking: false database: multiAz: false engine: mysql instanceClass: db.t4g.micro storageGb: 20 environment: - name: name value: value - name: name value: value appName: my-app maxCapacity: 6 minCapacity: 0 filesystem: mountPath: /data/shared required: true properties: appName: description: Application name example: my-app type: string composeDefinition: $ref: '#/components/schemas/Compose' minCapacity: default: 1 description: Minimum task count for auto-scaling nullable: true type: integer maxCapacity: default: 1 description: Maximum task count for auto-scaling nullable: true type: integer database: $ref: '#/components/schemas/CreateApplicationRequest_database' filesystem: $ref: '#/components/schemas/CreateApplicationRequest_filesystem' environment: description: Optional. Initial environment variables for the production environment. items: $ref: '#/components/schemas/CreateApplicationRequest_environment_inner' nullable: true type: array required: - appName - composeDefinition type: object V1SearchHit: description: Generic search hit; fields vary by index properties: title: description: The controller for managing Search integration. type: string url: type: string summary: type: string content: type: string image: type: string objectID: type: string type: object V1SearchItemsResponse: properties: hits: items: $ref: '#/components/schemas/V1SearchHit' type: array nbPages: type: integer type: object V1SearchItemResponse: description: Single search item response; fields vary by index type: object V1SearchMutationResponse: properties: success: type: boolean message: type: string result: type: object required: - message - success type: object V1TestExtractorsResponse: additionalProperties: type: object description: Extractor evaluation results keyed by configured keys type: object Application: example: appName: appName deploymentInformation: - createdAt: 2000-01-23T04:56:07.000+00:00 taskDefinitionArn: taskDefinitionArn deploymentId: deploymentId imageTag: imageTag status: status - createdAt: 2000-01-23T04:56:07.000+00:00 taskDefinitionArn: taskDefinitionArn deploymentId: deploymentId imageTag: imageTag status: status environmentNames: - environmentNames - environmentNames desiredCount: 1 organisation: organisation maxCapacity: 1 imageReference: identifier: identifier type: internal filesystem: mountPath: mountPath filesystemId: filesystemId containerNames: - containerNames - containerNames database: rdsInstanceEngine: mysql rdsInstanceIdentifier: rdsInstanceIdentifier rdsInstanceStatus: rdsInstanceStatus rdsInstanceEndpoint: rdsInstanceEndpoint composeDefinition: spotConfiguration: strategy: spot-only taskMemory: 2 maxCapacity: 7 containers: - originProtectionConfig: ipAllow: - ipAllow - ipAllow enabled: true memory: 6 dependsOn: - condition: START containerName: containerName - condition: START containerName: containerName workingDirectory: workingDirectory exposedPorts: - 5 - 5 cpu: 0 imageReference: identifier: identifier type: internal secrets: - name: name valueFrom: valueFrom - name: name valueFrom: valueFrom memoryReservation: 1 command: - command - command environment: - name: name value: value - name: name value: value readonlyRootFilesystem: false originProtection: false healthCheck: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 name: name mountPoints: - readOnly: false containerPath: containerPath sourceVolume: sourceVolume - readOnly: false containerPath: containerPath sourceVolume: sourceVolume entryPoint: - entryPoint - entryPoint user: user essential: true - originProtectionConfig: ipAllow: - ipAllow - ipAllow enabled: true memory: 6 dependsOn: - condition: START containerName: containerName - condition: START containerName: containerName workingDirectory: workingDirectory exposedPorts: - 5 - 5 cpu: 0 imageReference: identifier: identifier type: internal secrets: - name: name valueFrom: valueFrom - name: name valueFrom: valueFrom memoryReservation: 1 command: - command - command environment: - name: name value: value - name: name value: value readonlyRootFilesystem: false originProtection: false healthCheck: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 name: name mountPoints: - readOnly: false containerPath: containerPath sourceVolume: sourceVolume - readOnly: false containerPath: containerPath sourceVolume: sourceVolume entryPoint: - entryPoint - entryPoint user: user essential: true minCapacity: 4 taskCpu: 3 enableCrossAppNetworking: false architecture: architecture enableCrossEnvNetworking: false runningCount: 6 minCapacity: 1 status: status properties: appName: description: Application name type: string organisation: description: Organisation machine name type: string database: $ref: '#/components/schemas/Application_database' filesystem: $ref: '#/components/schemas/Application_filesystem' composeDefinition: $ref: '#/components/schemas/Compose' status: description: Application status nullable: true readOnly: true type: string deploymentInformation: description: Deployment history items: $ref: '#/components/schemas/Application_deploymentInformation_inner' nullable: true readOnly: true type: array imageReference: $ref: '#/components/schemas/Application_imageReference' containerNames: description: List of container names items: type: string nullable: true readOnly: true type: array minCapacity: description: Minimum task count for auto-scaling nullable: true type: integer maxCapacity: description: Maximum task count for auto-scaling nullable: true type: integer desiredCount: description: Desired task count nullable: true type: integer runningCount: description: Currently running task count nullable: true type: integer environmentNames: description: List of environment names (read-only) items: type: string nullable: true readOnly: true type: array required: - appName - organisation type: object Command: example: output: - output - output scheduleName: scheduleName targetContainerName: targetContainerName runType: runType exitCode: 0 startTime: startTime runId: runId endTime: endTime command: command status: status properties: runId: type: string runType: type: string command: type: string status: type: string startTime: type: string endTime: type: string exitCode: type: integer output: items: type: string type: array scheduleName: type: string targetContainerName: type: string type: object Compose: example: spotConfiguration: strategy: spot-only taskMemory: 2 maxCapacity: 7 containers: - originProtectionConfig: ipAllow: - ipAllow - ipAllow enabled: true memory: 6 dependsOn: - condition: START containerName: containerName - condition: START containerName: containerName workingDirectory: workingDirectory exposedPorts: - 5 - 5 cpu: 0 imageReference: identifier: identifier type: internal secrets: - name: name valueFrom: valueFrom - name: name valueFrom: valueFrom memoryReservation: 1 command: - command - command environment: - name: name value: value - name: name value: value readonlyRootFilesystem: false originProtection: false healthCheck: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 name: name mountPoints: - readOnly: false containerPath: containerPath sourceVolume: sourceVolume - readOnly: false containerPath: containerPath sourceVolume: sourceVolume entryPoint: - entryPoint - entryPoint user: user essential: true - originProtectionConfig: ipAllow: - ipAllow - ipAllow enabled: true memory: 6 dependsOn: - condition: START containerName: containerName - condition: START containerName: containerName workingDirectory: workingDirectory exposedPorts: - 5 - 5 cpu: 0 imageReference: identifier: identifier type: internal secrets: - name: name valueFrom: valueFrom - name: name valueFrom: valueFrom memoryReservation: 1 command: - command - command environment: - name: name value: value - name: name value: value readonlyRootFilesystem: false originProtection: false healthCheck: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 name: name mountPoints: - readOnly: false containerPath: containerPath sourceVolume: sourceVolume - readOnly: false containerPath: containerPath sourceVolume: sourceVolume entryPoint: - entryPoint - entryPoint user: user essential: true minCapacity: 4 taskCpu: 3 enableCrossAppNetworking: false architecture: architecture enableCrossEnvNetworking: false properties: containers: items: $ref: '#/components/schemas/Container' type: array architecture: description: CPU architecture (X86_64 or ARM64) nullable: false type: string taskCpu: description: "Task-level CPU units (e.g., 256, 512, 1024)" nullable: false type: integer taskMemory: description: Task-level memory in MB nullable: false type: integer minCapacity: description: Minimum number of instances nullable: false type: integer maxCapacity: description: Maximum number of instances nullable: false type: integer spotConfiguration: $ref: '#/components/schemas/SpotConfiguration' enableCrossEnvNetworking: default: false description: "Optional. Enable cross-environment networking within the same\ \ application. When false (default): Uses shared security group for complete\ \ isolation (most secure). When true: Uses app-specific security group\ \ to enable communication between environments of the same application\ \ (e.g., staging can connect to production database). Note: If enableCrossAppNetworking\ \ is true, this setting is overridden." nullable: true type: boolean enableCrossAppNetworking: default: false description: "Optional. Enable cross-application networking within the same\ \ organization. When false (default): Uses shared/app-specific security\ \ group based on enableCrossEnvNetworking. When true: Uses org-specific\ \ security group to enable container-to-container communication with ALL\ \ applications in the same organization via service discovery (microservices\ \ architecture). This setting takes priority over enableCrossEnvNetworking." nullable: true type: boolean type: object Container: example: originProtectionConfig: ipAllow: - ipAllow - ipAllow enabled: true memory: 6 dependsOn: - condition: START containerName: containerName - condition: START containerName: containerName workingDirectory: workingDirectory exposedPorts: - 5 - 5 cpu: 0 imageReference: identifier: identifier type: internal secrets: - name: name valueFrom: valueFrom - name: name valueFrom: valueFrom memoryReservation: 1 command: - command - command environment: - name: name value: value - name: name value: value readonlyRootFilesystem: false originProtection: false healthCheck: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 name: name mountPoints: - readOnly: false containerPath: containerPath sourceVolume: sourceVolume - readOnly: false containerPath: containerPath sourceVolume: sourceVolume entryPoint: - entryPoint - entryPoint user: user essential: true properties: name: description: Name of the container pattern: "^[a-zA-Z0-9_-]+$" type: string imageReference: $ref: '#/components/schemas/Container_imageReference' cpu: description: Container-level CPU units nullable: true type: integer memory: description: Container-level memory hard limit (MiB) nullable: true type: integer memoryReservation: description: Container-level memory soft limit (MiB) nullable: true type: integer exposedPorts: description: List of container ports to expose items: type: integer nullable: true type: array mountPoints: items: $ref: '#/components/schemas/Container_mountPoints_inner' nullable: true type: array environment: description: Environment variables specific to this container items: $ref: '#/components/schemas/Container_environment_inner' nullable: true type: array secrets: description: Secrets mapped to environment variables items: $ref: '#/components/schemas/Container_secrets_inner' nullable: true type: array healthCheck: $ref: '#/components/schemas/Container_healthCheck' dependsOn: description: Container startup dependencies items: $ref: '#/components/schemas/Container_dependsOn_inner' nullable: true type: array command: items: type: string nullable: true type: array entryPoint: items: type: string nullable: true type: array workingDirectory: nullable: true type: string essential: default: true nullable: true type: boolean readonlyRootFilesystem: default: false nullable: true type: boolean user: nullable: true type: string originProtection: default: false description: Enable origin protection for all exposed ports on this container. Use originProtectionConfig for advanced options like IP allow lists. nullable: true type: boolean originProtectionConfig: $ref: '#/components/schemas/Container_originProtectionConfig' required: - imageReference - name type: object Cron: example: targetContainerName: targetContainerName scheduleExpression: scheduleExpression isEnabled: true name: name description: description command: - command - command properties: name: type: string description: nullable: true type: string scheduleExpression: type: string command: items: type: string type: array targetContainerName: nullable: true type: string isEnabled: type: boolean type: object CronRun: example: output: - output - output scheduleName: scheduleName targetContainerName: targetContainerName runType: EXEC exitCode: 0 startTime: 2000-01-23T04:56:07.000+00:00 runId: runId endTime: 2000-01-23T04:56:07.000+00:00 command: command status: PENDING properties: runId: type: string runType: enum: - EXEC - CRON type: string command: nullable: true type: string status: enum: - PENDING - RUNNING - SUCCEEDED - FAILED - TIMED_OUT - UNKNOWN type: string startTime: format: date-time nullable: true type: string endTime: format: date-time nullable: true type: string exitCode: nullable: true type: integer output: items: type: string type: array scheduleName: nullable: true type: string targetContainerName: nullable: true type: string type: object Environment: description: Environment creation/update request schema properties: envName: type: string desiredCount: type: integer minCapacity: type: integer maxCapacity: type: integer cloneConfigurationFrom: type: string imageSuffix: description: Image tag suffix for cloning pattern: "^[a-z0-9]([a-z0-9-]*[a-z0-9])?$" type: string required: - envName type: object EnvironmentSummary: description: Environment summary returned in list responses example: deploymentStatus: COMPLETED envName: production desiredCount: 2 runningCount: 2 maxCapacity: 5 minCapacity: 1 status: ACTIVE properties: envName: description: Environment name example: production type: string status: description: Environment status example: ACTIVE type: string deploymentStatus: description: Current deployment status enum: - COMPLETED - IN_PROGRESS - FAILED example: COMPLETED type: string runningCount: description: Number of running tasks example: 2 type: integer desiredCount: description: Desired number of tasks example: 2 type: integer minCapacity: description: Minimum capacity for autoscaling example: 1 type: integer maxCapacity: description: Maximum capacity for autoscaling example: 5 type: integer type: object EnvironmentResponse: description: Environment response schema with runtime details example: cron: - targetContainerName: targetContainerName scheduleExpression: scheduleExpression isEnabled: true name: name description: description command: - command - command - targetContainerName: targetContainerName scheduleExpression: scheduleExpression isEnabled: true name: name description: description command: - command - command deploymentFailureReason: deploymentFailureReason subnet: "{}" publicIpAddress: 54.123.45.67 desiredCount: 2 vpc: "{}" volumes: - createdAt: createdAt accessPointArn: accessPointArn volumeName: volumeName accessPointId: accessPointId volumeId: volumeId description: description rootDirectory: rootDirectory environmentEfsId: environmentEfsId - createdAt: createdAt accessPointArn: accessPointArn volumeName: volumeName accessPointId: accessPointId volumeId: volumeId description: description rootDirectory: rootDirectory environmentEfsId: environmentEfsId maxCapacity: 5 securityGroup: "{}" containerNames: - containerNames - containerNames createdAt: 2000-01-23T04:56:07.000+00:00 deploymentStatus: COMPLETED envName: production service: "{}" loadBalancer: "{}" runningCount: 2 deploymentFailureType: deploymentFailureType minCapacity: 1 albRouting: "{}" taskDefinition: "{}" status: ACTIVE updatedAt: 2000-01-23T04:56:07.000+00:00 properties: envName: description: Environment name example: production type: string status: description: Environment status example: ACTIVE readOnly: true type: string runningCount: description: Number of running tasks example: 2 readOnly: true type: integer desiredCount: description: Desired number of tasks example: 2 readOnly: true type: integer minCapacity: description: Minimum capacity for autoscaling example: 1 type: integer maxCapacity: description: Maximum capacity for autoscaling example: 5 type: integer publicIpAddress: description: Public IP address for SSH access example: 54.123.45.67 nullable: true readOnly: true type: string deploymentStatus: description: Current deployment status enum: - COMPLETED - IN_PROGRESS - FAILED example: COMPLETED readOnly: true type: string deploymentFailureType: description: Type of deployment failure nullable: true readOnly: true type: string deploymentFailureReason: description: Reason for deployment failure nullable: true readOnly: true type: string taskDefinition: description: ECS task definition details readOnly: true type: object service: description: ECS service details readOnly: true type: object loadBalancer: description: Load balancer configuration readOnly: true type: object securityGroup: description: Security group configuration readOnly: true type: object subnet: description: Subnet configuration readOnly: true type: object vpc: description: VPC configuration readOnly: true type: object containerNames: description: Container name list items: type: string readOnly: true type: array volumes: description: Persistent storage volumes items: $ref: '#/components/schemas/Volume' readOnly: true type: array cron: description: Scheduled cron jobs items: $ref: '#/components/schemas/Cron' readOnly: true type: array albRouting: description: ALB routing configuration readOnly: true type: object createdAt: description: Creation timestamp format: date-time readOnly: true type: string updatedAt: description: Last update timestamp format: date-time readOnly: true type: string required: - envName type: object ScalingPolicy: example: scaleOutCooldownSeconds: 1 scaleInCooldownSeconds: 6 metric: CPUUtilization targetValue: 0.8008281904610115 properties: metric: enum: - CPUUtilization - MemoryUtilization - RPS type: string targetValue: type: number scaleInCooldownSeconds: type: integer scaleOutCooldownSeconds: type: integer type: object SyncOperation: example: createdAt: createdAt completedAt: completedAt targetEnvironment: targetEnvironment syncType: syncType sourceEnvironment: sourceEnvironment syncId: syncId status: status properties: syncId: type: string syncType: type: string sourceEnvironment: type: string targetEnvironment: type: string status: type: string createdAt: type: string completedAt: type: string type: object Variable: properties: key: type: string value: type: string type: object Volume: example: createdAt: createdAt accessPointArn: accessPointArn volumeName: volumeName accessPointId: accessPointId volumeId: volumeId description: description rootDirectory: rootDirectory environmentEfsId: environmentEfsId properties: volumeId: type: string volumeName: type: string description: type: string environmentEfsId: type: string createdAt: type: string rootDirectory: type: string accessPointId: type: string accessPointArn: type: string type: object V2CrawlerSchedule: example: crawler_last_run_id: 12345 schedule_cron_string: 0 2 * * * updated_at: 2024-10-11T16:45:00Z project_id: 789 name: Test schedule crawler_config_id: 456 created_at: 2024-01-20T09:15:00Z crawler_uuid: 550e8400-e29b-41d4-a716-446655440000 id: 1 properties: id: description: Schedule ID example: 1 type: integer name: description: Schedule name example: Test schedule type: string crawler_config_id: description: Crawler config ID example: 456 type: integer crawler_uuid: description: Crawler UUID example: 550e8400-e29b-41d4-a716-446655440000 type: string project_id: description: Project ID example: 789 type: integer crawler_last_run_id: description: Last run ID example: 12345 type: integer schedule_cron_string: description: "Standard Unix cron expression with 5 space-separated fields:\ \ minute, hour, day-of-month, month, day-of-week. Example: 0 2 * * * runs\ \ daily at 2 AM." example: 0 2 * * * type: string created_at: description: Creation timestamp example: 2024-01-20T09:15:00Z format: date-time type: string updated_at: description: Last update timestamp example: 2024-10-11T16:45:00Z format: date-time type: string required: - crawler_config_id - crawler_last_run_id - id - project_id - schedule_cron_string type: object V2CrawlerScheduleRequest: example: schedule_cron_string: 0 2 * * * name: Daily Crawl properties: name: description: "Schedule name. If not provided, defaults to 'Schedule {crawler_name}'." example: Daily Crawl type: string schedule_cron_string: description: "Standard Unix cron expression with 5 space-separated fields:\ \ minute, hour, day-of-month, month, day-of-week. Example: 0 2 * * * for\ \ daily at 2 AM." example: 0 2 * * * type: string required: - schedule_cron_string type: object V2Crawler: example: urls_list: single_url:\n - /\n - /about\n - /contact allowed_domains: - example.com created_at: 2024-01-20T09:15:00Z uuid: 550e8400-e29b-41d4-a716-446655440000 status_ok: - 200 urls: - / - /about assets: network_intercept: enabled: true timeout: 30 execute_js: false parser: enabled: true updated_at: 2024-10-11T16:45:00Z project_id: 789 exclude: - /admin/* id: 456 workers: 2 start_urls: - / - /blog webhook_auth_header: Bearer token123 user_agent: Mozilla/5.0... sitemap: - url: /sitemap.xml recursive: true headers: Authorization: Bearer token include: - /blog/* max_errors: 100 webhook_url: https://example.com/webhook browser_mode: false max_html: 50 deleted_at: 2000-01-23T04:56:07.000+00:00 delay: 4 depth: -1 max_hits: 0 domain: test-domain.com name: Test Crawler webhook_extra_vars: key1=value1&key2=value2 domain_verified: 1 config: "domain: test-domain.com\\nconfig:\\n max_html: 100\\n browser_mode:\ \ false" properties: id: description: Crawler ID example: 456 type: integer name: description: Crawler name example: Test Crawler type: string project_id: description: Project ID example: 789 type: integer uuid: description: Crawler UUID example: 550e8400-e29b-41d4-a716-446655440000 type: string config: description: Crawler configuration (YAML) example: "domain: test-domain.com\\nconfig:\\n max_html: 100\\n browser_mode:\ \ false" type: string domain: description: Crawler domain example: test-domain.com type: string domain_verified: default: 0 description: Domain verification status example: 1 type: integer urls_list: description: URLs list (YAML) example: single_url:\n - /\n - /about\n - /contact type: string webhook_url: description: Webhook URL for notifications example: https://example.com/webhook type: string webhook_auth_header: description: Authorization header for webhook example: Bearer token123 type: string webhook_extra_vars: description: Extra variables for webhook example: key1=value1&key2=value2 type: string browser_mode: description: Browser mode enabled example: false type: boolean workers: description: Number of concurrent workers example: 2 type: integer delay: description: Delay between requests in seconds example: 4 format: float type: number depth: description: Maximum crawl depth example: -1 type: integer max_hits: description: Maximum total requests example: 0 type: integer max_html: description: Maximum HTML pages example: 50 type: integer status_ok: description: HTTP status codes for content capture example: - 200 items: type: integer type: array user_agent: description: Custom user agent example: Mozilla/5.0... type: string max_errors: description: Maximum errors before stopping example: 100 type: integer start_urls: description: Starting URLs example: - / - /blog items: type: string type: array urls: description: URLs list example: - / - /about items: type: string type: array headers: additionalProperties: type: string description: Custom headers example: Authorization: Bearer token type: object exclude: description: URL patterns to exclude example: - /admin/* items: type: string type: array include: description: URL patterns to include example: - /blog/* items: type: string type: array sitemap: description: Sitemap configuration example: - url: /sitemap.xml recursive: true items: $ref: '#/components/schemas/V2Crawler_sitemap_inner' type: array allowed_domains: description: Allowed domains example: - example.com items: type: string type: array assets: $ref: '#/components/schemas/V2Crawler_assets' created_at: description: Creation timestamp example: 2024-01-20T09:15:00Z format: date-time type: string updated_at: description: Last update timestamp example: 2024-10-11T16:45:00Z format: date-time type: string deleted_at: description: Deletion timestamp format: date-time nullable: true type: string required: - config - domain - id - project_id - uuid type: object V2CrawlerRequest: example: headers: Authorization: Bearer token123 X-Custom-Header: value include: - /blog/* - /products/* max_errors: 100 webhook_url: https://example.com/webhook allowed_domains: - example.com - assets.example.com browser_mode: false max_html: 50 urls: - / - /about - /contact status_ok: - 200 - 201 delay: 4 depth: -1 assets: network_intercept: enabled: true timeout: 30 execute_js: false parser: enabled: true max_hits: 0 domain: test-domain.com name: Test Crawler webhook_extra_vars: key1=value1&key2=value2 exclude: - /admin/* - /private/* start_urls: - / - /blog workers: 2 webhook_auth_header: Bearer token123 sitemap: - url: /sitemap.xml recursive: true user_agent: Mozilla/5.0... properties: name: description: Crawler name example: Test Crawler type: string domain: description: Domain to crawl example: test-domain.com type: string browser_mode: default: false description: Enable browser mode example: false type: boolean urls: description: URLs to crawl example: - / - /about - /contact items: example: / type: string type: array start_urls: description: Starting URLs for crawl example: - / - /blog items: type: string type: array headers: additionalProperties: type: string description: Custom headers example: Authorization: Bearer token123 X-Custom-Header: value type: object exclude: description: URL patterns to exclude (regex) example: - /admin/* - /private/* items: type: string type: array include: description: URL patterns to include (regex) example: - /blog/* - /products/* items: type: string type: array webhook_url: description: Webhook URL for notifications example: https://example.com/webhook type: string webhook_auth_header: description: Authorization header for webhook example: Bearer token123 type: string webhook_extra_vars: description: Extra variables for webhook example: key1=value1&key2=value2 type: string workers: description: "Number of concurrent workers (default: 2, non-default requires\ \ verification)" example: 2 maximum: 20 minimum: 1 type: integer delay: description: "Delay between requests in seconds (default: 4, non-default\ \ requires verification)" example: 4 format: float maximum: 10 minimum: 0 type: number depth: description: "Maximum crawl depth, -1 for unlimited" example: -1 minimum: -1 type: integer max_hits: description: "Maximum total requests, 0 for unlimited (default: 0, non-default\ \ requires verification)" example: 0 minimum: 0 type: integer max_html: description: "Maximum HTML pages, 0 for unlimited (default: org limit, non-default\ \ requires verification)" example: 50 minimum: 0 type: integer status_ok: description: HTTP status codes that will result in content being captured and pushed to Quant example: - 200 - 201 items: type: integer type: array sitemap: description: Sitemap configuration example: - url: /sitemap.xml recursive: true items: $ref: '#/components/schemas/V2Crawler_sitemap_inner' type: array allowed_domains: description: "Allowed domains for multi-domain crawling, automatically enables\ \ merge_domains" example: - example.com - assets.example.com items: type: string type: array user_agent: description: "Custom user agent, only when browser_mode is false" example: Mozilla/5.0... type: string assets: $ref: '#/components/schemas/V2Crawler_assets' max_errors: description: Maximum errors before stopping crawl example: 100 minimum: 0 type: integer required: - domain type: object V2Domain: example: dns_validation_records: - name: _abc123.example.com type: CNAME value: _xyz789.validation.example.com. domain: test-domain.com dns_engaged: 1 id: 123 dns_go_live_records: - type: CNAME name: www value: cdn.example.com description: Add a CNAME record with the host set to your subdomain pointing to the CDN endpoint. properties: id: description: Domain ID example: 123 type: integer domain: description: Domain name example: test-domain.com type: string dns_engaged: description: "DNS engagement status. 1 indicates DNS is properly configured\ \ and engaged, 0 indicates DNS configuration is pending or incomplete." example: 1 type: integer dns_validation_records: description: DNS validation records required for SSL certificate validation. Present for domains pending certificate validation. Each record contains the CNAME information needed to validate domain ownership. example: - name: _abc123.example.com type: CNAME value: _xyz789.validation.example.com. items: $ref: '#/components/schemas/V2Domain_dns_validation_records_inner' nullable: true type: array dns_go_live_records: description: DNS records required to route traffic to the CDN. These records differ based on domain type (apex vs subdomain). Present when the CDN is configured and ready to receive traffic. example: - type: CNAME name: www value: cdn.example.com description: Add a CNAME record with the host set to your subdomain pointing to the CDN endpoint. items: $ref: '#/components/schemas/V2Domain_dns_go_live_records_inner' nullable: true type: array required: - dns_engaged - domain - id type: object V2DomainRequest: example: domain: test-domain.com properties: domain: description: Domain name example: test-domain.com type: string required: - domain type: object V2Store: example: name: session-data id: kv-store-123 properties: id: description: Store ID example: kv-store-123 type: string name: description: Store name example: session-data type: string required: - id - name type: object V2StoreRequest: example: name: session-data properties: name: description: Store name example: session-data type: string required: - name type: object V2StoreItem: properties: key: description: Item key example: user-session-123 type: string value: description: Item value (can be JSON string) type: string required: - key - value type: object V2StoreItemRequest: example: secret: false value: value key: user-session-123 properties: key: description: Item key example: user-session-123 type: string value: description: Item value (can be JSON string) type: string secret: default: false description: "Store as secret with KMS encryption. Secrets cannot be retrieved\ \ via GET operations (returns [ENCRYPTED]). Ideal for API keys, passwords,\ \ and credentials." type: boolean required: - key - value type: object V2StoreItemUpdateRequest: example: secret: true value: value properties: value: description: Item value (can be JSON string) type: string secret: description: "Store as secret with KMS encryption. Note: Encryption status\ \ cannot be changed after initial creation - this value is preserved from\ \ the original item." type: boolean required: - value type: object V2StoreItemsListResponse: example: next_cursor: next-page-token data: - data - data properties: data: description: List of item keys items: type: string type: array next_cursor: description: Cursor for next page of results example: next-page-token nullable: true type: string type: object V2CrawlerRun: example: completed_at: 1705749600 updated_at: 2024-01-20T09:15:00Z project_id: 12345 last_status: completed crawler_config_id: 12345 started_at: 1705749300 created_at: 2024-01-20T09:15:00Z task_id: task-12345 id: 12345 properties: id: description: Run ID example: 12345 type: integer crawler_config_id: description: Crawler config ID example: 12345 type: integer project_id: description: Project ID example: 12345 type: integer last_status: description: Run status example: completed type: string task_id: description: Task ID example: task-12345 type: string started_at: description: Start time (Unix timestamp) example: 1705749300 nullable: true type: integer completed_at: description: Completion time (Unix timestamp) example: 1705749600 nullable: true type: integer created_at: description: Creation timestamp example: 2024-01-20T09:15:00Z format: date-time type: string updated_at: description: Last update timestamp example: 2024-01-20T09:15:00Z format: date-time type: string required: - crawler_config_id - id - last_status - project_id - task_id type: object V2MetricsResponse: example: data: hits: series: - timestamp: 2026-01-29T12:00:00+00:00 value: 150 - timestamp: 2026-01-29T12:01:00+00:00 value: 142 period_total: 8523 all_time_total: 1284567 period_average: 142.05 bytes: series: - timestamp: 2026-01-29T12:00:00+00:00 value: 1520576 - timestamp: 2026-01-29T12:01:00+00:00 value: 1423456 period_total: 91234567 all_time_total: 12845670000 period_average: 1520576.12 meta: start_time: 2026-01-29T12:00:00+00:00 period: hourly granularity: minute domain: domain end_time: 2026-01-29T13:00:00+00:00 metrics: - hits - bytes properties: meta: $ref: '#/components/schemas/V2MetricsMeta' data: additionalProperties: $ref: '#/components/schemas/V2MetricData' description: Metrics data keyed by metric name example: hits: series: - timestamp: 2026-01-29T12:00:00+00:00 value: 150 - timestamp: 2026-01-29T12:01:00+00:00 value: 142 period_total: 8523 all_time_total: 1284567 period_average: 142.05 bytes: series: - timestamp: 2026-01-29T12:00:00+00:00 value: 1520576 - timestamp: 2026-01-29T12:01:00+00:00 value: 1423456 period_total: 91234567 all_time_total: 12845670000 period_average: 1520576.12 type: object required: - data - meta type: object V2MetricsMeta: example: start_time: 2026-01-29T12:00:00+00:00 period: hourly granularity: minute domain: domain end_time: 2026-01-29T13:00:00+00:00 metrics: - hits - bytes properties: period: description: The period type for this data enum: - hourly - daily - monthly example: hourly type: string granularity: description: The granularity of data points enum: - minute - day - month example: minute type: string start_time: description: Start time of the data range (ISO8601 or Unix timestamp based on timestamp_format parameter) example: 2026-01-29T12:00:00+00:00 type: string end_time: description: End time of the data range (ISO8601 or Unix timestamp based on timestamp_format parameter) example: 2026-01-29T13:00:00+00:00 type: string metrics: description: List of metrics included in the response example: - hits - bytes items: type: string type: array domain: description: Domain filter applied (if any) nullable: true type: string example: null required: - end_time - granularity - metrics - period - start_time type: object V2MetricData: properties: series: description: Time series data points items: $ref: '#/components/schemas/V2MetricDataPoint' type: array period_total: description: Total value for the period example: 8523 type: number all_time_total: description: All-time total value example: 1284567 type: number period_average: description: Average value per time unit in the period example: 142.05 format: float type: number required: - all_time_total - period_average - period_total - series type: object V2MetricDataPoint: properties: timestamp: $ref: '#/components/schemas/V2MetricDataPoint_timestamp' value: description: Metric value at this timestamp example: 150 type: number required: - timestamp - value type: object V2Organization: example: name: Test Organization machine_name: test-org type: business region: au subscription: professional created_at: 2024-01-15T10:30:00Z updated_at: 2024-10-10T14:20:00Z properties: name: description: Organization name example: Test Organization type: string machine_name: description: Organization machine name example: test-org type: string type: description: Organization type example: business type: string region: description: Organization region example: au type: string subscription: description: Subscription type example: professional type: string created_at: description: Creation timestamp example: 2024-01-15T10:30:00Z format: date-time type: string updated_at: description: Last update timestamp example: 2024-10-10T14:20:00Z format: date-time type: string required: - machine_name - name type: object V2OrganizationRequest: properties: name: description: Organization name example: Test Organization type: string machine_name: description: Organization machine name example: test-org type: string required: - machine_name - name type: object V2Project: example: name: Test Project id: 123 machine_name: test-project write_token: abc123token uuid: 550e8400-e29b-41d4-a716-446655440000 properties: id: description: Project ID example: 123 type: integer uuid: description: Project UUID example: 550e8400-e29b-41d4-a716-446655440000 type: string name: description: Project name example: Test Project type: string machine_name: description: Project machine name example: test-project type: string write_token: description: Write token for API access example: abc123token type: string required: - id - machine_name - name - uuid type: object V2ProjectRequest: example: disable_revisions: false basic_auth_preview_only: true allow_query_params: true basic_auth_password: secure_password123 name: Test Project basic_auth_username: admin machine_name: test-project region: au properties: name: description: Project name example: Test Project type: string machine_name: description: Project machine name example: test-project type: string region: description: Project region example: au type: string allow_query_params: description: Allow query parameters example: true type: boolean disable_revisions: description: Disable revisions example: false type: boolean basic_auth_username: description: Basic auth username example: admin type: string basic_auth_password: description: Basic auth password example: secure_password123 type: string basic_auth_preview_only: default: false description: Apply basic auth to preview domain only example: true type: boolean type: object V2Rule: properties: name: description: Rule name example: Test redirect rule type: string uuid: description: Rule UUID example: 123e4567-e89b-12d3-a456-426614174000 type: string rule_id: description: Rule ID example: rule-001 type: string weight: default: 0 description: Rule weight example: 100 type: integer url: description: URL patterns example: - /old-path/* - /legacy/* items: type: string type: array domain: description: Domain patterns example: - test-domain.com - '*.test-domain.com' items: type: string type: array disabled: default: false description: Whether rule is disabled example: false type: boolean only_with_cookie: description: Only apply with cookie example: session_id type: string method: description: HTTP method example: GET type: string method_is: description: Allowed HTTP methods example: - GET - POST items: type: string type: array method_is_not: description: Excluded HTTP methods example: - DELETE - PUT items: type: string type: array ip: description: IP address example: 192.168.1.1 type: string ip_is: description: Allowed IP addresses example: - 192.168.1.0/24 - 10.0.0.1 items: type: string type: array ip_is_not: description: Excluded IP addresses example: - 172.16.0.0/12 items: type: string type: array asn: description: "ASN filter type (asn_is, asn_is_not, any)" example: any type: string asn_is: description: Allowed AS numbers example: - "15169" - "8075" items: type: string type: array asn_is_not: description: Excluded AS numbers example: - "13335" items: type: string type: array country: description: Country code example: US type: string country_is: description: Allowed countries example: - US - CA - GB items: type: string type: array country_is_not: description: Excluded countries example: - CN - RU items: type: string type: array action: description: Rule action example: redirect type: string required: - action - disabled - uuid type: object V2RuleRequest: properties: domain: description: "Domain patterns (default: any)" example: - test-domain.com - '*.test-domain.com' items: type: string type: array name: description: Rule name example: Test redirect rule type: string uuid: description: Rule UUID example: 123e4567-e89b-12d3-a456-426614174000 type: string weight: default: 0 description: Rule weight example: 100 type: integer disabled: default: false description: Whether rule is disabled example: false type: boolean url: description: URL patterns example: - /old-path/* - /legacy/* items: type: string type: array country: description: "Country filter type (country_is, country_is_not, any)" example: country_is type: string country_is: description: Allowed countries example: - US - CA - GB items: type: string type: array country_is_not: description: Excluded countries example: - CN - RU items: type: string type: array method: description: "Method filter type (method_is, method_is_not, any)" example: method_is type: string method_is: description: Allowed HTTP methods example: - GET - POST items: type: string type: array method_is_not: description: Excluded HTTP methods example: - DELETE - PUT items: type: string type: array ip: description: "IP filter type (ip_is, ip_is_not, any)" example: ip_is type: string ip_is: description: Allowed IP addresses example: - 192.168.1.0/24 - 10.0.0.1 items: type: string type: array ip_is_not: description: Excluded IP addresses example: - 172.16.0.0/12 items: type: string type: array asn: description: "ASN filter type (asn_is, asn_is_not, any)" example: any type: string asn_is: description: Allowed AS numbers example: - "15169" - "8075" items: type: string type: array asn_is_not: description: Excluded AS numbers example: - "13335" items: type: string type: array required: - domain - url type: object V2RuleProxyAction: example: cache_lifetime: "3600" proxy_strip_request_headers: - Cookie - Authorization application_proxy: false quant_cloud_selection: app: my-app container: web port: 80 env: production application_container: web static_error_page: Service temporarily unavailable proxy_strip_headers: - Set-Cookie - Server notify_config: webhook_url: https://hooks.slack.com/services/XXXXXX notify: slack application_name: my-app auth_user: admin host: backend.test-domain.com waf_enabled: false proxy_inline_fn_enabled: false auth_pass: secure_password application_port: 80 static_error_page_status_codes: - "500" - "502" - "503" - "504" failover_mode: true application_environment: production origin_timeout: "30" failover_origin_ttfb: "2000" only_proxy_404: false inject_headers: X-Custom-Header: value Authorization: Bearer token to: https://backend.test-domain.com disable_ssl_verify: false failover_lifetime: "300" waf_config: block_lists: referer: false ip: false ai: false user_agent: false allow_rules: - allow_rules - allow_rules httpbl: block_harvester: false httpbl_enabled: false block_spam: false httpbl_key: httpbl_key block_search_engine: false block_suspicious: false notify_slack_hits_rpm: 100 allow_ip: - allow_ip - allow_ip block_asn: - block_asn - block_asn mode: report thresholds: - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack notify_email: - notify_email - notify_email block_ip: - block_ip - block_ip block_referer: - block_referer - block_referer block_ua: - block_ua - block_ua notify_slack: https://hooks.slack.com/services/XXX paranoia_level: 1 failover_origin_status_codes: - "200" - "404" - "301" - "302" - "304" proxy_alert_enabled: false properties: to: description: Target URL to proxy to example: https://backend.test-domain.com type: string host: description: Host header override example: backend.test-domain.com type: string auth_user: description: Basic auth username example: admin type: string auth_pass: description: Basic auth password example: secure_password type: string disable_ssl_verify: default: false description: Disable SSL verification example: false type: boolean cache_lifetime: description: Cache lifetime example: "3600" nullable: true type: string only_proxy_404: default: false description: Only proxy 404 responses example: false type: boolean inject_headers: additionalProperties: type: string description: Headers to inject example: X-Custom-Header: value Authorization: Bearer token nullable: true type: object proxy_strip_headers: description: Headers to strip from response example: - Set-Cookie - Server items: type: string type: array proxy_strip_request_headers: description: Headers to strip from request example: - Cookie - Authorization items: type: string type: array origin_timeout: description: Origin timeout example: "30" type: string failover_mode: default: false description: Enable failover mode example: true type: boolean failover_origin_ttfb: default: "2000" description: Failover TTFB threshold example: "2000" type: string failover_origin_status_codes: description: "Status codes for failover (default: 200,404,301,302,304)" example: - "200" - "404" - "301" - "302" - "304" items: type: string type: array failover_lifetime: default: "300" description: Failover cache lifetime example: "300" type: string notify: default: none description: "Notification type (none, slack)" enum: - none - slack example: slack type: string notify_config: $ref: '#/components/schemas/V2RuleProxyAction_notify_config' waf_enabled: default: false description: WAF enabled example: false type: boolean waf_config: $ref: '#/components/schemas/WafConfig' proxy_alert_enabled: description: Proxy alert enabled example: false type: boolean proxy_inline_fn_enabled: default: false description: Proxy inline function enabled example: false type: boolean application_proxy: default: false description: Enable Quant Cloud application proxy mode example: false type: boolean application_name: description: Quant Cloud application name (required when application_proxy is true) example: my-app type: string application_environment: description: Quant Cloud application environment (required when application_proxy is true) example: production type: string application_container: description: Quant Cloud application container (required when application_proxy is true) example: web type: string application_port: description: Quant Cloud application port (required when application_proxy is true) example: 80 type: integer quant_cloud_selection: $ref: '#/components/schemas/V2RuleProxyAction_quant_cloud_selection' static_error_page: description: Static error page content (HTML) to serve on origin errors example: Service temporarily unavailable nullable: true type: string static_error_page_status_codes: description: Origin status codes that trigger static error page example: - "500" - "502" - "503" - "504" items: type: string type: array required: - to type: object V2RuleProxyRequest: example: country: country_is asn_is: - "15169" - "8075" cache_lifetime: "3600" proxy_strip_request_headers: - Cookie - Authorization application_proxy: false method_is: - GET - POST application_container: web method_is_not: - DELETE - PUT static_error_page: Service temporarily unavailable proxy_strip_headers: - Set-Cookie - Server uuid: 123e4567-e89b-12d3-a456-426614174000 country_is_not: - CN - RU asn_is_not: - "13335" application_name: my-app auth_user: admin host: backend.test-domain.com waf_enabled: false auth_pass: secure_pass disabled: false application_port: 80 static_error_page_status_codes: - "500" - "502" - "503" - "504" failover_mode: true application_environment: production origin_timeout: "30" method: method_is ip_is_not: - 172.16.0.0/12 failover_origin_ttfb: "2000" ip: ip_is weight: 100 country_is: - US - CA - GB url: - /api/* - /backend/* only_proxy_404: false inject_headers: X-Custom: value domain: - test-domain.com - '*.test-domain.com' name: Test proxy rule ip_is: - 192.168.1.0/24 - 10.0.0.1 to: https://backend.test-domain.com disable_ssl_verify: false failover_lifetime: "300" waf_config: block_lists: referer: false ip: false ai: false user_agent: false allow_rules: - allow_rules - allow_rules httpbl: block_harvester: false httpbl_enabled: false block_spam: false httpbl_key: httpbl_key block_search_engine: false block_suspicious: false notify_slack_hits_rpm: 100 allow_ip: - allow_ip - allow_ip block_asn: - block_asn - block_asn mode: report thresholds: - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack notify_email: - notify_email - notify_email block_ip: - block_ip - block_ip block_referer: - block_referer - block_referer block_ua: - block_ua - block_ua notify_slack: https://hooks.slack.com/services/XXX paranoia_level: 1 asn: any failover_origin_status_codes: - "502" - "503" - "504" proxy_alert_enabled: false properties: domain: description: "Domain patterns (default: any)" example: - test-domain.com - '*.test-domain.com' items: type: string type: array name: description: Rule name example: Test proxy rule type: string uuid: description: Rule UUID example: 123e4567-e89b-12d3-a456-426614174000 type: string weight: default: 0 description: Rule weight example: 100 type: integer disabled: default: false description: Whether rule is disabled example: false type: boolean url: description: URL patterns example: - /api/* - /backend/* items: type: string type: array country: description: "Country filter type (country_is, country_is_not, any)" example: country_is type: string country_is: description: Allowed countries example: - US - CA - GB items: type: string type: array country_is_not: description: Excluded countries example: - CN - RU items: type: string type: array method: description: "Method filter type (method_is, method_is_not, any)" example: method_is type: string method_is: description: Allowed HTTP methods example: - GET - POST items: type: string type: array method_is_not: description: Excluded HTTP methods example: - DELETE - PUT items: type: string type: array ip: description: "IP filter type (ip_is, ip_is_not, any)" example: ip_is type: string ip_is: description: Allowed IP addresses example: - 192.168.1.0/24 - 10.0.0.1 items: type: string type: array ip_is_not: description: Excluded IP addresses example: - 172.16.0.0/12 items: type: string type: array asn: description: "ASN filter type (asn_is, asn_is_not, any)" example: any type: string asn_is: description: Allowed AS numbers example: - "15169" - "8075" items: type: string type: array asn_is_not: description: Excluded AS numbers example: - "13335" items: type: string type: array to: description: Target URL to proxy to example: https://backend.test-domain.com type: string host: description: Host header override example: backend.test-domain.com type: string auth_user: default: "" description: Basic auth username example: admin type: string auth_pass: default: "" description: Basic auth password example: secure_pass type: string disable_ssl_verify: default: false description: Disable SSL verification example: false type: boolean cache_lifetime: description: Cache lifetime example: "3600" nullable: true type: string only_proxy_404: default: false description: Only proxy 404 responses example: false type: boolean inject_headers: additionalProperties: type: string description: Headers to inject example: X-Custom: value nullable: true type: object proxy_strip_headers: description: Headers to strip from response example: - Set-Cookie - Server items: type: string type: array proxy_strip_request_headers: description: Headers to strip from request example: - Cookie - Authorization items: type: string type: array origin_timeout: description: Origin timeout example: "30" type: string failover_mode: default: false description: Enable failover mode example: true type: boolean failover_origin_ttfb: default: "2000" description: Failover TTFB threshold in milliseconds example: "2000" type: string failover_origin_status_codes: description: Origin status codes that trigger failover example: - "502" - "503" - "504" items: type: string type: array failover_lifetime: default: "300" description: Failover cache lifetime in seconds example: "300" type: string proxy_alert_enabled: default: false description: Proxy alert enabled example: false type: boolean waf_enabled: default: false description: WAF enabled example: false type: boolean waf_config: $ref: '#/components/schemas/WafConfig' application_proxy: default: false description: Enable Quant Cloud application proxy mode example: false type: boolean application_name: description: Quant Cloud application name (required when application_proxy is true) example: my-app type: string application_environment: description: Quant Cloud application environment (required when application_proxy is true) example: production type: string application_container: description: Quant Cloud application container (required when application_proxy is true) example: web type: string application_port: description: Quant Cloud application port (required when application_proxy is true) example: 80 type: integer static_error_page: description: Static error page content (HTML) to serve on origin errors example: Service temporarily unavailable nullable: true type: string static_error_page_status_codes: description: Origin status codes that trigger static error page example: - "500" - "502" - "503" - "504" items: type: string type: array required: - domain - to - url type: object V2RuleProxy: allOf: - $ref: '#/components/schemas/V2Rule' - properties: rule_id: description: Rule ID type: string action_config: $ref: '#/components/schemas/V2RuleProxyAction' required: - action_config type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule_id asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: cache_lifetime: "3600" proxy_strip_request_headers: - Cookie - Authorization application_proxy: false quant_cloud_selection: app: my-app container: web port: 80 env: production application_container: web static_error_page: Service temporarily unavailable proxy_strip_headers: - Set-Cookie - Server notify_config: webhook_url: https://hooks.slack.com/services/XXXXXX notify: slack application_name: my-app auth_user: admin host: backend.test-domain.com waf_enabled: false proxy_inline_fn_enabled: false auth_pass: secure_password application_port: 80 static_error_page_status_codes: - "500" - "502" - "503" - "504" failover_mode: true application_environment: production origin_timeout: "30" failover_origin_ttfb: "2000" only_proxy_404: false inject_headers: X-Custom-Header: value Authorization: Bearer token to: https://backend.test-domain.com disable_ssl_verify: false failover_lifetime: "300" waf_config: block_lists: referer: false ip: false ai: false user_agent: false allow_rules: - allow_rules - allow_rules httpbl: block_harvester: false httpbl_enabled: false block_spam: false httpbl_key: httpbl_key block_search_engine: false block_suspicious: false notify_slack_hits_rpm: 100 allow_ip: - allow_ip - allow_ip block_asn: - block_asn - block_asn mode: report thresholds: - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack notify_email: - notify_email - notify_email block_ip: - block_ip - block_ip block_referer: - block_referer - block_referer block_ua: - block_ua - block_ua notify_slack: https://hooks.slack.com/services/XXX paranoia_level: 1 failover_origin_status_codes: - "200" - "404" - "301" - "302" - "304" proxy_alert_enabled: false type: object V2RuleRedirectAction: example: status_code: "301" to: https://test-domain.com/new-path properties: to: description: Redirect destination URL example: https://test-domain.com/new-path type: string status_code: default: "301" description: HTTP status code for redirect example: "301" type: string required: - to type: object V2RuleRedirect: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleRedirectAction' type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: status_code: "301" to: https://test-domain.com/new-path type: object V2RuleCustomResponseAction: example: custom_response_status_code: 503 custom_response_body: Custom maintenance page properties: custom_response_body: description: Custom response body content example: Custom maintenance page type: string custom_response_status_code: default: 200 description: HTTP status code for custom response example: 503 type: integer required: - custom_response_body type: object V2RuleCustomResponse: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleCustomResponseAction' type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: custom_response_status_code: 503 custom_response_body: Custom maintenance page type: object V2RuleContentFilterAction: example: fn_uuid: 8d3f4820-8536-51ef-b827-f18gc2g01bf8 properties: fn_uuid: description: Function UUID example: 8d3f4820-8536-51ef-b827-f18gc2g01bf8 type: string required: - fn_uuid type: object V2RuleContentFilter: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleContentFilterAction' required: - action_config type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: fn_uuid: 8d3f4820-8536-51ef-b827-f18gc2g01bf8 type: object V2RuleRedirectRequest: example: country: country_is asn_is: - "15169" - "8075" method: method_is ip_is_not: - 172.16.0.0/12 method_is: - GET - POST ip: ip_is redirect_code: "301" weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* redirect_to: https://test-domain.com/new-path country_is_not: - CN - RU asn_is_not: - "13335" domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 disabled: false asn: any properties: domain: description: "Domain patterns (default: any)" example: - test-domain.com - '*.test-domain.com' items: type: string type: array name: description: Rule name example: Test redirect rule type: string uuid: description: Rule UUID example: 123e4567-e89b-12d3-a456-426614174000 type: string weight: default: 0 description: Rule weight example: 100 type: integer disabled: default: false description: Whether rule is disabled example: false type: boolean url: description: URL patterns example: - /old-path/* - /legacy/* items: type: string type: array country: description: "Country filter type (country_is, country_is_not, any)" example: country_is type: string country_is: description: Allowed countries example: - US - CA - GB items: type: string type: array country_is_not: description: Excluded countries example: - CN - RU items: type: string type: array method: description: "Method filter type (method_is, method_is_not, any)" example: method_is type: string method_is: description: Allowed HTTP methods example: - GET - POST items: type: string type: array method_is_not: description: Excluded HTTP methods example: - DELETE - PUT items: type: string type: array ip: description: "IP filter type (ip_is, ip_is_not, any)" example: ip_is type: string ip_is: description: Allowed IP addresses example: - 192.168.1.0/24 - 10.0.0.1 items: type: string type: array ip_is_not: description: Excluded IP addresses example: - 172.16.0.0/12 items: type: string type: array asn: description: "ASN filter type (asn_is, asn_is_not, any)" example: any type: string asn_is: description: Allowed AS numbers example: - "15169" - "8075" items: type: string type: array asn_is_not: description: Excluded AS numbers example: - "13335" items: type: string type: array redirect_to: description: Redirect destination URL example: https://test-domain.com/new-path type: string redirect_code: default: "301" description: HTTP status code for redirect example: "301" type: string required: - domain - redirect_to - url type: object V2RuleCustomResponseRequest: example: country: country_is asn_is: - "15169" - "8075" status_code: 503 method: method_is ip_is_not: - 172.16.0.0/12 custom_response_status_code: 503 method_is: - GET - POST ip: ip_is weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT custom_response_body: Custom maintenance page body: Maintenance uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /maintenance - /down country_is_not: - CN - RU asn_is_not: - "13335" domain: - test-domain.com - '*.test-domain.com' name: Test custom response rule ip_is: - 192.168.1.0/24 - 10.0.0.1 disabled: false asn: any properties: domain: description: "Domain patterns (default: any)" example: - test-domain.com - '*.test-domain.com' items: type: string type: array name: description: Rule name example: Test custom response rule type: string uuid: description: Rule UUID example: 123e4567-e89b-12d3-a456-426614174000 type: string weight: default: 0 description: Rule weight example: 100 type: integer disabled: default: false description: Whether rule is disabled example: false type: boolean url: description: URL patterns example: - /maintenance - /down items: type: string type: array country: description: "Country filter type (country_is, country_is_not, any)" example: country_is type: string country_is: description: Allowed countries example: - US - CA - GB items: type: string type: array country_is_not: description: Excluded countries example: - CN - RU items: type: string type: array method: description: "Method filter type (method_is, method_is_not, any)" example: method_is type: string method_is: description: Allowed HTTP methods example: - GET - POST items: type: string type: array method_is_not: description: Excluded HTTP methods example: - DELETE - PUT items: type: string type: array ip: description: "IP filter type (ip_is, ip_is_not, any)" example: ip_is type: string ip_is: description: Allowed IP addresses example: - 192.168.1.0/24 - 10.0.0.1 items: type: string type: array ip_is_not: description: Excluded IP addresses example: - 172.16.0.0/12 items: type: string type: array asn: description: "ASN filter type (asn_is, asn_is_not, any)" example: any type: string asn_is: description: Allowed AS numbers example: - "15169" - "8075" items: type: string type: array asn_is_not: description: Excluded AS numbers example: - "13335" items: type: string type: array custom_response_body: description: Custom response body content example: Custom maintenance page type: string custom_response_status_code: default: 200 description: HTTP status code for custom response example: 503 type: integer status_code: description: Legacy field for status code (deprecated) example: 503 type: integer body: description: Legacy field for response body (deprecated) example: Maintenance type: string required: - custom_response_body - domain - url type: object V2RuleContentFilterRequest: example: country: country_is asn_is: - "15169" - "8075" method: method_is ip_is_not: - 172.16.0.0/12 method_is: - GET - POST ip: ip_is weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /* country_is_not: - CN - RU asn_is_not: - "13335" fn_uuid: 8d3f4820-8536-51ef-b827-f18gc2g01bf8 domain: - test-domain.com - '*.test-domain.com' name: Test content filter rule ip_is: - 192.168.1.0/24 - 10.0.0.1 disabled: false asn: any properties: domain: description: "Domain patterns (default: any)" example: - test-domain.com - '*.test-domain.com' items: type: string type: array name: description: Rule name example: Test content filter rule type: string uuid: description: Rule UUID example: 123e4567-e89b-12d3-a456-426614174000 type: string weight: default: 0 description: Rule weight example: 100 type: integer disabled: default: false description: Whether rule is disabled example: false type: boolean url: description: URL patterns example: - /* items: type: string type: array country: description: "Country filter type (country_is, country_is_not, any)" example: country_is type: string country_is: description: Allowed countries example: - US - CA - GB items: type: string type: array country_is_not: description: Excluded countries example: - CN - RU items: type: string type: array method: description: "Method filter type (method_is, method_is_not, any)" example: method_is type: string method_is: description: Allowed HTTP methods example: - GET - POST items: type: string type: array method_is_not: description: Excluded HTTP methods example: - DELETE - PUT items: type: string type: array ip: description: "IP filter type (ip_is, ip_is_not, any)" example: ip_is type: string ip_is: description: Allowed IP addresses example: - 192.168.1.0/24 - 10.0.0.1 items: type: string type: array ip_is_not: description: Excluded IP addresses example: - 172.16.0.0/12 items: type: string type: array asn: description: "ASN filter type (asn_is, asn_is_not, any)" example: any type: string asn_is: description: Allowed AS numbers example: - "15169" - "8075" items: type: string type: array asn_is_not: description: Excluded AS numbers example: - "13335" items: type: string type: array fn_uuid: description: Function UUID example: 8d3f4820-8536-51ef-b827-f18gc2g01bf8 type: string required: - domain - fn_uuid - url type: object V2RuleServeStaticAction: example: static_file_path: /index.html properties: static_file_path: description: Path to the static file to serve example: /index.html type: string required: - static_file_path type: object V2RuleServeStatic: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleServeStaticAction' required: - action_config type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: static_file_path: /index.html type: object V2RuleServeStaticRequest: allOf: - $ref: '#/components/schemas/V2RuleRequest' - properties: static_file_path: description: Path to the static file to serve example: /index.html type: string required: - static_file_path type: object example: country: country_is asn_is: - "15169" - "8075" method: method_is static_file_path: /index.html ip_is_not: - 172.16.0.0/12 method_is: - GET - POST ip: ip_is weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* country_is_not: - CN - RU asn_is_not: - "13335" domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 disabled: false asn: any type: object V2RuleHeaderAction: example: headers: X-Custom-Header: value Cache-Control: max-age=3600 properties: headers: additionalProperties: type: string description: Headers to set example: X-Custom-Header: value Cache-Control: max-age=3600 type: object required: - headers type: object V2RuleHeader: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleHeaderAction' required: - action_config type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: headers: X-Custom-Header: value Cache-Control: max-age=3600 type: object V2RuleHeaderRequest: allOf: - $ref: '#/components/schemas/V2RuleRequest' - properties: headers: additionalProperties: type: string description: Headers to set example: X-Custom-Header: value Cache-Control: max-age=3600 type: object required: - headers type: object example: country: country_is headers: X-Custom-Header: value Cache-Control: max-age=3600 asn_is: - "15169" - "8075" method: method_is ip_is_not: - 172.16.0.0/12 method_is: - GET - POST ip: ip_is weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* country_is_not: - CN - RU asn_is_not: - "13335" domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 disabled: false asn: any type: object V2RuleFunctionAction: example: fn_uuid: 7c9e6679-7425-40de-944b-e07fc1f90ae7 properties: fn_uuid: description: Function UUID example: 7c9e6679-7425-40de-944b-e07fc1f90ae7 type: string required: - fn_uuid type: object V2RuleFunction: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleFunctionAction' required: - action_config type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: fn_uuid: 7c9e6679-7425-40de-944b-e07fc1f90ae7 type: object V2RuleFunctionRequest: example: country: country_is asn_is: - "15169" - "8075" method: method_is ip_is_not: - 172.16.0.0/12 method_is: - GET - POST ip: ip_is weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /* country_is_not: - CN - RU asn_is_not: - "13335" fn_uuid: 7c9e6679-7425-40de-944b-e07fc1f90ae7 domain: - test-domain.com - '*.test-domain.com' name: Test function rule ip_is: - 192.168.1.0/24 - 10.0.0.1 disabled: false asn: any properties: domain: description: "Domain patterns (default: any)" example: - test-domain.com - '*.test-domain.com' items: type: string type: array name: description: Rule name example: Test function rule type: string uuid: description: Rule UUID example: 123e4567-e89b-12d3-a456-426614174000 type: string weight: default: 0 description: Rule weight example: 100 type: integer disabled: default: false description: Whether rule is disabled example: false type: boolean url: description: URL patterns example: - /* items: type: string type: array country: description: "Country filter type (country_is, country_is_not, any)" example: country_is type: string country_is: description: Allowed countries example: - US - CA - GB items: type: string type: array country_is_not: description: Excluded countries example: - CN - RU items: type: string type: array method: description: "Method filter type (method_is, method_is_not, any)" example: method_is type: string method_is: description: Allowed HTTP methods example: - GET - POST items: type: string type: array method_is_not: description: Excluded HTTP methods example: - DELETE - PUT items: type: string type: array ip: description: "IP filter type (ip_is, ip_is_not, any)" example: ip_is type: string ip_is: description: Allowed IP addresses example: - 192.168.1.0/24 - 10.0.0.1 items: type: string type: array ip_is_not: description: Excluded IP addresses example: - 172.16.0.0/12 items: type: string type: array asn: description: "ASN filter type (asn_is, asn_is_not, any)" example: any type: string asn_is: description: Allowed AS numbers example: - "15169" - "8075" items: type: string type: array asn_is_not: description: Excluded AS numbers example: - "13335" items: type: string type: array fn_uuid: description: Function UUID example: 7c9e6679-7425-40de-944b-e07fc1f90ae7 type: string required: - domain - fn_uuid - url type: object V2RuleBotChallengeAction: example: robot_challenge_type: invisible robot_challenge_verification_ttl: 10800 robot_challenge_challenge_ttl: 30 properties: robot_challenge_type: description: Challenge type (invisible or checkbox) example: invisible type: string robot_challenge_verification_ttl: default: 10800 description: Verification TTL in seconds example: 10800 type: integer robot_challenge_challenge_ttl: default: 30 description: Challenge TTL in seconds example: 30 type: integer required: - robot_challenge_type type: object V2RuleBotChallenge: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleBotChallengeAction' required: - action_config type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: robot_challenge_type: invisible robot_challenge_verification_ttl: 10800 robot_challenge_challenge_ttl: 30 type: object V2RuleBotChallengeRequest: allOf: - $ref: '#/components/schemas/V2RuleRequest' - properties: robot_challenge_type: description: Challenge type (invisible or checkbox) example: invisible type: string robot_challenge_verification_ttl: default: 10800 description: Verification TTL in seconds example: 10800 type: integer robot_challenge_challenge_ttl: default: 30 description: Challenge TTL in seconds example: 30 type: integer required: - robot_challenge_type type: object example: country: country_is robot_challenge_type: invisible asn_is: - "15169" - "8075" method: method_is ip_is_not: - 172.16.0.0/12 method_is: - GET - POST ip: ip_is weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* country_is_not: - CN - RU asn_is_not: - "13335" robot_challenge_verification_ttl: 10800 domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 robot_challenge_challenge_ttl: 30 disabled: false asn: any type: object V2RuleAuthAction: example: auth_user: admin auth_pass: secure_password123 properties: auth_user: description: Authentication username example: admin type: string auth_pass: description: Authentication password example: secure_password123 type: string required: - auth_pass - auth_user type: object V2RuleAuth: allOf: - $ref: '#/components/schemas/V2Rule' - properties: action_config: $ref: '#/components/schemas/V2RuleAuthAction' required: - action_config type: object example: country: US asn_is: - "15169" - "8075" method: GET ip_is_not: - 172.16.0.0/12 only_with_cookie: session_id method_is: - GET - POST ip: 192.168.1.1 weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* rule_id: rule-001 asn_is_not: - "13335" country_is_not: - CN - RU domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 action: redirect disabled: false asn: any action_config: auth_user: admin auth_pass: secure_password123 type: object V2RuleAuthRequest: allOf: - $ref: '#/components/schemas/V2RuleRequest' - properties: auth_user: description: Authentication username example: admin type: string auth_pass: description: Authentication password example: secure_password123 type: string required: - auth_pass - auth_user type: object example: country: country_is asn_is: - "15169" - "8075" method: method_is ip_is_not: - 172.16.0.0/12 method_is: - GET - POST ip: ip_is weight: 100 country_is: - US - CA - GB method_is_not: - DELETE - PUT uuid: 123e4567-e89b-12d3-a456-426614174000 url: - /old-path/* - /legacy/* country_is_not: - CN - RU asn_is_not: - "13335" auth_user: admin domain: - test-domain.com - '*.test-domain.com' name: Test redirect rule ip_is: - 192.168.1.0/24 - 10.0.0.1 auth_pass: secure_password123 disabled: false asn: any type: object V2SecretStore: properties: id: description: Secret store ID type: string name: description: Secret store name type: string required: - id - name type: object V2SecretStoreRequest: properties: name: description: Secret store name type: string required: - name type: object SpotConfiguration: description: Spot instance strategy configuration for controlling cost vs reliability. Spot instances provide significant cost savings (~70%) but may be interrupted by AWS. Available for non-production environments. example: strategy: spot-only properties: strategy: default: spot-only description: "Spot instance strategy. 'off' = On-Demand only (highest reliability,\ \ no savings). 'spot-only' = 100% Spot instances (~70% savings, default\ \ for non-prod). 'mixed-safe' = 50% Spot instances (~35% savings, requires\ \ multiple instances). 'mixed-aggressive' = 80% Spot instances (~56% savings,\ \ requires multiple instances)." enum: - "off" - spot-only - mixed-safe - mixed-aggressive example: spot-only type: string required: - strategy type: object V1Error: properties: error: example: true type: boolean message: example: Error message details type: string required: - error - message type: object V1Meta: properties: url: type: string type: type: string seq_num: type: integer published: type: boolean published_revision: type: integer published_md5: type: string byte_length: type: integer revision_count: type: integer highest_revision_number: type: integer deleted: type: boolean deleted_timestamp: type: integer md5: type: string revision_number: type: integer date_timestamp: type: integer type: object V1Revision: properties: md5: type: string type: type: string byte_length: type: integer revision_number: type: integer date_timestamp: type: integer deleted: type: boolean deleted_timestamp: type: integer transitions: items: $ref: '#/components/schemas/V1Transition' type: array info: $ref: '#/components/schemas/V1Info' type: object V1Info: properties: author_user: type: string author_name: type: string author_email: type: string log: type: string custom_1: type: string custom_2: type: string source: type: string type: object V1Transition: properties: state: enum: - published - unpublished type: string date_timestamp: type: integer type: object V1SearchRecord: properties: title: type: string content: type: string url: type: string summary: type: string type: object V1MetricMinuteStats: properties: total: type: integer minute_total: type: integer minute_series: additionalProperties: type: number type: object minute_average: type: number required: - minute_average - minute_series - minute_total - total type: object V1MetricDayStats: properties: total: type: integer day_total: type: integer day_series: additionalProperties: type: number type: object day_average: type: number required: - day_average - day_series - day_total - total type: object V1MetricMonthStats: properties: total: type: integer month_total: type: integer month_series: additionalProperties: type: number type: object month_average: type: number required: - month_average - month_series - month_total - total type: object V1MetricsMapMinute: additionalProperties: $ref: '#/components/schemas/V1MetricMinuteStats' type: object V1MetricsMapDay: additionalProperties: $ref: '#/components/schemas/V1MetricDayStats' type: object V1MetricsMapMonth: additionalProperties: $ref: '#/components/schemas/V1MetricMonthStats' type: object V1MinuteSeriesMap: additionalProperties: type: number description: Map of unix second -> value type: object V1SeriesPointDay: properties: x: example: 2025-09-28 type: string "y": type: number required: - x - "y" type: object V1SeriesPointMonth: properties: x: example: September 2025 type: string "y": type: number required: - x - "y" type: object V1DaySeriesArray: items: $ref: '#/components/schemas/V1SeriesPointDay' type: array V1MonthSeriesArray: items: $ref: '#/components/schemas/V1SeriesPointMonth' type: array V1GetMetricsResponse: properties: success: type: boolean data: $ref: '#/components/schemas/V1GetMetricsResponse_data' required: - data - success type: object V1GetMetricSeriesResponse: properties: success: type: boolean data: $ref: '#/components/schemas/V1GetMetricSeriesResponse_data' required: - all_time_total - data - success - total type: object V1GlobalMetaResponse: properties: global_meta: $ref: '#/components/schemas/V1GlobalMetaResponse_global_meta' total_records: example: 1000 type: integer total_pages: example: 1 type: integer page: example: 1 type: integer page_size: example: 10 type: integer refine_search: example: false type: boolean type: object V1UrlMetaRequest: properties: Quant-Url: example: - /home - /css/styles.css - /contact-us items: type: string type: array required: - Quant-Url type: object V1UrlMetaResponse: properties: global_meta: $ref: '#/components/schemas/V1GlobalMetaResponse_global_meta' type: object V1RevisionsResponse: properties: revisions: description: "Revision objects, mapped by revision number" type: object url: description: The url of the asset type: string published: description: Published state of the asset type: boolean published_revision: description: Published revision number of the asset type: integer transitions: items: $ref: '#/components/schemas/V1Transition' type: array highest_revision_number: description: Last revision number type: integer transition_revision: description: "The transition number, if set" type: integer type: object V1ContentRequest: properties: url: description: The content URL. Must be relative and start with a leading '/' maxLength: 4096 type: string content: description: The content (e.g. html) type: string published: description: If the asset should be published type: boolean content_timestamp: description: User defined timestamp for this content item type: integer info: $ref: '#/components/schemas/V1Info' transitions: items: $ref: '#/components/schemas/V1Transition' type: array required: - content - published - url type: object V1RedirectRequest: properties: url: description: The redirect from URL type: string redirect_url: description: The destination URL type: string redirect_http_code: description: The HTTP code to send with the redirect example: 301 type: integer published: description: If the redirect is published type: boolean content_timestamp: description: User defined timestamp for this content item type: integer info: $ref: '#/components/schemas/V1Info' transitions: items: $ref: '#/components/schemas/V1Transition' type: array required: - published - redirect_http_code - redirect_url - url type: object V1RedirectResponse: allOf: - $ref: '#/components/schemas/V1Revision' - properties: redirect_http_code: description: The HTTP code example: 301 type: integer highest_revision_number: type: string url: description: The redirect from URL type: string type: object V1DeleteResponse: properties: error: description: Indicates at least one error occurred type: boolean errors: description: List of any errors items: type: object type: array meta: items: $ref: '#/components/schemas/V1Revision' type: array type: object V1PingResponse: properties: config: description: Configuration associated with a project type: object project: description: The project machine name type: string type: object V1SearchResponse: properties: settings: description: Search configuration for the index type: object index: description: Detail related to index size and status type: object type: object V1SearchRecordArray: description: Search records items: $ref: '#/components/schemas/V1SearchRecord' type: array V1WafLogItem: properties: timestamp: type: string ip_address: type: string location: type: string asn: type: string type: type: string mode: type: string rule_id: type: string domain: type: string url: type: string method: type: string user_agent: type: string required: - asn - domain - ip_address - location - method - mode - rule_id - timestamp - type - url - user_agent type: object V1WafLogListResponse: properties: draw: type: integer iTotalRecords: type: integer iTotalDisplayRecords: type: integer aaData: items: $ref: '#/components/schemas/V1WafLogItem' type: array required: - aaData - draw - iTotalDisplayRecords - iTotalRecords type: object V1RedirectItem: properties: url: description: |- * @OA\Schema( schema="V1RedirectItem", type="object", required={"url","redirect_url","redirect_http_code","date_timestamp","published","revision_count"}, type: string redirect_url: type: string redirect_http_code: type: integer date_timestamp: type: string published: type: string revision_count: type: integer required: - date_timestamp - published - redirect_http_code - redirect_url - revision_count - url type: object V1RedirectListResponse: properties: draw: type: integer iTotalRecords: type: integer iTotalDisplayRecords: type: integer aaData: items: $ref: '#/components/schemas/V1RedirectItem' type: array required: - aaData - draw - iTotalDisplayRecords - iTotalRecords type: object V1ProxyItem: properties: url: type: string proxy_url: type: string date_timestamp: type: string published: type: string revision_count: type: integer required: - date_timestamp - proxy_url - published - revision_count - url type: object V1ProxyListResponse: properties: draw: type: integer iTotalRecords: type: integer iTotalDisplayRecords: type: integer aaData: items: $ref: '#/components/schemas/V1ProxyItem' type: array required: - aaData - draw - iTotalDisplayRecords - iTotalRecords type: object V1ContentItem: properties: url: type: string date_timestamp: type: string published: type: string revision_count: type: integer desc: type: string uuid: type: string required: - date_timestamp - published - revision_count - url type: object V1ContentListResponse: properties: draw: type: integer iTotalRecords: type: integer iTotalDisplayRecords: type: integer aaData: items: $ref: '#/components/schemas/V1ContentItem' type: array required: - aaData - draw - iTotalDisplayRecords - iTotalRecords type: object V1FormSubmissionItem: properties: uuid: type: string country_ip: type: string spam_score: type: string data: type: string file_count: type: integer date_submitted: type: string required: - country_ip - data - date_submitted - file_count - spam_score - uuid type: object V1FormSubmissionListResponse: properties: draw: type: integer iTotalRecords: type: integer iTotalDisplayRecords: type: integer aaData: items: $ref: '#/components/schemas/V1FormSubmissionItem' type: array required: - aaData - draw - iTotalDisplayRecords - iTotalRecords type: object V1UploadResponse: properties: success: type: boolean url: type: string required: - success - url type: object V2CustomHeader: additionalProperties: type: string description: Custom headers as key-value pairs example: X-Custom-Header: value Cache-Control: max-age=3600 type: object V2CustomHeaderRequest: example: headers: X-Custom-Header: value Cache-Control: max-age=3600 properties: headers: additionalProperties: type: string description: Custom headers example: X-Custom-Header: value Cache-Control: max-age=3600 type: object required: - headers type: object WafConfig: description: Web Application Firewall configuration example: block_lists: referer: false ip: false ai: false user_agent: false allow_rules: - allow_rules - allow_rules httpbl: block_harvester: false httpbl_enabled: false block_spam: false httpbl_key: httpbl_key block_search_engine: false block_suspicious: false notify_slack_hits_rpm: 100 allow_ip: - allow_ip - allow_ip block_asn: - block_asn - block_asn mode: report thresholds: - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack - hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack notify_email: - notify_email - notify_email block_ip: - block_ip - block_ip block_referer: - block_referer - block_referer block_ua: - block_ua - block_ua notify_slack: https://hooks.slack.com/services/XXX paranoia_level: 1 properties: mode: default: report description: WAF operation mode enum: - report - block type: string paranoia_level: default: 1 description: OWASP paranoia level maximum: 4 minimum: 1 type: integer allow_rules: description: WAF rule IDs to allow/whitelist items: type: string type: array allow_ip: description: IP addresses to allow items: type: string type: array block_ip: description: IP addresses to block items: type: string type: array block_asn: description: ASN numbers to block items: type: string type: array block_ua: description: User agent patterns to block items: type: string type: array block_referer: description: Referer patterns to block items: type: string type: array notify_slack: description: Slack webhook URL for notifications example: https://hooks.slack.com/services/XXX type: string notify_slack_hits_rpm: description: Minimum hits per minute to trigger Slack notification example: 100 type: integer notify_email: description: Email addresses for notifications items: type: string type: array httpbl: $ref: '#/components/schemas/WafConfig_httpbl' block_lists: $ref: '#/components/schemas/WafConfig_block_lists' thresholds: description: Rate limiting thresholds items: $ref: '#/components/schemas/WafConfig_thresholds_inner' type: array type: object Crawlers_run_request: properties: urls: description: "Optional URLs to crawl (overrides crawler's default URL configuration).\ \ If not provided, the crawler will use its configured URLs or perform\ \ a full crawl." example: - / - /about - /contact items: example: / type: string type: array type: object Crawlers_run_200_response: example: run_id: "12345" properties: run_id: description: The crawler run ID example: "12345" type: string type: object KV_link_to_project_request: properties: project_id: description: Target project ID to link to type: integer required: - project_id type: object KV_link_to_project_200_response: example: success: true message: message properties: success: example: true type: boolean message: type: string type: object KV_items_create_200_response: example: success: true value: value key: user-session-123 properties: success: example: true type: boolean key: example: user-session-123 type: string value: type: string type: object KV_items_show_200_response_value: description: "Item value (decoded from JSON if applicable). Returns '[ENCRYPTED]'\ \ for secret items." oneOf: - type: string - type: object KV_items_show_200_response: example: value: KV_items_show_200_response_value key: user-session-123 properties: key: example: user-session-123 type: string value: $ref: '#/components/schemas/KV_items_show_200_response_value' type: object KV_items_delete_200_response: example: success: true key: user-session-123 properties: success: example: true type: boolean key: example: user-session-123 type: string type: object Organizations_list_200_response_inner: example: name: Test Organization machine_name: test-org properties: name: description: Organization name example: Test Organization type: string machine_name: description: Organization machine name example: test-org type: string type: object Purge_create_request: properties: cache_keys: description: Cache keys to purge items: type: string type: array urls: description: URLs to purge items: type: string type: array scope: default: project description: Purge scope (org or project) type: string soft: default: true description: Soft purge type: boolean required: - cache_keys - scope type: object Tokens_list_200_response_inner: example: last_used: 2000-01-23T04:56:07.000+00:00 name: My deploy token created_at: 2000-01-23T04:56:07.000+00:00 id: 42 properties: id: example: 42 type: integer name: example: My deploy token type: string last_used: format: date-time nullable: true type: string created_at: format: date-time type: string type: object Tokens_create_request: properties: name: description: Name for the token example: My CI token type: string preset: description: Preset scope bundle example: content_management nullable: true type: string scopes: description: Individual scopes (mutually exclusive with preset) example: - projects:read - content:write items: type: string nullable: true type: array projects: description: Project IDs to restrict this token to items: type: integer nullable: true type: array expires_in: description: Token expiration period enum: - 30d - 90d - 365d - never example: 90d nullable: true type: string required: - name type: object Tokens_create_201_response: example: projects: - 6 - 6 expires_at: 2000-01-23T04:56:07.000+00:00 name: name created_at: 2000-01-23T04:56:07.000+00:00 id: 0 scopes: - scopes - scopes preset: preset token: token properties: token: description: The plain text token (shown once) type: string id: description: Token ID type: integer name: type: string scopes: items: type: string nullable: true type: array projects: items: type: integer nullable: true type: array preset: nullable: true type: string expires_at: format: date-time nullable: true type: string created_at: format: date-time type: string type: object Tokens_delete_200_response: example: message: Token revoked successfully properties: message: example: Token revoked successfully type: string type: object listAIModels_200_response_models_inner_capabilities: description: Model capabilities and features example: embeddings: true streaming: true toolUse: true multimodal: true text: true properties: text: description: Supports text generation type: boolean multimodal: description: Supports images/video type: boolean embeddings: description: Supports embeddings type: boolean streaming: description: Supports streaming responses type: boolean toolUse: description: Supports function calling type: boolean type: object listAIModels_200_response_models_inner: example: capabilities: embeddings: true streaming: true toolUse: true multimodal: true text: true provider: Amazon name: Amazon Nova Lite id: amazon.nova-lite-v1:0 properties: id: example: amazon.nova-lite-v1:0 type: string name: example: Amazon Nova Lite type: string provider: example: Amazon type: string capabilities: $ref: '#/components/schemas/listAIModels_200_response_models_inner_capabilities' type: object listAIModels_200_response: example: models: - capabilities: embeddings: true streaming: true toolUse: true multimodal: true text: true provider: Amazon name: Amazon Nova Lite id: amazon.nova-lite-v1:0 - capabilities: embeddings: true streaming: true toolUse: true multimodal: true text: true provider: Amazon name: Amazon Nova Lite id: amazon.nova-lite-v1:0 count: 10 properties: count: example: 10 type: integer models: items: $ref: '#/components/schemas/listAIModels_200_response_models_inner' type: array type: object getAIModel_200_response_capabilities: example: supportsStructuredOutput: false supportsMultimodal: true supportsVision: true supportsStreaming: true supportsTools: false properties: supportsTools: example: false type: boolean supportsStructuredOutput: example: false type: boolean supportsMultimodal: example: true type: boolean supportsVision: example: true type: boolean supportsStreaming: example: true type: boolean type: object getAIModel_200_response_pricing: example: outputPerMToken: 0.24 currency: USD inputPerMToken: 0.06 properties: inputPerMToken: example: 0.06 format: float type: number outputPerMToken: example: 0.24 format: float type: number currency: example: USD type: string type: object getAIModel_200_response: example: contextWindow: 300000 capabilities: supportsStructuredOutput: false supportsMultimodal: true supportsVision: true supportsStreaming: true supportsTools: false provider: Amazon releaseDate: 2024-12-03 deprecated: false name: Amazon Nova Lite available: true description: "Very low-cost multimodal model for processing text, image, and\ \ video inputs." id: amazon.nova-lite-v1:0 maxOutputTokens: 5000 pricing: outputPerMToken: 0.24 currency: USD inputPerMToken: 0.06 properties: id: example: amazon.nova-lite-v1:0 type: string name: example: Amazon Nova Lite type: string provider: example: Amazon type: string description: example: "Very low-cost multimodal model for processing text, image, and\ \ video inputs." type: string contextWindow: example: 300000 type: integer maxOutputTokens: example: 5000 type: integer capabilities: $ref: '#/components/schemas/getAIModel_200_response_capabilities' pricing: $ref: '#/components/schemas/getAIModel_200_response_pricing' releaseDate: example: 2024-12-03 format: date type: string deprecated: example: false type: boolean available: example: true type: boolean type: object getAIModel_404_response: example: code: MODEL_NOT_FOUND message: Model not found properties: message: example: Model not found type: string code: example: MODEL_NOT_FOUND type: string type: object listAISessions_200_response_inner: example: updated_at: 2000-01-23T04:56:07.000+00:00 created_at: 2000-01-23T04:56:07.000+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 createAISession_request_initialMessages_inner: properties: role: enum: - system - 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 createAISession_201_response: example: createdAt: 2000-01-23T04:56:07.000+00:00 sessionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 expiresAt: 2000-01-23T04:56:07.000+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 getAISession_200_response: example: messages: - "{}" - "{}" created_at: 2000-01-23T04:56:07.000+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_request_newMessages_inner: properties: role: enum: - user - assistant type: string content: 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 updateAISession_200_response: example: totalMessages: 0 sessionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 totalTokens: 6 status: status updatedAt: 2000-01-23T04:56:07.000+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 deleteAISession_200_response: example: message: message properties: message: 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 extendAISession_200_response: example: sessionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 message: Session extended by 60 minutes expiresAt: 2000-01-23T04:56:07.000+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 listTasks_200_response_tasks_inner: example: createdAt: 1735689600000 assignedAgentId: agent-123 blockedByTaskIds: - blockedByTaskIds - blockedByTaskIds blockedReason: blockedReason description: "Extract text from PDF, analyze content" progress: 0.5 taskListId: world-1 title: Process document and create summary taskId: 550e8400-e29b-41d4-a716-446655440000 orgId: quant status: in_progress updatedAt: 1735689700000 properties: taskId: example: 550e8400-e29b-41d4-a716-446655440000 format: uuid type: string orgId: example: quant type: string taskListId: example: world-1 nullable: true type: string title: example: Process document and create summary type: string description: example: "Extract text from PDF, analyze content" type: string status: enum: - pending - in_progress - completed - failed - cancelled - blocked example: in_progress type: string assignedAgentId: example: agent-123 nullable: true type: string progress: example: 0.5 maximum: 1 minimum: 0 type: number blockedReason: nullable: true type: string blockedByTaskIds: items: type: string nullable: true type: array createdAt: example: 1735689600000 type: integer updatedAt: example: 1735689700000 type: integer type: object listTasks_200_response: example: dependsOn: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 count: 2 taskIds: - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 tasks: - createdAt: 1735689600000 assignedAgentId: agent-123 blockedByTaskIds: - blockedByTaskIds - blockedByTaskIds blockedReason: blockedReason description: "Extract text from PDF, analyze content" progress: 0.5 taskListId: world-1 title: Process document and create summary taskId: 550e8400-e29b-41d4-a716-446655440000 orgId: quant status: in_progress updatedAt: 1735689700000 - createdAt: 1735689600000 assignedAgentId: agent-123 blockedByTaskIds: - blockedByTaskIds - blockedByTaskIds blockedReason: blockedReason description: "Extract text from PDF, analyze content" progress: 0.5 taskListId: world-1 title: Process document and create summary taskId: 550e8400-e29b-41d4-a716-446655440000 orgId: quant status: in_progress updatedAt: 1735689700000 properties: tasks: items: $ref: '#/components/schemas/listTasks_200_response_tasks_inner' type: array taskIds: description: Task IDs (only with dependsOn filter) items: format: uuid type: string type: array count: example: 2 type: integer dependsOn: description: The queried task ID (only with dependsOn filter) format: uuid type: string type: object createTask_request: properties: title: description: Task title example: Process document and create summary type: string description: description: Detailed task description example: "Extract text from PDF, analyze content, and generate executive\ \ summary" type: string taskListId: description: Task list ID for grouping related tasks (implicit - lists are created automatically) example: world-1 type: string status: default: pending description: Initial task status enum: - pending - in_progress - completed - failed - cancelled - blocked type: string assignedAgentId: description: Pre-assign task to specific agent example: agent-code-reviewer type: string createdByAgentId: description: Agent ID that created this task example: agent-coordinator type: string dependsOn: description: Task IDs that must complete before this task can start example: - 550e8400-e29b-41d4-a716-446655440000 items: format: uuid type: string type: array metadata: description: Flexible JSON metadata for task-specific data example: priority: high tags: - document-processing workflow: document-pipeline type: object maxRetries: default: 3 description: Maximum retry attempts on failure maximum: 10 minimum: 0 type: integer blockedReason: description: Reason task is blocked (when status is blocked) example: Waiting for approval type: string blockedByTaskIds: description: Task IDs that are blocking this task items: format: uuid type: string type: array required: - title type: object createTask_201_response: example: createdAt: 0 title: title taskId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 orgId: orgId status: status properties: taskId: format: uuid type: string orgId: type: string title: type: string status: type: string createdAt: type: integer type: object getTask_200_response: example: metadata: priority: high completedAt: 6 blockedByTaskIds: - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 dependsOn: - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 blockedReason: blockedReason retryCount: 0 description: "Extract text from PDF, analyze content" startedAt: 0 title: Process document and create summary error: error orgId: quant expiresAt: 1 result: "{}" createdAt: 1735689600000 assignedAgentId: agent-123 maxRetries: 3 blockedAt: 5 progress: 0.5 createdByAgentId: agent-coordinator taskListId: world-1 taskId: 550e8400-e29b-41d4-a716-446655440000 status: in_progress progressMessage: "Extracted text, analyzing content..." updatedAt: 1735689700000 properties: taskId: example: 550e8400-e29b-41d4-a716-446655440000 format: uuid type: string orgId: example: quant type: string taskListId: example: world-1 nullable: true type: string title: example: Process document and create summary type: string description: example: "Extract text from PDF, analyze content" type: string status: enum: - pending - in_progress - completed - failed - cancelled - blocked example: in_progress type: string assignedAgentId: example: agent-123 nullable: true type: string createdByAgentId: example: agent-coordinator nullable: true type: string dependsOn: items: format: uuid type: string type: array metadata: example: priority: high type: object progress: example: 0.5 format: float maximum: 1 minimum: 0 type: number progressMessage: example: "Extracted text, analyzing content..." type: string result: description: Task result data when completed nullable: true type: object error: description: Error message if status is failed nullable: true type: string retryCount: example: 0 type: integer maxRetries: example: 3 type: integer createdAt: description: Unix timestamp in milliseconds example: 1735689600000 format: int64 type: integer updatedAt: description: Unix timestamp in milliseconds example: 1735689700000 format: int64 type: integer startedAt: description: When status changed to in_progress format: int64 nullable: true type: integer completedAt: description: When task completed/failed/cancelled format: int64 nullable: true type: integer expiresAt: description: TTL timestamp for completed tasks format: int64 nullable: true type: integer blockedReason: description: Reason task is blocked nullable: true type: string blockedByTaskIds: description: Task IDs that are blocking this task items: format: uuid type: string nullable: true type: array blockedAt: description: When status changed to blocked format: int64 nullable: true type: integer type: object updateTask_request: properties: title: example: Updated task title type: string description: example: Updated description with more details type: string taskListId: description: Move task to different list or remove from list (set null) example: world-2 nullable: true type: string status: description: Task status (triggers automatic timestamp updates) enum: - pending - in_progress - completed - failed - cancelled - blocked example: in_progress type: string assignedAgentId: description: Reassign task to different agent example: agent-specialist nullable: true type: string dependsOn: description: Update task dependencies example: - 550e8400-e29b-41d4-a716-446655440000 items: format: uuid type: string type: array metadata: description: Update task metadata (replaces entire metadata object) example: priority: urgent type: object progress: description: Progress from 0.0 to 1.0 example: 0.75 format: float maximum: 1 minimum: 0 type: number progressMessage: description: Human-readable progress message example: Processing document 3 of 4... type: string result: description: Task result data (set when completing task) example: summary: Document processed successfully wordCount: 1500 type: object error: description: Error message (set when task fails) example: Failed to connect to external API nullable: true type: string retryCount: description: Update retry count example: 1 minimum: 0 type: integer maxRetries: description: Update maximum retry attempts example: 5 maximum: 10 minimum: 0 type: integer blockedReason: description: Reason task is blocked (set when status is blocked) example: Waiting for external approval nullable: true type: string blockedByTaskIds: description: Task IDs that are blocking this task items: format: uuid type: string nullable: true type: array type: object updateTask_200_response: example: taskId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 status: status updatedAt: 0 properties: taskId: format: uuid type: string status: type: string updatedAt: type: integer type: object deleteTask_200_response: example: deleted: true deletedCount: 1 deletedTaskIds: - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 properties: deleted: example: true type: boolean deletedCount: description: Number of tasks deleted (more than 1 for cascade) example: 1 type: integer deletedTaskIds: items: format: uuid type: string type: array type: object deleteTask_409_response: example: dependentTaskIds: - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 error: TASK_HAS_DEPENDENTS message: Cannot delete task with 3 dependent task(s). Use cascade=true to delete all. properties: error: example: TASK_HAS_DEPENDENTS type: string message: example: Cannot delete task with 3 dependent task(s). Use cascade=true to delete all. type: string dependentTaskIds: items: format: uuid type: string type: array type: object getDependencyGraph_200_response: example: taskCount: 4 leaves: - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 taskListId: world-1 roots: - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - 046b6c7f-0b8a-43b9-b35d-6489e6daee91 graph: "{}" properties: taskListId: example: world-1 type: string taskCount: example: 4 type: integer roots: description: Task IDs with no dependencies items: format: uuid type: string type: array leaves: description: Task IDs with no dependents items: format: uuid type: string type: array graph: description: "Adjacency list with task summaries, dependsOn, and dependents\ \ arrays" type: object type: object getAIUsageStats_200_response_by_model_value: properties: requests: description: Number of requests for this model type: integer tokens: description: Total tokens for this model type: integer type: object getAIUsageStats_200_response: example: by_model: amazon.nova-lite-v1:0: requests: 100 tokens: 25000 amazon.nova-pro-v1:0: requests: 50 tokens: 20000 total_tokens: 45000 total_requests: 150 properties: total_requests: description: Total number of API requests example: 150 type: integer total_tokens: description: Total tokens consumed across all requests example: 45000 type: integer by_model: additionalProperties: $ref: '#/components/schemas/getAIUsageStats_200_response_by_model_value' description: Usage breakdown by model ID example: amazon.nova-lite-v1:0: requests: 100 tokens: 25000 amazon.nova-pro-v1:0: requests: 50 tokens: 20000 type: object type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf: properties: text: example: What's in this image? type: string required: - text type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_1_image_source: properties: bytes: description: Base64-encoded image data format: byte type: string required: - bytes type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_1_image: properties: format: enum: - png - jpeg - gif - webp type: string source: $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_1_image_source' required: - format - source type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_1: properties: image: $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_1_image' required: - image type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_2_video_source: properties: bytes: description: Base64-encoded video data format: byte type: string required: - bytes type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_2_video: properties: format: enum: - mp4 - mov - mkv - webm type: string source: $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_2_video_source' required: - format - source type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_2: properties: video: $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_2_video' required: - video type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_3_document_source: properties: bytes: description: Base64-encoded document data format: byte type: string required: - bytes type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_3_document: properties: format: enum: - pdf - csv - docx - xlsx type: string name: example: report.pdf type: string source: $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_3_document_source' required: - format - name - source type: object chatInference_request_messages_inner_content_oneOf_inner_oneOf_3: properties: document: $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_3_document' required: - document type: object chatInference_request_messages_inner_content_oneOf_inner: oneOf: - $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf' - $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_1' - $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_2' - $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner_oneOf_3' chatInference_request_messages_inner_content: example: What is the capital of Australia? oneOf: - description: Simple text message type: string - description: "Multimodal content blocks (text, image, video, document)" items: $ref: '#/components/schemas/chatInference_request_messages_inner_content_oneOf_inner' type: array chatInference_request_messages_inner: properties: role: enum: - user - assistant - system type: string content: $ref: '#/components/schemas/chatInference_request_messages_inner_content' required: - content - role type: object chatInference_request_responseFormat: description: "Structured JSON output (Claude 3.5 Sonnet v1/v2, Nova Pro)" properties: type: enum: - json type: string jsonSchema: description: JSON Schema defining expected structure type: object type: object chatInference_request_toolConfig_tools_inner_toolSpec_inputSchema: properties: json: description: JSON Schema for function parameters type: object type: object chatInference_request_toolConfig_tools_inner_toolSpec: properties: name: type: string description: type: string inputSchema: $ref: '#/components/schemas/chatInference_request_toolConfig_tools_inner_toolSpec_inputSchema' type: object chatInference_request_toolConfig_tools_inner: properties: toolSpec: $ref: '#/components/schemas/chatInference_request_toolConfig_tools_inner_toolSpec' type: object chatInference_request_toolConfig: description: "Function calling configuration (Claude 3+, Nova Pro)" properties: tools: items: $ref: '#/components/schemas/chatInference_request_toolConfig_tools_inner' type: array autoExecute: default: false description: "When true, backend automatically executes tools and feeds\ \ results back to AI. For async tools (e.g., image generation), returns\ \ executionId for polling. Security: Use allowedTools to whitelist which\ \ tools can auto-execute." type: boolean allowedTools: description: "Whitelist of tool names that can be auto-executed. Required\ \ when autoExecute is true for security. Example: ['get_weather', 'generate_image']" items: type: string type: array type: object chatInference_request_guardrails: description: AWS Bedrock guardrails configuration for content filtering and safety. properties: guardrailIdentifier: description: Guardrail identifier from AWS Bedrock type: string guardrailVersion: description: Guardrail version type: string trace: description: Enable guardrail trace output enum: - enabled - disabled type: string type: object chatInference_request: properties: messages: description: Array of chat messages. Content can be a simple string or an array of content blocks for multimodal input. items: $ref: '#/components/schemas/chatInference_request_messages_inner' minItems: 1 type: array modelId: description: Model ID. Use Nova models for multimodal support. example: amazon.nova-lite-v1:0 type: string temperature: default: 0.7 maximum: 2 minimum: 0 type: number maxTokens: default: 4096 description: Max tokens. Claude 4.5 supports up to 64k. maximum: 65536 minimum: 1 type: integer topP: maximum: 1 minimum: 0 type: number stream: description: "Ignored in buffered mode, always returns complete response" type: boolean systemPrompt: description: "Optional custom system prompt. When tools are enabled, this\ \ is prepended with tool usage guidance." type: string stopSequences: description: Custom stop sequences items: type: string maxItems: 4 type: array responseFormat: $ref: '#/components/schemas/chatInference_request_responseFormat' toolConfig: $ref: '#/components/schemas/chatInference_request_toolConfig' sessionId: description: "Optional session ID for conversation continuity. Omit to use\ \ stateless mode, include to continue an existing session." format: uuid type: string async: default: false description: "Enable async/durable execution mode. When true, returns 202\ \ with pollUrl instead of waiting for completion. Use for long-running\ \ inference, client-executed tools, or operations >30 seconds." type: boolean allowedTools: description: Top-level convenience alias for toolConfig.allowedTools. Whitelists which tools can be auto-executed. example: - get_weather - generate_image items: type: string type: array guardrails: $ref: '#/components/schemas/chatInference_request_guardrails' longContext: default: false description: Enable 1M context window support regardless of token estimation. Use when sending large payloads (>200K tokens). type: boolean required: - messages - modelId type: object chatInference_200_response_response_toolUse_oneOf_result: description: "Tool execution result (only present when status='complete' for\ \ sync auto-executed tools). For async tools, poll /tools/executions/{executionId}" example: s3Urls: - s3Urls - s3Urls images: - images - images properties: images: description: Base64 data URIs for images items: type: string type: array s3Urls: description: Signed S3 URLs for downloads items: type: string type: array type: object chatInference_200_response_response_toolUse_oneOf: description: Single tool request example: result: s3Urls: - s3Urls - s3Urls images: - images - images input: location: Sydney executionId: exec_abc123def456 name: get_weather toolUseId: abc123 status: pending properties: toolUseId: example: abc123 type: string name: example: get_weather type: string input: example: location: Sydney type: object executionId: description: Present for async tools with autoExecute example: exec_abc123def456 type: string status: description: Execution status (pending/running/complete/failed) - present for async tools with autoExecute example: pending type: string result: $ref: '#/components/schemas/chatInference_200_response_response_toolUse_oneOf_result' type: object chatInference_200_response_response_toolUse_oneOf_1_inner: properties: toolUseId: type: string name: type: string input: type: object executionId: description: Present for async tools with autoExecute type: string status: description: Present for async tools with autoExecute type: string result: description: Present when status='complete' for sync tools type: object type: object chatInference_200_response_response_toolUse: description: Tool use request(s). Can be a single object or array of objects. Only present when AI requests tools. oneOf: - $ref: '#/components/schemas/chatInference_200_response_response_toolUse_oneOf' - description: Multiple tool requests items: $ref: '#/components/schemas/chatInference_200_response_response_toolUse_oneOf_1_inner' type: array chatInference_200_response_response: description: Assistant's response message. May contain text content and/or tool use requests. example: role: assistant toolUse: result: s3Urls: - s3Urls - s3Urls images: - images - images input: location: Sydney executionId: exec_abc123def456 name: get_weather toolUseId: abc123 status: pending content: I'll help you with that. properties: role: enum: - assistant example: assistant type: string content: description: Text response content example: I'll help you with that. type: string toolUse: $ref: '#/components/schemas/chatInference_200_response_response_toolUse' type: object chatInference_200_response_usage: description: Token usage and cost for this inference call example: costCents: 0.42 inputTokens: 25 outputTokens: 150 totalTokens: 175 properties: inputTokens: description: Number of input tokens example: 25 type: integer outputTokens: description: Number of output tokens example: 150 type: integer totalTokens: description: Total tokens consumed example: 175 type: integer costCents: description: Cost of this inference call in US cents example: 0.42 format: float type: number type: object chatInference_200_response: example: response: role: assistant toolUse: result: s3Urls: - s3Urls - s3Urls images: - images - images input: location: Sydney executionId: exec_abc123def456 name: get_weather toolUseId: abc123 status: pending content: I'll help you with that. requestId: req-abc123 usage: costCents: 0.42 inputTokens: 25 outputTokens: 150 totalTokens: 175 finishReason: stop model: amazon.nova-pro-v1:0 properties: response: $ref: '#/components/schemas/chatInference_200_response_response' model: description: Model used for generation example: amazon.nova-pro-v1:0 type: string requestId: description: Unique request identifier example: req-abc123 type: string finishReason: description: Why the model stopped generating enum: - stop - length - content_filter - tool_use type: string usage: $ref: '#/components/schemas/chatInference_200_response_usage' type: object chatInference_202_response: example: requestId: XkdVWiEfSwMEPrw= pollUrl: /ai/chat/executions/XkdVWiEfSwMEPrw%3D sessionId: session-1769056496430 message: Execution started. Poll the status endpoint for updates. status: queued properties: requestId: description: Unique request identifier for polling example: XkdVWiEfSwMEPrw= type: string sessionId: description: Session ID for conversation continuity example: session-1769056496430 type: string status: description: Initial execution status enum: - queued example: queued type: string message: description: Human-readable status message example: Execution started. Poll the status endpoint for updates. type: string pollUrl: description: URL to poll for execution status example: /ai/chat/executions/XkdVWiEfSwMEPrw%3D type: string required: - pollUrl - requestId - status type: object chatInferenceStream_request_messages_inner_content: example: What is the capital of Australia? oneOf: - description: Simple text message type: string - description: Multimodal content blocks items: description: "Text, image, video, or document block" type: object type: array chatInferenceStream_request_messages_inner: properties: role: enum: - user - assistant - system type: string content: $ref: '#/components/schemas/chatInferenceStream_request_messages_inner_content' required: - content - role type: object chatInferenceStream_request: properties: messages: description: Array of chat messages. Content can be a simple string or an array of content blocks for multimodal input. items: $ref: '#/components/schemas/chatInferenceStream_request_messages_inner' minItems: 1 type: array modelId: description: Model ID. Use Nova models for multimodal support. example: amazon.nova-lite-v1:0 type: string temperature: default: 0.7 maximum: 2 minimum: 0 type: number maxTokens: default: 4096 description: Max tokens. Claude 4.5 supports up to 64k. maximum: 65536 minimum: 1 type: integer topP: maximum: 1 minimum: 0 type: number systemPrompt: description: "Optional custom system prompt. When tools are enabled, this\ \ is prepended with tool usage guidance." type: string stopSequences: description: Custom stop sequences items: type: string maxItems: 4 type: array responseFormat: $ref: '#/components/schemas/chatInference_request_responseFormat' toolConfig: $ref: '#/components/schemas/chatInference_request_toolConfig' sessionId: description: "Optional session ID for conversation continuity. Omit to use\ \ stateless mode, include to continue an existing session." format: uuid type: string async: default: false description: "Enable async/durable execution mode. When true, returns 202\ \ with pollUrl instead of streaming. Use for long-running inference, client-executed\ \ tools, or operations >30 seconds." type: boolean allowedTools: description: Top-level convenience alias for toolConfig.allowedTools. Whitelists which tools can be auto-executed. example: - get_weather - generate_image items: type: string type: array guardrails: $ref: '#/components/schemas/chatInference_request_guardrails' longContext: default: false description: Enable 1M context window support regardless of token estimation. Use when sending large payloads (>200K tokens). type: boolean required: - messages - modelId type: object embeddings_request_input: description: Single text string or array of text strings to embed oneOf: - example: The Australian government announced new climate policy type: string - example: - Climate change policy - Healthcare reform - Education funding items: type: string type: array embeddings_request: properties: input: $ref: '#/components/schemas/embeddings_request_input' modelId: default: amazon.titan-embed-text-v2:0 description: Embedding model to use example: amazon.titan-embed-text-v2:0 type: string dimensions: default: 1024 description: "Output embedding dimensions. Titan v2 supports: 256, 512,\ \ 1024, 8192" enum: - 256 - 512 - 1024 - 8192 example: 1024 type: integer normalize: default: true description: Normalize embeddings to unit length (magnitude = 1.0) example: true type: boolean required: - input type: object embeddings_200_response_embeddings: description: "Vector embeddings for the input text(s). Single array for string\ \ input, array of arrays for batch input." oneOf: - description: Single embedding vector if input was a string items: format: float type: number type: array - description: Array of embedding vectors if input was an array items: items: format: float type: number type: array type: array embeddings_200_response_usage: example: inputTokens: 6 totalTokens: 1 properties: inputTokens: description: Number of tokens in input text(s) type: integer totalTokens: description: Total tokens (same as inputTokens for embeddings) type: integer required: - inputTokens - totalTokens type: object embeddings_200_response: example: embeddings: - 0.8008282 - 0.8008282 usage: inputTokens: 6 totalTokens: 1 model: amazon.titan-embed-text-v2:0 dimension: 1024 properties: embeddings: $ref: '#/components/schemas/embeddings_200_response_embeddings' model: description: Model used to generate embeddings example: amazon.titan-embed-text-v2:0 type: string dimension: description: Dimensionality of each embedding vector example: 1024 type: integer usage: $ref: '#/components/schemas/embeddings_200_response_usage' required: - dimension - embeddings - model - usage type: object imageGeneration_request_textToImageParams: description: Parameters for TEXT_IMAGE task properties: text: description: Text prompt maxLength: 1024 minLength: 1 type: string negativeText: description: What NOT to include maxLength: 1024 minLength: 1 type: string style: enum: - 3D_ANIMATED_FAMILY_FILM - DESIGN_SKETCH - FLAT_VECTOR_ILLUSTRATION - GRAPHIC_NOVEL_ILLUSTRATION - MAXIMALISM - MIDCENTURY_RETRO - PHOTOREALISM - SOFT_DIGITAL_PAINTING type: string conditionImage: description: Base64-encoded conditioning image format: byte type: string controlMode: default: CANNY_EDGE enum: - CANNY_EDGE - SEGMENTATION type: string controlStrength: default: 0.7 format: float maximum: 1 minimum: 0 type: number type: object imageGeneration_request_colorGuidedGenerationParams: description: Parameters for COLOR_GUIDED_GENERATION task properties: colors: items: pattern: "^#[0-9A-Fa-f]{6}$" type: string maxItems: 10 minItems: 1 type: array referenceImage: format: byte type: string text: maxLength: 1024 minLength: 1 type: string negativeText: maxLength: 1024 minLength: 1 type: string type: object imageGeneration_request_imageVariationParams: description: Parameters for IMAGE_VARIATION task properties: images: items: format: byte type: string maxItems: 5 minItems: 1 type: array similarityStrength: format: float maximum: 1 minimum: 0.2 type: number text: maxLength: 1024 minLength: 1 type: string negativeText: maxLength: 1024 minLength: 1 type: string type: object imageGeneration_request_inPaintingParams: description: Parameters for INPAINTING task properties: image: format: byte type: string maskImage: format: byte type: string maskPrompt: type: string text: maxLength: 1024 minLength: 1 type: string negativeText: type: string type: object imageGeneration_request_outPaintingParams: description: Parameters for OUTPAINTING task properties: image: format: byte type: string maskImage: format: byte type: string maskPrompt: type: string outPaintingMode: default: DEFAULT enum: - PRECISE - DEFAULT type: string text: type: string negativeText: type: string type: object imageGeneration_request_backgroundRemovalParams: description: Parameters for BACKGROUND_REMOVAL task properties: image: format: byte type: string type: object imageGeneration_request_imageGenerationConfig: description: General image generation configuration properties: width: example: 1024 type: integer height: example: 1024 type: integer quality: default: standard enum: - standard - premium type: string cfgScale: default: 6.5 format: float maximum: 10 minimum: 1.1 type: number seed: maximum: 2147483646 minimum: 0 type: integer numberOfImages: default: 1 maximum: 5 minimum: 1 type: integer type: object imageGeneration_request: properties: modelId: default: amazon.nova-canvas-v1:0 description: Model to use for image generation type: string taskType: description: Type of image generation task enum: - TEXT_IMAGE - COLOR_GUIDED_GENERATION - IMAGE_VARIATION - INPAINTING - OUTPAINTING - BACKGROUND_REMOVAL - VIRTUAL_TRY_ON type: string textToImageParams: $ref: '#/components/schemas/imageGeneration_request_textToImageParams' colorGuidedGenerationParams: $ref: '#/components/schemas/imageGeneration_request_colorGuidedGenerationParams' imageVariationParams: $ref: '#/components/schemas/imageGeneration_request_imageVariationParams' inPaintingParams: $ref: '#/components/schemas/imageGeneration_request_inPaintingParams' outPaintingParams: $ref: '#/components/schemas/imageGeneration_request_outPaintingParams' backgroundRemovalParams: $ref: '#/components/schemas/imageGeneration_request_backgroundRemovalParams' virtualTryOnParams: description: Parameters for VIRTUAL_TRY_ON task type: object imageGenerationConfig: $ref: '#/components/schemas/imageGeneration_request_imageGenerationConfig' region: default: us-east-1 description: AWS region for Nova Canvas enum: - us-east-1 - ap-northeast-1 - eu-west-1 type: string required: - taskType type: object imageGeneration_200_response: example: images: - images - images error: error maskImage: maskImage properties: images: description: Array of base64-encoded generated images items: format: byte type: string type: array maskImage: description: Base64-encoded mask image (for virtual try-on) format: byte type: string error: description: Error message if any images were blocked by content moderation type: string required: - images type: object listAITools_200_response_tools_inner_toolSpec_inputSchema: example: json: type: object properties: location: type: string description: City name unit: type: string enum: - celsius - fahrenheit required: - location properties: json: description: JSON Schema defining function parameters example: type: object properties: location: type: string description: City name unit: type: string enum: - celsius - fahrenheit required: - location type: object type: object listAITools_200_response_tools_inner_toolSpec: example: inputSchema: json: type: object properties: location: type: string description: City name unit: type: string enum: - celsius - fahrenheit required: - location name: get_weather description: "Get current weather for a location. Returns temperature, conditions,\ \ humidity, wind, and more." properties: name: example: get_weather type: string description: example: "Get current weather for a location. Returns temperature, conditions,\ \ humidity, wind, and more." type: string inputSchema: $ref: '#/components/schemas/listAITools_200_response_tools_inner_toolSpec_inputSchema' type: object listAITools_200_response_tools_inner: example: toolSpec: inputSchema: json: type: object properties: location: type: string description: City name unit: type: string enum: - celsius - fahrenheit required: - location name: get_weather description: "Get current weather for a location. Returns temperature, conditions,\ \ humidity, wind, and more." properties: toolSpec: $ref: '#/components/schemas/listAITools_200_response_tools_inner_toolSpec' type: object listAITools_200_response: example: count: 4 tools: - toolSpec: inputSchema: json: type: object properties: location: type: string description: City name unit: type: string enum: - celsius - fahrenheit required: - location name: get_weather description: "Get current weather for a location. Returns temperature,\ \ conditions, humidity, wind, and more." - toolSpec: inputSchema: json: type: object properties: location: type: string description: City name unit: type: string enum: - celsius - fahrenheit required: - location name: get_weather description: "Get current weather for a location. Returns temperature,\ \ conditions, humidity, wind, and more." properties: tools: description: Array of available tool specifications items: $ref: '#/components/schemas/listAITools_200_response_tools_inner' type: array count: description: Number of available tools example: 4 type: integer required: - count - tools type: object listAIToolNames_200_response: example: count: 4 tools: - get_weather - calculate - search_web - generate_image properties: tools: description: Array of tool names example: - get_weather - calculate - search_web - generate_image items: type: string type: array count: description: Number of tools example: 4 type: integer required: - count - tools type: object getAIToolExecutionStatus_200_response_result: description: Tool execution result (only present when status='complete'). Structure varies by tool type. example: images: - "data:image/jpeg;base64,/9j/4AAQSkZJRg..." s3Urls: - https://au-stg-ai-images.s3.amazonaws.com/generated/exec_abc123... properties: images: description: "For image generation: Array of base64-encoded data URIs for\ \ inline display/preview" items: example: "data:image/jpeg;base64,/9j/4AAQSkZJRg..." type: string type: array s3Urls: description: "For image generation: Array of signed S3 URLs for high-quality\ \ downloads (expire after 1 hour)" items: example: https://au-stg-ai-images.s3.amazonaws.com/generated/exec_abc123...?X-Amz-Security-Token=... type: string type: array type: object getAIToolExecutionStatus_200_response: example: result: images: - "data:image/jpeg;base64,/9j/4AAQSkZJRg..." s3Urls: - https://au-stg-ai-images.s3.amazonaws.com/generated/exec_abc123... duration: 11 executionId: exec_abc123def456 createdAt: 1730271600 completedAt: 1730271612 startedAt: 1730271601 error: "Image generation failed: Invalid prompt" toolName: generate_image status: complete properties: executionId: example: exec_abc123def456 type: string toolName: example: generate_image type: string status: description: "Execution status: pending, running, complete, or failed" example: complete type: string result: $ref: '#/components/schemas/getAIToolExecutionStatus_200_response_result' error: description: Error message (only present when status='failed') example: "Image generation failed: Invalid prompt" type: string createdAt: description: Unix timestamp when execution was created example: 1730271600 type: integer startedAt: description: Unix timestamp when execution started (if status >= 'running') example: 1730271601 type: integer completedAt: description: "Unix timestamp when execution completed (if status in ['complete',\ \ 'failed'])" example: 1730271612 type: integer duration: description: Execution duration in seconds (if completed) example: 11 type: number required: - createdAt - executionId - status - toolName type: object getAIToolExecutionStatus_404_response: example: executionId: exec_abc123def456 error: Execution not found properties: error: example: Execution not found type: string executionId: example: exec_abc123def456 type: string type: object getDurableExecutionStatus_200_response_pendingTools_inner: example: input: location: Sydney name: get_weather toolUseId: toolu_bdrk_012KTC8NCG... properties: name: example: get_weather type: string toolUseId: example: toolu_bdrk_012KTC8NCG... type: string input: example: location: Sydney type: object type: object getDurableExecutionStatus_200_response_result_response: example: role: assistant content: The weather in Sydney is sunny. properties: role: example: assistant type: string content: example: The weather in Sydney is sunny. type: string type: object getDurableExecutionStatus_200_response_result_usage: description: Token usage and cost for the final synthesis turn example: costCents: 5.962134 inputTokens: 0 outputTokens: 6 totalTokens: 1 properties: inputTokens: type: integer outputTokens: type: integer totalTokens: type: integer costCents: description: Cost of the final synthesis turn in US cents format: float type: number type: object getDurableExecutionStatus_200_response_result: description: Present when status is complete example: response: role: assistant content: The weather in Sydney is sunny. usage: costCents: 5.962134 inputTokens: 0 outputTokens: 6 totalTokens: 1 toolExecutions: - "{}" - "{}" properties: response: $ref: '#/components/schemas/getDurableExecutionStatus_200_response_result_response' usage: $ref: '#/components/schemas/getDurableExecutionStatus_200_response_result_usage' toolExecutions: items: type: object type: array type: object getDurableExecutionStatus_200_response_error: description: Present when status is failed example: ErrorType: ErrorType ErrorMessage: ErrorMessage properties: ErrorMessage: type: string ErrorType: type: string type: object getDurableExecutionStatus_200_response: example: result: response: role: assistant content: The weather in Sydney is sunny. usage: costCents: 5.962134 inputTokens: 0 outputTokens: 6 totalTokens: 1 toolExecutions: - "{}" - "{}" callbackId: Ab9hZXi/YXJuOmF3czpsYW1iZGE... requestId: XkdVWiEfSwMEPrw= executionArn: arn:aws:lambda:ap-southeast-2:... awsStatus: SUCCEEDED pendingTools: - input: location: Sydney name: get_weather toolUseId: toolu_bdrk_012KTC8NCG... - input: location: Sydney name: get_weather toolUseId: toolu_bdrk_012KTC8NCG... error: ErrorType: ErrorType ErrorMessage: ErrorMessage status: complete properties: requestId: example: XkdVWiEfSwMEPrw= type: string executionArn: example: arn:aws:lambda:ap-southeast-2:... type: string status: enum: - pending - running - waiting_callback - complete - failed example: complete type: string awsStatus: description: Raw AWS Step Functions status example: SUCCEEDED type: string callbackId: description: Present when status is waiting_callback - use with /chat/callback example: Ab9hZXi/YXJuOmF3czpsYW1iZGE... type: string pendingTools: description: Present when status is waiting_callback - tools waiting for results items: $ref: '#/components/schemas/getDurableExecutionStatus_200_response_pendingTools_inner' type: array result: $ref: '#/components/schemas/getDurableExecutionStatus_200_response_result' error: $ref: '#/components/schemas/getDurableExecutionStatus_200_response_error' type: object submitToolCallback_request_toolResults_inner: properties: toolUseId: description: The toolUseId from pendingTools example: toolu_bdrk_012KTC8NCG... type: string result: description: The result of executing the tool example: temperature: 24C conditions: Sunny type: object required: - result - toolUseId type: object submitToolCallback_request: properties: callbackId: description: The callbackId from the waiting_callback status response example: Ab9hZXi/YXJuOmF3czpsYW1iZGE... type: string toolResults: description: Results of client-executed tools items: $ref: '#/components/schemas/submitToolCallback_request_toolResults_inner' type: array required: - callbackId - toolResults type: object submitToolCallback_200_response: example: callbackId: callbackId success: true message: Callback submitted successfully properties: success: example: true type: boolean message: example: Callback submitted successfully type: string callbackId: description: Echo of the callbackId for confirmation type: string type: object getAIOrchestrationStatus_200_response_tools_inner: example: result: "{}" executionId: exec_abc123def456 error: error toolName: generate_image status: complete properties: executionId: example: exec_abc123def456 type: string toolName: example: generate_image type: string status: enum: - pending - running - complete - failed example: complete type: string result: description: Tool result (if complete) type: object error: description: Error message (if failed) type: string type: object getAIOrchestrationStatus_200_response: example: createdAt: 2000-01-23T04:56:07.000+00:00 completedAt: 2000-01-23T04:56:07.000+00:00 orchestrationId: orch_abc123def456789012345678901234 completedTools: 2 synthesizedResponse: Based on the image I generated and the web research... error: error tools: - result: "{}" executionId: exec_abc123def456 error: error toolName: generate_image status: complete - result: "{}" executionId: exec_abc123def456 error: error toolName: generate_image status: complete status: complete toolCount: 2 properties: orchestrationId: description: Unique orchestration identifier example: orch_abc123def456789012345678901234 type: string status: description: Current orchestration status enum: - pending - polling - synthesizing - complete - failed example: complete type: string toolCount: description: Total number of async tools in this orchestration example: 2 type: integer completedTools: description: Number of tools that have completed example: 2 type: integer synthesizedResponse: description: AI-synthesized response combining all tool results (only present when status=complete) example: Based on the image I generated and the web research... type: string tools: description: Status of individual tool executions items: $ref: '#/components/schemas/getAIOrchestrationStatus_200_response_tools_inner' type: array error: description: Error message (only present when status=failed) type: string createdAt: description: When orchestration was created format: date-time type: string completedAt: description: When orchestration completed (if status in complete or failed) format: date-time type: string required: - createdAt - orchestrationId - status - toolCount type: object getAIOrchestrationStatus_404_response: example: orchestrationId: orch_abc123def456789012345678901234 error: Orchestration not found properties: error: example: Orchestration not found type: string orchestrationId: example: orch_abc123def456789012345678901234 type: string type: object listAIToolExecutions_200_response_executions_inner: example: executionId: exec_abc123def456 createdAt: 2000-01-23T04:56:07.000+00:00 completedAt: 2000-01-23T04:56:07.000+00:00 toolName: generate_image status: complete properties: executionId: example: exec_abc123def456 type: string toolName: example: generate_image type: string status: description: "Execution status: pending, running, complete, or failed" example: complete type: string createdAt: format: date-time type: string completedAt: format: date-time type: string type: object listAIToolExecutions_200_response: example: executions: - executionId: exec_abc123def456 createdAt: 2000-01-23T04:56:07.000+00:00 completedAt: 2000-01-23T04:56:07.000+00:00 toolName: generate_image status: complete - executionId: exec_abc123def456 createdAt: 2000-01-23T04:56:07.000+00:00 completedAt: 2000-01-23T04:56:07.000+00:00 toolName: generate_image status: complete count: 0 orgId: orgId status: status properties: executions: items: $ref: '#/components/schemas/listAIToolExecutions_200_response_executions_inner' type: array count: description: Number of executions returned type: integer orgId: description: Organization identifier type: string status: description: Filter applied (or 'all') type: string required: - count - executions - orgId type: object listAIAgents_200_response_agents_inner: example: assignedSkills: - assignedSkills - assignedSkills agentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 guardrailPreset: guardrailPreset modelId: modelId description: description hasOverlay: true createdAt: 2000-01-23T04:56:07.000+00:00 longContext: true name: name temperature: 0.8008281904610115 maxTokens: 6 isGlobal: true group: group allowedTools: - allowedTools - allowedTools updatedAt: 2000-01-23T04:56:07.000+00:00 properties: agentId: format: uuid type: string name: type: string description: type: string group: type: string modelId: type: string temperature: type: number maxTokens: type: integer allowedTools: items: type: string type: array assignedSkills: items: type: string type: array longContext: type: boolean guardrailPreset: type: string isGlobal: type: boolean hasOverlay: type: boolean createdAt: format: date-time type: string updatedAt: format: date-time type: string type: object listAIAgents_200_response: example: agents: - assignedSkills: - assignedSkills - assignedSkills agentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 guardrailPreset: guardrailPreset modelId: modelId description: description hasOverlay: true createdAt: 2000-01-23T04:56:07.000+00:00 longContext: true name: name temperature: 0.8008281904610115 maxTokens: 6 isGlobal: true group: group allowedTools: - allowedTools - allowedTools updatedAt: 2000-01-23T04:56:07.000+00:00 - assignedSkills: - assignedSkills - assignedSkills agentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 guardrailPreset: guardrailPreset modelId: modelId description: description hasOverlay: true createdAt: 2000-01-23T04:56:07.000+00:00 longContext: true name: name temperature: 0.8008281904610115 maxTokens: 6 isGlobal: true group: group allowedTools: - allowedTools - allowedTools updatedAt: 2000-01-23T04:56:07.000+00:00 properties: agents: items: $ref: '#/components/schemas/listAIAgents_200_response_agents_inner' type: array type: object createAIAgent_request: properties: name: example: Code Review Assistant type: string description: example: Reviews code for security vulnerabilities and best practices type: string group: example: development type: string systemPrompt: example: You are a senior software engineer specializing in secure code review. type: string temperature: example: 0.3 maximum: 1 minimum: 0 type: number modelId: example: anthropic.claude-3-5-sonnet-20241022-v2:0 type: string maxTokens: example: 4000 maximum: 200000 minimum: 1 type: integer allowedTools: example: - fetch_web_content - search_web items: type: string type: array allowedCollections: items: type: string type: array assignedSkills: description: Skill IDs to assign to this agent items: type: string type: array createdBy: description: User identifier who created the agent type: string longContext: description: Enable 1M context window support type: boolean guardrailPreset: description: Guardrail preset name enum: - official - official-sensitive - protected type: string filterPolicies: description: Filter policy IDs to apply to this agent's inference requests items: type: string type: array required: - description - modelId - name - systemPrompt type: object createAIAgent_201_response: example: agent: "{}" success: true message: Agent created successfully properties: success: example: true type: boolean agent: type: object message: example: Agent created successfully type: string type: object getAIAgent_200_response_agent: example: assignedSkills: - assignedSkills - assignedSkills agentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 guardrailPreset: guardrailPreset modelId: modelId description: description hasOverlay: true systemPrompt: systemPrompt createdAt: 2000-01-23T04:56:07.000+00:00 createdBy: createdBy longContext: true name: name temperature: 0.8008281904610115 maxTokens: 6 allowedCollections: - allowedCollections - allowedCollections isGlobal: true group: group allowedTools: - allowedTools - allowedTools updatedAt: 2000-01-23T04:56:07.000+00:00 properties: agentId: format: uuid type: string name: type: string description: type: string group: type: string systemPrompt: type: string modelId: type: string temperature: type: number maxTokens: type: integer allowedTools: items: type: string type: array allowedCollections: items: type: string type: array assignedSkills: items: type: string type: array longContext: description: Whether 1M context window is enabled type: boolean guardrailPreset: description: Guardrail preset name type: string isGlobal: description: Whether this is a platform-managed global agent type: boolean hasOverlay: description: Whether the requesting org has a per-org overlay for this global agent type: boolean createdBy: type: string createdAt: format: date-time type: string updatedAt: format: date-time type: string type: object getAIAgent_200_response: example: agent: assignedSkills: - assignedSkills - assignedSkills agentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 guardrailPreset: guardrailPreset modelId: modelId description: description hasOverlay: true systemPrompt: systemPrompt createdAt: 2000-01-23T04:56:07.000+00:00 createdBy: createdBy longContext: true name: name temperature: 0.8008281904610115 maxTokens: 6 allowedCollections: - allowedCollections - allowedCollections isGlobal: true group: group allowedTools: - allowedTools - allowedTools updatedAt: 2000-01-23T04:56:07.000+00:00 properties: agent: $ref: '#/components/schemas/getAIAgent_200_response_agent' type: object updateAIAgent_request: properties: name: type: string description: type: string group: type: string systemPrompt: type: string temperature: maximum: 1 minimum: 0 type: number modelId: type: string maxTokens: maximum: 200000 minimum: 1 type: integer allowedTools: items: type: string type: array allowedCollections: items: type: string type: array assignedSkills: description: Skill IDs to assign to this agent items: type: string type: array longContext: description: Enable 1M context window support type: boolean guardrailPreset: description: Guardrail preset name enum: - official - official-sensitive - protected type: string filterPolicies: description: Filter policy IDs to apply to this agent's inference requests items: type: string type: array type: object updateAIAgent_200_response: example: agent: "{}" success: true message: Agent updated successfully properties: success: example: true type: boolean agent: type: object message: example: Agent updated successfully type: string type: object deleteAIAgent_200_response: example: success: true message: Agent deleted successfully properties: success: example: true type: boolean message: example: Agent deleted successfully type: string type: object chatWithAIAgent_request: properties: message: description: The user's message to the agent type: string sessionId: description: Optional session ID to continue a conversation format: uuid type: string userId: description: Optional user identifier for session isolation type: string stream: default: false description: Whether to stream the response (SSE) type: boolean async: default: false description: "Enable async/durable execution mode. When true, returns 202\ \ with pollUrl. Use for long-running agent tasks." type: boolean system: description: Optional additional system prompt (appended to agent's configured prompt) type: string longContext: default: false description: Per-request override to force 1M context window routing type: boolean maxToolIterations: description: Maximum tool auto-execution iterations for this request maximum: 1000 minimum: 1 type: integer allowedCollections: description: Per-request override for vector DB collections the agent can query items: type: string type: array required: - message type: object chatWithAIAgent_200_response_response_usage: example: costCents: 5.962134 inputTokens: 0 outputTokens: 6 totalTokens: 1 properties: inputTokens: type: integer outputTokens: type: integer totalTokens: type: integer costCents: description: Cost of this inference call in US cents format: float type: number type: object chatWithAIAgent_200_response_response: example: stopReason: stopReason usage: costCents: 5.962134 inputTokens: 0 outputTokens: 6 totalTokens: 1 toolResults: - "{}" - "{}" text: text properties: text: type: string stopReason: type: string usage: $ref: '#/components/schemas/chatWithAIAgent_200_response_response_usage' toolResults: items: type: object type: array type: object chatWithAIAgent_200_response: example: response: stopReason: stopReason usage: costCents: 5.962134 inputTokens: 0 outputTokens: 6 totalTokens: 1 toolResults: - "{}" - "{}" text: text sessionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 properties: sessionId: format: uuid type: string response: $ref: '#/components/schemas/chatWithAIAgent_200_response_response' type: object chatWithAIAgent_202_response: example: agentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 requestId: 90fe0c53-a41b-4b28-b19e-5e900b3df959 pollUrl: /ai/chat/executions/90fe0c53-a41b-4b28-b19e-5e900b3df959 agentName: Weather Assistant sessionId: sessionId message: Agent execution started. Poll the status endpoint for updates. status: queued properties: requestId: description: Unique request identifier for polling example: 90fe0c53-a41b-4b28-b19e-5e900b3df959 type: string agentId: description: The agent processing the request format: uuid type: string agentName: description: Human-readable agent name example: Weather Assistant type: string sessionId: description: Session ID (if provided) type: string status: description: Initial status enum: - queued example: queued type: string message: example: Agent execution started. Poll the status endpoint for updates. type: string pollUrl: description: URL to poll for execution status example: /ai/chat/executions/90fe0c53-a41b-4b28-b19e-5e900b3df959 type: string required: - agentId - pollUrl - requestId - status type: object getAgentOverlay_200_response_overlay: example: disabledSkills: - disabledSkills - disabledSkills guardrailPreset: guardrailPreset modelId: modelId disabledTools: - disabledTools - disabledTools temperature: 0.8008281904610115 maxTokens: 6 additionalSkills: - additionalSkills - additionalSkills allowedCollections: - allowedCollections - allowedCollections systemPromptAppend: systemPromptAppend version: 1 additionalTools: - additionalTools - additionalTools nullable: true properties: modelId: type: string temperature: type: number maxTokens: type: integer disabledSkills: items: type: string type: array additionalSkills: items: type: string type: array additionalTools: items: type: string type: array disabledTools: items: type: string type: array systemPromptAppend: type: string allowedCollections: items: type: string type: array guardrailPreset: type: string version: type: integer type: object getAgentOverlay_200_response_base: description: Base global agent metadata example: assignedSkillIds: - assignedSkillIds - assignedSkillIds agentId: agentId modelId: modelId name: name allowedTools: - allowedTools - allowedTools properties: agentId: type: string name: type: string modelId: type: string allowedTools: items: type: string type: array assignedSkillIds: items: type: string type: array type: object getAgentOverlay_200_response: example: overlay: disabledSkills: - disabledSkills - disabledSkills guardrailPreset: guardrailPreset modelId: modelId disabledTools: - disabledTools - disabledTools temperature: 0.8008281904610115 maxTokens: 6 additionalSkills: - additionalSkills - additionalSkills allowedCollections: - allowedCollections - allowedCollections systemPromptAppend: systemPromptAppend version: 1 additionalTools: - additionalTools - additionalTools base: assignedSkillIds: - assignedSkillIds - assignedSkillIds agentId: agentId modelId: modelId name: name allowedTools: - allowedTools - allowedTools properties: overlay: $ref: '#/components/schemas/getAgentOverlay_200_response_overlay' base: $ref: '#/components/schemas/getAgentOverlay_200_response_base' type: object upsertAgentOverlay_request: properties: modelId: description: Override the base agent's model type: string temperature: description: Override temperature maximum: 1 minimum: 0 type: number maxTokens: description: Override max tokens minimum: 1 type: integer disabledSkills: description: Global skill IDs to exclude items: type: string type: array additionalSkills: description: Org-owned skill IDs to add items: type: string type: array additionalTools: description: Tool names to add items: type: string type: array disabledTools: description: Tool names to remove items: type: string type: array systemPromptAppend: description: Text appended to base system prompt type: string allowedCollections: description: Vector DB collections items: type: string type: array guardrailPreset: description: Guardrail preset enum: - official - official-sensitive - protected type: string version: description: Current version for optimistic concurrency type: integer type: object upsertAgentOverlay_200_response: example: overlay: "{}" properties: overlay: type: object type: object deleteAgentOverlay_200_response: example: success: true message: Agent reverted to defaults properties: success: example: true type: boolean message: example: Agent reverted to defaults type: string type: object listCustomTools_200_response_tools_inner: example: createdAt: 2000-01-23T04:56:07.000+00:00 inputSchema: "{}" isAsync: false name: check_inventory description: Check product inventory levels edgeFunctionUrl: https://my-edge-function.quant.cloud properties: name: example: check_inventory type: string description: example: Check product inventory levels type: string edgeFunctionUrl: example: https://my-edge-function.quant.cloud type: string isAsync: example: false type: boolean inputSchema: type: object createdAt: format: date-time type: string type: object listCustomTools_200_response: example: count: 0 tools: - createdAt: 2000-01-23T04:56:07.000+00:00 inputSchema: "{}" isAsync: false name: check_inventory description: Check product inventory levels edgeFunctionUrl: https://my-edge-function.quant.cloud - createdAt: 2000-01-23T04:56:07.000+00:00 inputSchema: "{}" isAsync: false name: check_inventory description: Check product inventory levels edgeFunctionUrl: https://my-edge-function.quant.cloud properties: tools: items: $ref: '#/components/schemas/listCustomTools_200_response_tools_inner' type: array count: type: integer type: object createCustomTool_request: properties: name: description: Unique tool name (alphanumeric and underscores only) example: check_inventory type: string description: description: Human-readable description of what the tool does example: Check product inventory levels in warehouse type: string edgeFunctionCode: description: JavaScript source code for the edge function type: string inputSchema: description: JSON Schema defining the tool's input parameters type: object isAsync: default: false description: Whether this tool runs asynchronously (>5 seconds) type: boolean timeoutSeconds: default: 30 description: Tool execution timeout maximum: 300 minimum: 5 type: integer outputSchema: description: JSON Schema defining the tool's output structure nullable: true type: object outputSchemaDescription: description: Human-readable description of the tool's output nullable: true type: string category: description: Category to group related tools maxLength: 100 nullable: true type: string responseMode: description: "How the tool response is handled: llm (passed back to model)\ \ or direct (returned to user)" enum: - llm - direct nullable: true type: string required: - description - edgeFunctionCode - inputSchema - name type: object createCustomTool_201_response: example: success: true edgeFunctionUrl: https://preview.quantcdn.io/_quant/ai-exec/org/project/uuid message: Custom tool deployed successfully tool: "{}" edgeFunctionCode: edgeFunctionCode isUpdate: true properties: success: example: true type: boolean tool: type: object edgeFunctionUrl: description: Computed edge function URL (read-only) example: https://preview.quantcdn.io/_quant/ai-exec/org/project/uuid type: string edgeFunctionCode: description: The deployed edge function code type: string isUpdate: description: Whether this was an update to an existing tool type: boolean message: example: Custom tool deployed successfully type: string type: object getCustomTool_200_response_tool: example: responseMode: llm createdAt: 2000-01-23T04:56:07.000+00:00 outputSchema: "{}" outputSchemaDescription: outputSchemaDescription inputSchema: "{}" isAsync: false name: check_inventory description: Check product inventory levels edgeFunctionUrl: https://preview.quantcdn.io/_quant/ai-exec/org/project/uuid category: category edgeFunctionCode: edgeFunctionCode properties: name: example: check_inventory type: string description: example: Check product inventory levels type: string edgeFunctionUrl: example: https://preview.quantcdn.io/_quant/ai-exec/org/project/uuid type: string edgeFunctionCode: description: The deployed edge function source code type: string isAsync: example: false type: boolean inputSchema: type: object outputSchema: nullable: true type: object outputSchemaDescription: nullable: true type: string category: nullable: true type: string responseMode: enum: - llm - direct nullable: true type: string createdAt: format: date-time type: string type: object getCustomTool_200_response: example: tool: responseMode: llm createdAt: 2000-01-23T04:56:07.000+00:00 outputSchema: "{}" outputSchemaDescription: outputSchemaDescription inputSchema: "{}" isAsync: false name: check_inventory description: Check product inventory levels edgeFunctionUrl: https://preview.quantcdn.io/_quant/ai-exec/org/project/uuid category: category edgeFunctionCode: edgeFunctionCode properties: tool: $ref: '#/components/schemas/getCustomTool_200_response_tool' type: object deleteCustomTool_200_response: example: success: true message: Custom tool deleted successfully properties: success: example: true type: boolean message: example: Custom tool deleted successfully type: string type: object listSkills_200_response_skills_inner: example: skillId: skillId triggerCondition: triggerCondition installedAt: 2000-01-23T04:56:07.000+00:00 name: name namespace: namespace description: description source: "{}" tags: - tags - tags updatedAt: 2000-01-23T04:56:07.000+00:00 properties: skillId: type: string name: type: string description: type: string tags: items: type: string type: array source: type: object triggerCondition: type: string namespace: type: string installedAt: format: date-time type: string updatedAt: format: date-time type: string type: object listSkills_200_response: example: skills: - skillId: skillId triggerCondition: triggerCondition installedAt: 2000-01-23T04:56:07.000+00:00 name: name namespace: namespace description: description source: "{}" tags: - tags - tags updatedAt: 2000-01-23T04:56:07.000+00:00 - skillId: skillId triggerCondition: triggerCondition installedAt: 2000-01-23T04:56:07.000+00:00 name: name namespace: namespace description: description source: "{}" tags: - tags - tags updatedAt: 2000-01-23T04:56:07.000+00:00 count: 0 properties: skills: items: $ref: '#/components/schemas/listSkills_200_response_skills_inner' type: array count: type: integer type: object createSkill_request: properties: name: example: code-review type: string description: example: Expert code review with security analysis type: string content: example: You are an expert code reviewer... type: string triggerCondition: example: When the user asks for code review type: string tags: items: type: string type: array requiredTools: items: type: string type: array namespace: type: string files: type: object disableModelInvocation: type: boolean allowedTools: items: type: string type: array installedBy: type: string required: - content - name - triggerCondition type: object createSkill_201_response: example: success: true skill: "{}" message: Skill created successfully properties: success: example: true type: boolean skill: type: object message: example: Skill created successfully type: string type: object getSkill_200_response_skill: example: triggerCondition: triggerCondition requiredTools: - requiredTools - requiredTools installedAt: 2000-01-23T04:56:07.000+00:00 description: description source: "{}" content: content tags: - tags - tags skillId: skillId name: name namespace: namespace files: "{}" disableModelInvocation: true allowedTools: - allowedTools - allowedTools updatedAt: 2000-01-23T04:56:07.000+00:00 properties: skillId: type: string name: type: string description: type: string content: type: string triggerCondition: type: string tags: items: type: string type: array source: type: object requiredTools: items: type: string type: array files: type: object namespace: type: string disableModelInvocation: type: boolean allowedTools: items: type: string type: array installedAt: format: date-time type: string updatedAt: format: date-time type: string type: object getSkill_200_response: example: skill: triggerCondition: triggerCondition requiredTools: - requiredTools - requiredTools installedAt: 2000-01-23T04:56:07.000+00:00 description: description source: "{}" content: content tags: - tags - tags skillId: skillId name: name namespace: namespace files: "{}" disableModelInvocation: true allowedTools: - allowedTools - allowedTools updatedAt: 2000-01-23T04:56:07.000+00:00 properties: skill: $ref: '#/components/schemas/getSkill_200_response_skill' type: object updateSkill_request: properties: name: type: string description: type: string content: type: string triggerCondition: type: string tags: items: type: string type: array requiredTools: items: type: string type: array source: type: object files: type: object disableModelInvocation: type: boolean allowedTools: items: type: string type: array namespace: type: string type: object updateSkill_200_response: example: success: true skill: "{}" message: Skill updated successfully properties: success: example: true type: boolean skill: type: object message: example: Skill updated successfully type: string type: object deleteSkill_200_response: example: success: true message: Skill deleted successfully properties: success: example: true type: boolean message: example: Skill deleted successfully type: string type: object importSkill_request_source: properties: type: enum: - skills.sh - github type: string url: type: string repo: type: string path: type: string version: type: string required: - type type: object importSkill_request: properties: source: $ref: '#/components/schemas/importSkill_request_source' name: type: string description: type: string tags: items: type: string type: array triggerCondition: type: string requiredTools: items: type: string type: array disableModelInvocation: type: boolean allowedTools: items: type: string type: array installedBy: type: string required: - source type: object importSkill_201_response: example: skill: "{}" message: message properties: skill: type: object message: type: string type: object listSkillCollections_200_response_collections_inner: example: skills: - skills - skills namespace: superpowers count: 14 properties: namespace: example: superpowers type: string count: example: 14 type: integer skills: items: type: string type: array type: object listSkillCollections_200_response: example: collections: - skills: - skills - skills namespace: superpowers count: 14 - skills: - skills - skills namespace: superpowers count: 14 properties: collections: items: $ref: '#/components/schemas/listSkillCollections_200_response_collections_inner' type: array type: object importSkillCollection_request_source: properties: type: enum: - github type: string repo: example: obra/superpowers type: string path: example: skills type: string version: example: main type: string required: - repo - type type: object importSkillCollection_request: properties: namespace: example: superpowers pattern: "^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$" type: string source: $ref: '#/components/schemas/importSkillCollection_request_source' tags: items: type: string type: array installedBy: type: string required: - namespace - source type: object importSkillCollection_201_response: example: skills: - "{}" - "{}" imported: 0 namespace: namespace failed: 6 errors: - "{}" - "{}" properties: namespace: type: string imported: type: integer failed: type: integer skills: items: type: object type: array errors: items: type: object type: array type: object syncSkillCollection_200_response: example: skills: - "{}" - "{}" synced: 0 removedFromSource: - removedFromSource - removedFromSource created: 6 namespace: namespace failed: 1 properties: namespace: type: string synced: type: integer created: type: integer failed: type: integer removedFromSource: items: type: string type: array skills: items: type: object type: array type: object 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 listVectorCollections_200_response_collections_inner: example: documentCount: 0 createdAt: 2000-01-23T04:56:07.000+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 listVectorCollections_200_response: example: collections: - documentCount: 0 createdAt: 2000-01-23T04:56:07.000+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-23T04:56:07.000+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 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 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 getVectorCollection_200_response_collection: example: documentCount: 0 createdAt: 2000-01-23T04:56:07.000+00:00 name: name description: description embeddingModel: embeddingModel collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 dimensions: 6 updatedAt: 2000-01-23T04:56:07.000+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 getVectorCollection_200_response: example: collection: documentCount: 0 createdAt: 2000-01-23T04:56:07.000+00:00 name: name description: description embeddingModel: embeddingModel collectionId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 dimensions: 6 updatedAt: 2000-01-23T04:56:07.000+00:00 properties: collection: $ref: '#/components/schemas/getVectorCollection_200_response_collection' 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 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 uploadVectorDocuments_request: properties: documents: items: $ref: '#/components/schemas/uploadVectorDocuments_request_documents_inner' type: array required: - documents 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_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 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_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 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_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 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 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 listFiles_200_response_files_inner: example: createdAt: 2000-01-23T04:56:07.000+00:00 metadata: "{}" filename: filename size: 0 contentType: contentType fileId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 properties: fileId: format: uuid type: string filename: type: string contentType: type: string size: type: integer metadata: type: object createdAt: format: date-time type: string type: object listFiles_200_response: example: nextCursor: nextCursor hasMore: true files: - createdAt: 2000-01-23T04:56:07.000+00:00 metadata: "{}" filename: filename size: 0 contentType: contentType fileId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 - createdAt: 2000-01-23T04:56:07.000+00:00 metadata: "{}" filename: filename size: 0 contentType: contentType fileId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 properties: files: items: $ref: '#/components/schemas/listFiles_200_response_files_inner' type: array nextCursor: description: Cursor for next page nullable: true type: string hasMore: description: True if more results available type: boolean type: object uploadFile_request: properties: content: description: Base64-encoded file content (for direct upload). Required unless using requestUploadUrl. type: string requestUploadUrl: default: false description: Set to true to get a presigned S3 upload URL instead of uploading directly. type: boolean size: description: File size in bytes. Optional but recommended for presigned uploads. type: integer filename: description: Original filename example: diagram.png type: string contentType: description: MIME type of the file example: image/png type: string metadata: additionalProperties: true description: Custom metadata for filtering. Any fields allowed. example: collectionId: col-123 tags: - architecture - generated type: object required: - contentType type: object uploadFile_201_response: example: expiresIn: 0 s3Uri: s3Uri createdAt: 2000-01-23T04:56:07.000+00:00 metadata: "{}" s3Key: s3Key filename: filename uploadUrl: https://openapi-generator.tech size: 6 contentType: contentType url: https://openapi-generator.tech fileId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 properties: fileId: format: uuid type: string s3Uri: description: S3 URI (direct upload only) type: string url: description: Presigned download URL (direct upload only) format: uri type: string uploadUrl: description: Presigned PUT URL (presigned upload only) format: uri type: string s3Key: description: S3 object key (presigned upload only) type: string expiresIn: description: URL expiry in seconds (presigned upload only) type: integer filename: type: string contentType: type: string size: type: integer metadata: type: object createdAt: format: date-time type: string type: object getFile_200_response: example: s3Uri: s3Uri createdAt: 2000-01-23T04:56:07.000+00:00 metadata: "{}" filename: filename size: 0 contentType: contentType url: https://openapi-generator.tech fileId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 properties: fileId: format: uuid type: string s3Uri: type: string url: description: Presigned download URL (1 hour) format: uri type: string filename: type: string contentType: type: string size: type: integer metadata: type: object createdAt: format: date-time type: string type: object deleteFile_200_response: example: message: File deleted fileId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91 properties: message: example: File deleted type: string fileId: format: uuid type: string type: object listOrchestrations_200_response: example: nextCursor: nextCursor orchestrations: - "{}" - "{}" properties: orchestrations: items: type: object type: array nextCursor: nullable: true type: string type: object createOrchestration_request_inputSource: properties: type: description: Input source type (api type not yet supported) enum: - static - task_query - generator type: string items: description: Static items (for type=static) items: type: object type: array taskQuery: description: Task query filters (for type=task_query) type: object generatorPrompt: description: AI prompt (for type=generator) type: string required: - type type: object createOrchestration_request_stopCondition: properties: type: default: all_complete enum: - all_complete - max_iterations - condition - manual type: string maxIterations: description: Max iterations (for type=max_iterations) minimum: 1 type: integer conditionPrompt: description: AI prompt to evaluate stop (for type=condition) type: string type: object createOrchestration_request: properties: name: description: Orchestration name example: Process batch documents type: string description: description: Optional description nullable: true type: string agentId: description: Agent to process items nullable: true type: string toolId: description: Tool to execute for items nullable: true type: string workflowId: description: Workflow to run for items nullable: true type: string inputSource: $ref: '#/components/schemas/createOrchestration_request_inputSource' batchSize: default: 10 description: Items per batch maximum: 100 minimum: 1 type: integer concurrency: default: 1 description: Concurrent items within a batch maximum: 10 minimum: 1 type: integer stopCondition: $ref: '#/components/schemas/createOrchestration_request_stopCondition' assignedSkills: description: Skill IDs to assign items: type: string type: array context: description: Optional context merged into each item before processing (e.g. shared credentials or endpoints) nullable: true type: object autoStart: default: true description: Whether to start immediately type: boolean required: - inputSource - name type: object listOrchestrationBatches_200_response_batches_inner: example: completedAt: 2000-01-23T04:56:07.000+00:00 failedCount: 5 orchestrationId: orchestrationId iteration: 0 startedAt: 2000-01-23T04:56:07.000+00:00 batchId: batchId completedCount: 1 error: error itemCount: 6 status: pending properties: batchId: type: string orchestrationId: type: string iteration: type: integer itemCount: type: integer completedCount: type: integer failedCount: type: integer status: enum: - pending - running - completed - failed type: string startedAt: format: date-time type: string completedAt: format: date-time type: string error: nullable: true type: string type: object listOrchestrationBatches_200_response: example: nextCursor: nextCursor batches: - completedAt: 2000-01-23T04:56:07.000+00:00 failedCount: 5 orchestrationId: orchestrationId iteration: 0 startedAt: 2000-01-23T04:56:07.000+00:00 batchId: batchId completedCount: 1 error: error itemCount: 6 status: pending - completedAt: 2000-01-23T04:56:07.000+00:00 failedCount: 5 orchestrationId: orchestrationId iteration: 0 startedAt: 2000-01-23T04:56:07.000+00:00 batchId: batchId completedCount: 1 error: error itemCount: 6 status: pending properties: batches: items: $ref: '#/components/schemas/listOrchestrationBatches_200_response_batches_inner' type: array nextCursor: nullable: true type: string type: object listSlackBots_200_response_bots_inner: example: assignedSkills: - assignedSkills - assignedSkills guardrailPreset: guardrailPreset modelId: modelId connected: true systemPrompt: systemPrompt allowedSubAgents: - allowedSubAgents - allowedSubAgents createdAt: 2000-01-23T04:56:07.000+00:00 sessionTtlDays: 1 setupType: quant longContext: true keywordsEnabled: true name: name temperature: 0.8008281904610115 maxTokens: 6 allowedCollections: - allowedCollections - allowedCollections botId: botId filterPolicies: - filterPolicies - filterPolicies status: active allowedTools: - allowedTools - allowedTools properties: botId: type: string name: type: string setupType: enum: - quant - byo type: string status: enum: - active - inactive type: string connected: type: boolean systemPrompt: type: string modelId: type: string temperature: type: number maxTokens: type: integer allowedTools: items: type: string type: array assignedSkills: items: type: string type: array allowedCollections: items: type: string type: array allowedSubAgents: items: type: string type: array guardrailPreset: type: string filterPolicies: items: type: string type: array longContext: type: boolean sessionTtlDays: type: integer keywordsEnabled: type: boolean createdAt: format: date-time type: string type: object listSlackBots_200_response: example: bots: - assignedSkills: - assignedSkills - assignedSkills guardrailPreset: guardrailPreset modelId: modelId connected: true systemPrompt: systemPrompt allowedSubAgents: - allowedSubAgents - allowedSubAgents createdAt: 2000-01-23T04:56:07.000+00:00 sessionTtlDays: 1 setupType: quant longContext: true keywordsEnabled: true name: name temperature: 0.8008281904610115 maxTokens: 6 allowedCollections: - allowedCollections - allowedCollections botId: botId filterPolicies: - filterPolicies - filterPolicies status: active allowedTools: - allowedTools - allowedTools - assignedSkills: - assignedSkills - assignedSkills guardrailPreset: guardrailPreset modelId: modelId connected: true systemPrompt: systemPrompt allowedSubAgents: - allowedSubAgents - allowedSubAgents createdAt: 2000-01-23T04:56:07.000+00:00 sessionTtlDays: 1 setupType: quant longContext: true keywordsEnabled: true name: name temperature: 0.8008281904610115 maxTokens: 6 allowedCollections: - allowedCollections - allowedCollections botId: botId filterPolicies: - filterPolicies - filterPolicies status: active allowedTools: - allowedTools - allowedTools properties: bots: items: $ref: '#/components/schemas/listSlackBots_200_response_bots_inner' type: array type: object createSlackBot_request: properties: name: description: Display name for the bot type: string setupType: description: Whether to use Quant-managed or customer-provided Slack app enum: - quant - byo type: string systemPrompt: description: System prompt for the backing AI agent type: string modelId: description: AI model identifier type: string temperature: description: Sampling temperature maximum: 2 minimum: 0 type: number maxTokens: description: Maximum response tokens minimum: 1 type: integer allowedTools: description: Tools the agent may use items: type: string type: array assignedSkills: description: Skills assigned to the agent items: type: string type: array allowedCollections: description: Vector DB collections the agent may query items: type: string type: array allowedSubAgents: description: Sub-agents the agent may call items: type: string type: array guardrailPreset: description: Guardrail preset name type: string filterPolicies: description: Content filter policies items: type: string type: array longContext: description: Enable long context mode type: boolean sessionTtlDays: description: Session TTL in days maximum: 90 minimum: 1 type: integer allowedChannels: description: Slack channel IDs the bot may respond in items: type: string type: array allowedUsers: description: Slack user IDs allowed to interact with the bot items: type: string type: array deniedUsers: description: Slack user IDs denied from interacting with the bot items: type: string type: array allowGuests: description: Whether guest users may interact with the bot type: boolean homeTabContent: description: Content shown on the bot's Home tab in Slack type: string agentAccessControl: description: Agent-level access control settings type: object keywordsEnabled: description: Whether keyword triggers are enabled type: boolean keywords: description: Keywords that trigger the bot items: type: string type: array required: - modelId - name - setupType - systemPrompt type: object createSlackBot_201_response: example: bot: "{}" properties: bot: type: object type: object getSlackBot_200_response_bot: example: assignedSkills: - assignedSkills - assignedSkills keywords: - keywords - keywords modelId: modelId allowedSubAgents: - allowedSubAgents - allowedSubAgents createdAt: 2000-01-23T04:56:07.000+00:00 homeTabContent: homeTabContent sessionTtlDays: 1 longContext: true temperature: 0.8008281904610115 maxTokens: 6 botId: botId allowedChannels: - allowedChannels - allowedChannels deniedUsers: - deniedUsers - deniedUsers updatedAt: 2000-01-23T04:56:07.000+00:00 guardrailPreset: guardrailPreset connected: true systemPrompt: systemPrompt allowGuests: true setupType: quant keywordsEnabled: true name: name allowedCollections: - allowedCollections - allowedCollections allowedUsers: - allowedUsers - allowedUsers filterPolicies: - filterPolicies - filterPolicies agentAccessControl: "{}" status: active allowedTools: - allowedTools - allowedTools properties: botId: type: string name: type: string setupType: enum: - quant - byo type: string status: enum: - active - inactive type: string connected: type: boolean systemPrompt: type: string modelId: type: string temperature: type: number maxTokens: type: integer allowedTools: items: type: string type: array assignedSkills: items: type: string type: array allowedCollections: items: type: string type: array allowedSubAgents: items: type: string type: array guardrailPreset: type: string filterPolicies: items: type: string type: array longContext: type: boolean sessionTtlDays: type: integer allowedChannels: items: type: string type: array allowedUsers: items: type: string type: array deniedUsers: items: type: string type: array allowGuests: type: boolean homeTabContent: type: string agentAccessControl: type: object keywordsEnabled: type: boolean keywords: items: type: string type: array createdAt: format: date-time type: string updatedAt: format: date-time type: string type: object getSlackBot_200_response: example: bot: assignedSkills: - assignedSkills - assignedSkills keywords: - keywords - keywords modelId: modelId allowedSubAgents: - allowedSubAgents - allowedSubAgents createdAt: 2000-01-23T04:56:07.000+00:00 homeTabContent: homeTabContent sessionTtlDays: 1 longContext: true temperature: 0.8008281904610115 maxTokens: 6 botId: botId allowedChannels: - allowedChannels - allowedChannels deniedUsers: - deniedUsers - deniedUsers updatedAt: 2000-01-23T04:56:07.000+00:00 guardrailPreset: guardrailPreset connected: true systemPrompt: systemPrompt allowGuests: true setupType: quant keywordsEnabled: true name: name allowedCollections: - allowedCollections - allowedCollections allowedUsers: - allowedUsers - allowedUsers filterPolicies: - filterPolicies - filterPolicies agentAccessControl: "{}" status: active allowedTools: - allowedTools - allowedTools properties: bot: $ref: '#/components/schemas/getSlackBot_200_response_bot' type: object updateSlackBot_request: properties: name: description: Display name for the bot type: string status: description: Enable or disable the bot enum: - active - inactive type: string systemPrompt: description: System prompt for the backing AI agent type: string modelId: description: AI model identifier type: string temperature: description: Sampling temperature maximum: 2 minimum: 0 type: number maxTokens: description: Maximum response tokens minimum: 1 type: integer allowedTools: description: Tools the agent may use items: type: string type: array assignedSkills: description: Skills assigned to the agent items: type: string type: array allowedCollections: description: Vector DB collections the agent may query items: type: string type: array allowedSubAgents: description: Sub-agents the agent may call items: type: string type: array guardrailPreset: description: Guardrail preset name type: string filterPolicies: description: Content filter policies items: type: string type: array longContext: description: Enable long context mode type: boolean sessionTtlDays: description: Session TTL in days maximum: 90 minimum: 1 type: integer allowedChannels: description: Slack channel IDs the bot may respond in items: type: string type: array allowedUsers: description: Slack user IDs allowed to interact with the bot items: type: string type: array deniedUsers: description: Slack user IDs denied from interacting with the bot items: type: string type: array allowGuests: description: Whether guest users may interact with the bot type: boolean homeTabContent: description: Content shown on the bot's Home tab in Slack type: string agentAccessControl: description: Agent-level access control settings type: object keywordsEnabled: description: Whether keyword triggers are enabled type: boolean keywords: description: Keywords that trigger the bot items: type: string type: array type: object deleteSlackBot_200_response: example: success: true message: Slack bot deleted successfully properties: success: example: true type: boolean message: example: Slack bot deleted successfully type: string type: object searchSlackWorkspaceUsers_200_response_results_inner: example: name: name real_name: real_name id: id properties: id: type: string name: type: string real_name: type: string type: object searchSlackWorkspaceUsers_200_response: example: results: - name: name real_name: real_name id: id - name: name real_name: real_name id: id properties: results: items: $ref: '#/components/schemas/searchSlackWorkspaceUsers_200_response_results_inner' type: array type: object searchSlackWorkspaceChannels_200_response_results_inner: example: name: name id: id properties: id: type: string name: type: string type: object searchSlackWorkspaceChannels_200_response: example: results: - name: name id: id - name: name id: id properties: results: items: $ref: '#/components/schemas/searchSlackWorkspaceChannels_200_response_results_inner' type: array type: object getGovernanceConfig_200_response_spendLimits: example: monthlyBudgetCents: 0 perUserDailyBudgetCents: 5 warningThresholdPercent: 5 perUserMonthlyBudgetCents: 1 dailyBudgetCents: 6 properties: monthlyBudgetCents: nullable: true type: integer dailyBudgetCents: nullable: true type: integer perUserMonthlyBudgetCents: nullable: true type: integer perUserDailyBudgetCents: nullable: true type: integer warningThresholdPercent: nullable: true type: integer type: object getGovernanceConfig_200_response: example: mandatoryFilterPolicies: - mandatoryFilterPolicies - mandatoryFilterPolicies modelList: - modelList - modelList modelPolicy: unrestricted aiEnabled: true mandatoryGuardrailPreset: mandatoryGuardrailPreset version: 2 orgId: orgId spendLimits: monthlyBudgetCents: 0 perUserDailyBudgetCents: 5 warningThresholdPercent: 5 perUserMonthlyBudgetCents: 1 dailyBudgetCents: 6 properties: orgId: type: string aiEnabled: type: boolean modelPolicy: enum: - unrestricted - allowlist - blocklist type: string modelList: items: type: string type: array mandatoryGuardrailPreset: nullable: true type: string mandatoryFilterPolicies: items: type: string type: array spendLimits: $ref: '#/components/schemas/getGovernanceConfig_200_response_spendLimits' version: type: integer type: object updateGovernanceConfig_request: properties: aiEnabled: type: boolean modelPolicy: enum: - unrestricted - allowlist - blocklist type: string modelList: items: type: string type: array mandatoryGuardrailPreset: enum: - official - official-sensitive - protected nullable: true type: string mandatoryFilterPolicies: items: type: string type: array spendLimits: $ref: '#/components/schemas/getGovernanceConfig_200_response_spendLimits' version: type: integer required: - aiEnabled - modelPolicy type: object updateGovernanceConfig_200_response: example: success: true config: "{}" properties: success: example: true type: boolean config: type: object type: object getGovernanceSpend_200_response_orgTotal: example: requestCount: 6 spendCents: 0 properties: spendCents: description: Total org spend in US cents type: integer requestCount: type: integer type: object getGovernanceSpend_200_response_todayTotal: example: requestCount: 5 spendCents: 1 properties: spendCents: description: Org spend today in US cents type: integer requestCount: type: integer type: object getGovernanceSpend_200_response_budget: example: monthlyBudgetCents: 5 usedPercent: 2.302136 remainingCents: 7 nullable: true properties: monthlyBudgetCents: type: integer usedPercent: format: float type: number remainingCents: type: integer type: object getGovernanceSpend_200_response_dailyBudget: example: usedPercent: 3.6160767 remainingCents: 2 dailyBudgetCents: 9 nullable: true properties: dailyBudgetCents: type: integer usedPercent: format: float type: number remainingCents: type: integer type: object getGovernanceSpend_200_response_userTotal: example: dailySpendCents: 7 monthlySpendCents: 4 nullable: true properties: monthlySpendCents: type: integer dailySpendCents: type: integer type: object getGovernanceSpend_200_response: example: todayTotal: requestCount: 5 spendCents: 1 dailyBudget: usedPercent: 3.6160767 remainingCents: 2 dailyBudgetCents: 9 userTotal: dailySpendCents: 7 monthlySpendCents: 4 orgTotal: requestCount: 6 spendCents: 0 budget: monthlyBudgetCents: 5 usedPercent: 2.302136 remainingCents: 7 properties: orgTotal: $ref: '#/components/schemas/getGovernanceSpend_200_response_orgTotal' todayTotal: $ref: '#/components/schemas/getGovernanceSpend_200_response_todayTotal' budget: $ref: '#/components/schemas/getGovernanceSpend_200_response_budget' dailyBudget: $ref: '#/components/schemas/getGovernanceSpend_200_response_dailyBudget' userTotal: $ref: '#/components/schemas/getGovernanceSpend_200_response_userTotal' type: object createFilterPolicy_request_rules_inner_match: description: Match criteria properties: type: enum: - word - regex type: string values: description: Required when type=word items: maxLength: 100 type: string type: array pattern: description: Required when type=regex maxLength: 500 type: string type: object createFilterPolicy_request_rules_inner: properties: name: type: string match: $ref: '#/components/schemas/createFilterPolicy_request_rules_inner_match' action: enum: - BLOCK - REDACT type: string applyTo: enum: - input - output - both type: string type: object createFilterPolicy_request: properties: name: maxLength: 255 type: string description: maxLength: 1000 nullable: true type: string enabled: type: boolean rules: items: $ref: '#/components/schemas/createFilterPolicy_request_rules_inner' maxItems: 100 minItems: 1 type: array required: - name - rules type: object updateFilterPolicy_request: properties: name: maxLength: 255 type: string description: maxLength: 1000 nullable: true type: string enabled: type: boolean rules: items: $ref: '#/components/schemas/createFilterPolicy_request_rules_inner' maxItems: 100 minItems: 1 type: array type: object getMyUsage_200_response_monthly: example: requestCount: 6 spendCents: 0 properties: spendCents: type: integer requestCount: type: integer type: object getMyUsage_200_response_daily: example: spendCents: 1 properties: spendCents: type: integer type: object getMyUsage_200_response_quota: example: dailyLimit: 5 monthlyLimit: 5 nullable: true properties: monthlyLimit: description: Per-user monthly budget in US cents nullable: true type: integer dailyLimit: description: Per-user daily budget in US cents nullable: true type: integer type: object getMyUsage_200_response: example: daily: spendCents: 1 quota: dailyLimit: 5 monthlyLimit: 5 monthly: requestCount: 6 spendCents: 0 currentMonth: 2026-03 userId: userId properties: userId: type: string currentMonth: example: 2026-03 type: string monthly: $ref: '#/components/schemas/getMyUsage_200_response_monthly' daily: $ref: '#/components/schemas/getMyUsage_200_response_daily' quota: $ref: '#/components/schemas/getMyUsage_200_response_quota' type: object createApplication_403_response: example: message: Application limit reached error: Organisation has reached the maximum number of allowed applications (10/10). Please contact support to increase your limit. properties: message: example: Application limit reached type: string error: example: Organisation has reached the maximum number of allowed applications (10/10). Please contact support to increase your limit. type: string type: object getEcrLoginCredentials_200_response: example: password: password endpoint: endpoint expiresAt: expiresAt username: username properties: username: type: string password: type: string expiresAt: type: string endpoint: type: string type: object createCommand_request: properties: command: type: string type: object patchEnvironmentCompose_request_spotConfiguration: nullable: true properties: strategy: enum: - "off" - spot-only - mixed-safe - mixed-aggressive type: string type: object patchEnvironmentCompose_request: properties: architecture: nullable: true type: string taskCpu: nullable: true type: string taskMemory: nullable: true type: string minCapacity: minimum: 0 nullable: true type: integer maxCapacity: minimum: 1 nullable: true type: integer containers: items: type: object nullable: true type: array spotConfiguration: $ref: '#/components/schemas/patchEnvironmentCompose_request_spotConfiguration' enableCrossEnvNetworking: nullable: true type: boolean enableCrossAppNetworking: nullable: true type: boolean type: object patchEnvironmentCompose_202_response_spotConfiguration: example: tolerateDowntime: true strategy: "off" properties: strategy: example: "off" type: string tolerateDowntime: example: true type: boolean type: object patchEnvironmentCompose_202_response: example: spotConfiguration: tolerateDowntime: true strategy: "off" taskMemory: "2048" maxCapacity: 1 minCapacity: 1 containers: - "{}" - "{}" taskCpu: "512" enableCrossAppNetworking: true architecture: ARM64 enableCrossEnvNetworking: true properties: architecture: example: ARM64 type: string taskCpu: example: "512" type: string taskMemory: example: "2048" type: string minCapacity: example: 1 type: integer maxCapacity: example: 1 type: integer containers: items: type: object type: array spotConfiguration: $ref: '#/components/schemas/patchEnvironmentCompose_202_response_spotConfiguration' enableCrossEnvNetworking: example: true type: boolean enableCrossAppNetworking: example: true type: boolean type: object patchEnvironmentCompose_400_response: example: message: message errors: "{}" properties: message: type: string errors: type: object type: object validateCompose_request: properties: compose: description: The docker-compose.yml file content as a string type: string imageSuffix: description: Optional image tag suffix (query parameter takes precedence) pattern: "^[a-z0-9]([a-z0-9-]*[a-z0-9])?$" type: string application: description: Optional application name for context type: string required: - compose type: object validateCompose_200_response: example: translatedComposeDefinition: "{}" translationWarnings: - "Service 'db' uses 'build' directive, image will be internal with a generated\ \ tag." - "Volume 'cache' uses a relative path source, interpreted as logical volume\ \ name." message: Docker-compose YAML translated and validated successfully. properties: message: example: Docker-compose YAML translated and validated successfully. type: string translatedComposeDefinition: description: The translated internal compose definition format type: object translationWarnings: description: Optional warnings encountered during translation example: - "Service 'db' uses 'build' directive, image will be internal with a generated\ \ tag." - "Volume 'cache' uses a relative path source, interpreted as logical volume\ \ name." items: type: string nullable: true type: array required: - message - translatedComposeDefinition type: object validateCompose_422_response: example: error: Invalid YAML properties: error: example: Invalid YAML type: string type: object createCronJob_request: properties: name: type: string description: nullable: true type: string scheduleExpression: type: string command: items: type: string type: array targetContainerName: nullable: true type: string isEnabled: default: true nullable: true type: boolean required: - command - name - scheduleExpression type: object updateCronJob_request: properties: description: nullable: true type: string scheduleExpression: nullable: true type: string command: items: type: string nullable: true type: array targetContainerName: nullable: true type: string isEnabled: nullable: true type: boolean type: object createEnvironment_request_environment_inner: properties: name: description: Variable name type: string value: description: Variable value type: string type: object createEnvironment_request: properties: envName: description: "Environment name (e.g., 'staging', 'development')" type: string minCapacity: description: Minimum number of instances type: integer maxCapacity: description: Maximum number of instances type: integer cloneConfigurationFrom: description: Clone configuration from an existing environment type: string composeDefinition: $ref: '#/components/schemas/Compose' imageSuffix: description: Optional image tag suffix for cloning pattern: "^[a-z0-9]([a-z0-9-]*[a-z0-9])?$" type: string spotConfiguration: $ref: '#/components/schemas/SpotConfiguration' environment: description: Environment variables to inject items: $ref: '#/components/schemas/createEnvironment_request_environment_inner' type: array mergeEnvironment: description: "Whether to merge environment variables with cloned ones (true)\ \ or replace them (false). Default: false" type: boolean required: - envName type: object createEnvironment_403_response: example: message: Environment limit reached error: Application my-app has reached the maximum number of allowed environments (5/5). Please contact support to increase your limit. properties: message: example: Environment limit reached type: string error: example: Application my-app has reached the maximum number of allowed environments (5/5). Please contact support to increase your limit. type: string type: object updateEnvironment_request: properties: composeDefinition: $ref: '#/components/schemas/Compose' minCapacity: description: "Optional. Minimum number of tasks for auto-scaling. If provided\ \ at root level, will be merged into composeDefinition." minimum: 0 nullable: true type: integer maxCapacity: description: "Optional. Maximum number of tasks for auto-scaling. If provided\ \ at root level, will be merged into composeDefinition." minimum: 1 nullable: true type: integer required: - composeDefinition type: object updateEnvironmentState_request: properties: action: type: string imageTag: type: string type: object getEnvironmentLogs_200_response_logEvents_inner: example: message: message timestamp: 0 properties: timestamp: description: Unix timestamp in milliseconds type: integer message: description: Log message content type: string type: object getEnvironmentLogs_200_response: example: logEvents: - message: message timestamp: 0 - message: message timestamp: 0 nextToken: nextToken properties: logEvents: description: Array of log events items: $ref: '#/components/schemas/getEnvironmentLogs_200_response_logEvents_inner' type: array nextToken: description: Token for fetching next page of results (null if no more pages) nullable: true type: string type: object syncToEnvironment_request: properties: sourceEnvironment: type: string type: object listBackups_200_response_backups_inner: example: bucketName: au-prd-manual-backups backupId: quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z taskArn: arn:aws:ecs:ap-southeast-4:056500205767:task/au-prd-quant-cloud-cluster/305a68f04bf641f887a87b74d67fa57e sizeFormatted: 1.86 MB description: Manual backup fileExists: true type: logical createdAt: 2025-09-19T21:50:27.317Z s3Key: database-backups/quant-gov/dashboard/staging/quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z.sql.gz size: 1945663 engine: mysql status: completed updatedAt: 2025-09-19T21:51:09Z properties: backupId: example: quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z type: string status: example: completed type: string type: example: logical type: string engine: example: mysql type: string description: example: Manual backup type: string createdAt: example: 2025-09-19T21:50:27.317Z format: date-time type: string updatedAt: example: 2025-09-19T21:51:09Z format: date-time type: string taskArn: example: arn:aws:ecs:ap-southeast-4:056500205767:task/au-prd-quant-cloud-cluster/305a68f04bf641f887a87b74d67fa57e type: string s3Key: example: database-backups/quant-gov/dashboard/staging/quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z.sql.gz type: string bucketName: example: au-prd-manual-backups type: string size: example: 1945663 type: integer sizeFormatted: example: 1.86 MB type: string fileExists: example: true type: boolean type: object listBackups_200_response: example: nextToken: nextToken count: 1 message: Found 1 database backup(s) backups: - bucketName: au-prd-manual-backups backupId: quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z taskArn: arn:aws:ecs:ap-southeast-4:056500205767:task/au-prd-quant-cloud-cluster/305a68f04bf641f887a87b74d67fa57e sizeFormatted: 1.86 MB description: Manual backup fileExists: true type: logical createdAt: 2025-09-19T21:50:27.317Z s3Key: database-backups/quant-gov/dashboard/staging/quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z.sql.gz size: 1945663 engine: mysql status: completed updatedAt: 2025-09-19T21:51:09Z - bucketName: au-prd-manual-backups backupId: quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z taskArn: arn:aws:ecs:ap-southeast-4:056500205767:task/au-prd-quant-cloud-cluster/305a68f04bf641f887a87b74d67fa57e sizeFormatted: 1.86 MB description: Manual backup fileExists: true type: logical createdAt: 2025-09-19T21:50:27.317Z s3Key: database-backups/quant-gov/dashboard/staging/quant-gov-dashboard-staging-2025-09-19T21-50-27-145Z.sql.gz size: 1945663 engine: mysql status: completed updatedAt: 2025-09-19T21:51:09Z properties: backups: items: $ref: '#/components/schemas/listBackups_200_response_backups_inner' type: array count: example: 1 type: integer nextToken: description: "Token for retrieving the next page of results, if more data\ \ is available" nullable: true type: string message: example: Found 1 database backup(s) type: string type: object listBackups_422_response: example: error: The backup type must be either database or filesystem properties: error: example: The backup type must be either database or filesystem type: string type: object createBackup_request: properties: description: description: Optional backup description type: string type: object createBackup_202_response: example: backupId: backupId message: message status: status properties: backupId: type: string status: type: string message: type: string type: object deleteBackup_200_response: example: backupId: backupId message: message properties: message: type: string backupId: type: string type: object downloadBackup_200_response: example: filename: filename downloadUrl: downloadUrl expiresAt: 2000-01-23T04:56:07.000+00:00 properties: downloadUrl: description: Pre-signed S3 URL for download type: string expiresAt: description: URL expiration time format: date-time type: string filename: description: Suggested filename for download type: string type: object getSshAccessCredentials_200_response_credentials: example: accessKeyId: accessKeyId secretAccessKey: secretAccessKey sessionToken: sessionToken expiration: 2000-01-23T04:56:07.000+00:00 properties: accessKeyId: type: string secretAccessKey: type: string sessionToken: type: string expiration: format: date-time type: string type: object getSshAccessCredentials_200_response: example: expiresIn: 0 credentials: accessKeyId: accessKeyId secretAccessKey: secretAccessKey sessionToken: sessionToken expiration: 2000-01-23T04:56:07.000+00:00 success: true clusterName: clusterName taskArn: taskArn region: region taskId: taskId containerNames: - containerNames - containerNames organizationScope: organizationScope properties: success: type: boolean credentials: $ref: '#/components/schemas/getSshAccessCredentials_200_response_credentials' clusterName: type: string taskArn: type: string taskId: type: string containerNames: items: type: string type: array region: type: string expiresIn: type: integer organizationScope: type: string type: object bulkSetEnvironmentVariables_request_environment_inner: properties: name: type: string value: type: string required: - name - value type: object bulkSetEnvironmentVariables_request: properties: environment: items: $ref: '#/components/schemas/bulkSetEnvironmentVariables_request_environment_inner' type: array required: - environment type: object updateEnvironmentVariable_request: properties: value: type: string type: object createVolume_request: properties: volumeName: description: Volume name type: string description: description: Volume description nullable: true type: string rootDirectory: description: Root directory path nullable: true type: string required: - volumeName type: object CreateApplicationRequest_database: description: Optional database configuration example: multiAz: false engine: mysql instanceClass: db.t4g.micro storageGb: 20 nullable: true properties: engine: default: mysql description: "Database engine type (MySQL 8.4, Postgres)" enum: - mysql - postgres type: string instanceClass: default: db.t4g.micro description: RDS instance class example: db.t4g.micro type: string storageGb: default: 20 description: Allocated storage in GiB example: 20 type: integer multiAz: default: false description: Enable Multi-AZ deployment (higher availability and cost) type: boolean type: object CreateApplicationRequest_filesystem: description: Optional filesystem configuration example: mountPath: /data/shared required: true nullable: true properties: required: default: true description: Whether to create a shared filesystem type: boolean mountPath: default: /mnt/data description: Mount path inside containers example: /data/shared type: string type: object CreateApplicationRequest_environment_inner: example: name: name value: value properties: name: description: Environment variable name type: string value: description: Environment variable value type: string type: object Application_database: description: Database configuration example: rdsInstanceEngine: mysql rdsInstanceIdentifier: rdsInstanceIdentifier rdsInstanceStatus: rdsInstanceStatus rdsInstanceEndpoint: rdsInstanceEndpoint nullable: true properties: rdsInstanceIdentifier: description: RDS instance identifier type: string rdsInstanceEndpoint: description: RDS instance endpoint address type: string rdsInstanceEngine: description: Database engine enum: - mysql - postgres type: string rdsInstanceStatus: description: RDS instance status type: string type: object Application_filesystem: description: Filesystem configuration example: mountPath: mountPath filesystemId: filesystemId nullable: true properties: filesystemId: description: EFS filesystem ID type: string mountPath: description: Default mount path in containers type: string type: object Application_deploymentInformation_inner: example: createdAt: 2000-01-23T04:56:07.000+00:00 taskDefinitionArn: taskDefinitionArn deploymentId: deploymentId imageTag: imageTag status: status properties: deploymentId: description: Deployment identifier type: string taskDefinitionArn: description: Task definition ARN used type: string createdAt: description: Deployment creation timestamp format: date-time type: string status: description: Deployment status type: string imageTag: description: Image tag deployed type: string type: object Application_imageReference: description: Image reference information example: identifier: identifier type: internal nullable: true properties: type: description: Image type enum: - internal - external type: string identifier: description: Image identifier type: string readOnly: true type: object Container_imageReference: example: identifier: identifier type: internal properties: type: description: "Specifies whether the image is internal (ECR) or external\ \ (e.g., Docker Hub)" enum: - internal - external type: string identifier: description: "The image identifier. For 'internal' type, this is the image\ \ tag. For 'external' type, this is the full image name." type: string required: - identifier - type type: object Container_mountPoints_inner: example: readOnly: false containerPath: containerPath sourceVolume: sourceVolume properties: sourceVolume: description: The name of the logical volume type: string containerPath: description: The path inside the container where the volume is mounted type: string readOnly: default: false type: boolean required: - containerPath - sourceVolume type: object Container_environment_inner: example: name: name value: value properties: name: description: Environment variable name type: string value: description: Environment variable value type: string required: - name - value type: object Container_secrets_inner: example: name: name valueFrom: valueFrom properties: name: description: The environment variable name to be set in the container type: string valueFrom: description: The key of the secret in the environment's 'app-secrets' store type: string required: - name - valueFrom type: object Container_healthCheck: description: Container health check configuration example: retries: 7 startPeriod: 279 interval: 171 command: - command - command timeout: 15 nullable: true properties: command: description: The command to run to determine if the container is healthy items: type: string type: array interval: default: 30 description: Time period (seconds) between health checks maximum: 300 minimum: 5 type: integer timeout: default: 5 description: Time period (seconds) to wait for a health check to return maximum: 60 minimum: 2 type: integer retries: default: 3 description: Number of times to retry a failed health check maximum: 10 minimum: 1 type: integer startPeriod: description: Grace period (seconds) to ignore unhealthy checks after container starts maximum: 300 minimum: 0 nullable: true type: integer type: object Container_dependsOn_inner: example: condition: START containerName: containerName properties: containerName: description: The name of the container this container depends on type: string condition: description: The condition to wait for on the dependency enum: - START - HEALTHY - COMPLETE - SUCCESS type: string required: - containerName type: object Container_originProtectionConfig: description: Extended origin protection configuration with IP allow list support example: ipAllow: - ipAllow - ipAllow enabled: true nullable: true properties: enabled: default: true description: Whether origin protection is enabled. Defaults to true if this config object is provided. type: boolean ipAllow: description: "List of IP addresses or CIDR ranges that can bypass origin\ \ protection for direct access (e.g., VPN IPs)" items: type: string nullable: true type: array type: object V2Crawler_sitemap_inner: properties: url: description: Sitemap URL example: /sitemap.xml type: string recursive: description: Recursively follow sitemap links example: true type: boolean type: object V2Crawler_assets_network_intercept: description: Network intercept configuration for asset collection properties: enabled: description: Enable network intercept example: true type: boolean timeout: description: Request timeout in seconds example: 30 type: integer execute_js: description: Execute JavaScript during asset collection example: false type: boolean type: object V2Crawler_assets_parser: description: Parser configuration for asset extraction properties: enabled: description: Enable parser example: true type: boolean type: object V2Crawler_assets: description: Asset harvesting configuration example: network_intercept: enabled: true timeout: 30 execute_js: false parser: enabled: true properties: network_intercept: $ref: '#/components/schemas/V2Crawler_assets_network_intercept' parser: $ref: '#/components/schemas/V2Crawler_assets_parser' type: object V2Domain_dns_validation_records_inner: properties: name: description: DNS record name (host/subdomain) example: _abc123.example.com type: string type: description: DNS record type (typically CNAME) example: CNAME type: string value: description: DNS record value to point to example: _xyz789.validation.example.com. type: string type: object V2Domain_dns_go_live_records_inner: properties: type: description: "DNS record type (CNAME, A, or ALIAS)" example: CNAME type: string name: description: "DNS record name/host (@ for apex/root domains, subdomain name\ \ for subdomains)" example: www type: string value: description: "DNS record value (IP addresses for A records, domain name\ \ for CNAME/ALIAS)" example: cdn.example.com nullable: true type: string description: description: Human-readable instructions for configuring this DNS record example: Add a CNAME record with the host set to your subdomain pointing to the CDN endpoint. type: string type: object V2MetricDataPoint_timestamp: description: Timestamp for this data point (format depends on timestamp_format parameter) example: 2026-01-29T12:00:00+00:00 oneOf: - description: ISO8601 timestamp format: date-time type: string - description: Unix timestamp type: integer V2RuleProxyAction_notify_config: description: Notification configuration (required when notify is slack) example: webhook_url: https://hooks.slack.com/services/XXXXXX nullable: true properties: webhook_url: description: Slack webhook URL example: https://hooks.slack.com/services/XXXXXX type: string type: object V2RuleProxyAction_quant_cloud_selection: description: Quant Cloud application proxy selection (populated automatically when application_proxy is enabled) example: app: my-app container: web port: 80 env: production nullable: true properties: app: description: Application name example: my-app type: string env: description: Environment name example: production type: string container: description: Container name example: web type: string port: description: Container port example: 80 type: integer type: object V1GetMetricsResponse_data: oneOf: - $ref: '#/components/schemas/V1MetricsMapMinute' - $ref: '#/components/schemas/V1MetricsMapDay' - $ref: '#/components/schemas/V1MetricsMapMonth' V1GetMetricSeriesResponse_data: oneOf: - $ref: '#/components/schemas/V1MinuteSeriesMap' - $ref: '#/components/schemas/V1DaySeriesArray' - $ref: '#/components/schemas/V1MonthSeriesArray' V1GlobalMetaResponse_global_meta: properties: records: items: type: object type: array type: object WafConfig_httpbl: description: Project Honey Pot HTTP:BL configuration example: block_harvester: false httpbl_enabled: false block_spam: false httpbl_key: httpbl_key block_search_engine: false block_suspicious: false properties: httpbl_enabled: default: false description: Enable HTTP:BL type: boolean block_suspicious: default: false description: Block suspicious IPs type: boolean block_harvester: default: false description: Block email harvesters type: boolean block_spam: default: false description: Block spam sources type: boolean block_search_engine: default: false description: Block search engines type: boolean httpbl_key: description: HTTP:BL API key type: string type: object WafConfig_block_lists: description: Enable predefined block lists example: referer: false ip: false ai: false user_agent: false properties: user_agent: default: false description: Block known bad user agents type: boolean referer: default: false description: Block known bad referers type: boolean ip: default: false description: Block known bad IPs type: boolean ai: default: false description: Block AI crawlers type: boolean type: object WafConfig_thresholds_inner: example: hits: 10 mode: disabled rps: 10 minutes: 5 cooldown: 30 type: ip value: value notify_slack: notify_slack properties: type: description: Threshold type enum: - ip - header - waf_hit_by_ip type: string rps: description: Requests per second limit (for ip/header) example: 10 type: integer hits: description: Hit count limit (for waf_hit_by_ip) example: 10 type: integer minutes: description: Time window in minutes (for waf_hit_by_ip) example: 5 type: integer cooldown: description: Cooldown period in seconds example: 30 type: integer mode: default: disabled description: Threshold enforcement mode enum: - disabled - report - block type: string value: description: Header name (for header type) nullable: true type: string notify_slack: description: Slack webhook for this threshold nullable: true type: string 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