{ "swagger": "2.0", "info": { "description": "API server for managing AI Services catalog, applications, and authentication", "title": "AI Services Catalog API", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "https://github.com/project-ai-services/ai-services", "email": "support@example.com" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "1.0" }, "host": "localhost:8080", "basePath": "/api/v1", "paths": { "/applications": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves a paginated list of all applications for the authenticated user with optional filters", "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "List applications", "parameters": [ { "type": "integer", "default": 1, "description": "Page number (1-indexed)", "name": "page", "in": "query" }, { "type": "integer", "default": 20, "description": "Number of items per page (max: 100)", "name": "page_size", "in": "query" }, { "type": "string", "description": "Filter by deployment type: 'architectures' or 'services'", "name": "deployment_type", "in": "query" }, { "type": "string", "description": "Filter by catalog ID (e.g., 'rag', 'chat', 'digitize', 'summarize')", "name": "catalog_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationListResponse" } }, "400": { "description": "Invalid query parameters", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Creates a new application (architecture or service) with optional custom parameters", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Create new application", "parameters": [ { "description": "Application creation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateApplicationRequest" } } ], "responses": { "202": { "description": "Application creation initiated", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateApplicationResponse" } }, "400": { "description": "Invalid request body or validation errors", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "409": { "description": "Application name already exists", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "422": { "description": "Parameter validation failed or invalid template", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/applications/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves a single application by its unique identifier for the authenticated user", "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Get application by ID", "parameters": [ { "type": "string", "description": "Application ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Application" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Application not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "put": { "security": [ { "BearerAuth": [] } ], "description": "Updates the display name of an existing application", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Update application", "parameters": [ { "type": "string", "description": "Application ID (UUID)", "name": "id", "in": "path", "required": true }, { "description": "Update request", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.UpdateApplicationRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Application" } }, "400": { "description": "Invalid request body or name validation failed", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "403": { "description": "User doesn't own this application", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Application not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "description": "Initiates async deletion of an application and all its resources. Returns 202 immediately.", "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Delete application", "parameters": [ { "type": "string", "description": "Application ID (UUID)", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "When 'true', preserves underlying data (volumes of databases/service resources). Default: 'false'", "name": "keep_data", "in": "query" } ], "responses": { "202": { "description": "Accepted", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_repository.DeleteApplicationResponse" } }, "400": { "description": "Invalid application ID or keep_data parameter", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "403": { "description": "User doesn't own this application", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Application not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "409": { "description": "Application is already being deleted", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/applications/{id}/datasources": { "put": { "security": [ { "BearerAuth": [] } ], "description": "Links one or more datasource connectors to each eligible (Digitize) service in a running application. Each datasource is processed independently. Returns 204 when all succeed; returns 207 with per-datasource errors when one or more fail.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Connect datasources to application", "parameters": [ { "type": "string", "description": "Application ID (UUID)", "name": "id", "in": "path", "required": true }, { "description": "List of datasource IDs to connect", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ConnectDatasourcesRequest" } } ], "responses": { "204": { "description": "All datasources connected successfully" }, "207": { "description": "One or more datasources failed to connect", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ConnectDatasourcesResponse" } }, "400": { "description": "Invalid request body", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Application or datasource not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "422": { "description": "No eligible running service found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/applications/{id}/datasources/{datasource_id}": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the catalog identity and live sync state of a datasource connected to the given application. Sync fields are sourced from the linked service and degrade gracefully to sync_status \"unknown\" when the service is unreachable.", "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Get datasource status for an application", "parameters": [ { "type": "string", "description": "Application ID (UUID)", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Datasource connector ID (UUID)", "name": "datasource_id", "in": "path", "required": true } ], "responses": { "200": { "description": "Datasource status", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.GetApplicationDatasourceResponse" } }, "400": { "description": "Invalid UUID format", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Datasource not connected to this application", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "description": "Removes a single datasource connector from each eligible service in a running application and deletes the service_dependency record.", "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Disconnect a datasource from an application", "parameters": [ { "type": "string", "description": "Application ID (UUID)", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Datasource ID (UUID)", "name": "datasource_id", "in": "path", "required": true } ], "responses": { "204": { "description": "Datasource disconnected successfully" }, "400": { "description": "Invalid application or datasource ID", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Datasource not connected to this application", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "502": { "description": "Downstream Digitize service returned an error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/applications/{id}/ps": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves the process status and runtime information for an application", "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Get application process status", "parameters": [ { "type": "string", "description": "Application ID (UUID)", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationPSResponse" } }, "400": { "description": "Invalid application ID format", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Application not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/applications/{id}/resources": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves used and total allocated CPU (in cores) and memory usage (in bytes), along with the hardware accelerator cards for an application and its services", "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Get application resources", "parameters": [ { "type": "string", "description": "Application ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationResourcesResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Application not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/architectures": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves a list of all available architecture templates with summary information", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "List available architectures", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ArchitectureSummary" } } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/architectures/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves detailed information about a specific architecture template", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get architecture details", "parameters": [ { "type": "string", "description": "Architecture template ID (e.g., 'rag')", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Architecture" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Architecture not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/architectures/{id}/deploy-options": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves available providers and dependency rules for all services and their components within an architecture", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get architecture deploy options", "parameters": [ { "type": "string", "description": "Architecture ID (e.g., 'rag')", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Target runtime type: 'podman' or 'openshift'. Defaults to server runtime when absent.", "name": "runtime", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsArchitecture" } }, "400": { "description": "Invalid runtime parameter", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Architecture not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/architectures/{id}/images": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the complete list of container images required to deploy an architecture and all its services and component dependencies.\nThe response always includes catalog asset images (the tool image used for housekeeping tasks\nand the catalog infrastructure images for the catalog service itself).\nBoth embedded (built-in) and custom bundle architectures are supported.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get architecture images", "parameters": [ { "type": "string", "description": "Architecture ID (e.g., 'rag')", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "List of container image references", "schema": { "type": "array", "items": { "type": "string" } } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Architecture not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/architectures/{id}/models": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns all unique model names referenced in the schemas of all component dependencies across every service in the architecture", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get models for an architecture", "parameters": [ { "type": "string", "description": "Architecture ID (e.g., 'rag')", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "List of unique model names", "schema": { "type": "array", "items": { "type": "string" } } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Architecture not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/auth/login": { "post": { "description": "Authenticate user and return access and refresh tokens", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "User login", "parameters": [ { "description": "Login credentials", "name": "credentials", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.loginReq" } } ], "responses": { "200": { "description": "Returns access_token, refresh_token, and token_type", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Invalid payload", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Invalid credentials", "schema": { "type": "object", "additionalProperties": true } } } } }, "/auth/logout": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Invalidate the current access token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "User logout", "responses": { "200": { "description": "Successfully logged out", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Missing token", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Failed to logout", "schema": { "type": "object", "additionalProperties": true } } } } }, "/auth/me": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Get information about the currently authenticated user", "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Get current user info", "responses": { "200": { "description": "Returns user id, username, and name", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "User not found", "schema": { "type": "object", "additionalProperties": true } } } } }, "/auth/refresh": { "post": { "description": "Get new access and refresh tokens using a valid refresh token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Refresh access token", "parameters": [ { "description": "Refresh token", "name": "refresh", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.refreshReq" } } ], "responses": { "200": { "description": "Returns new access_token, refresh_token, and token_type", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Invalid payload", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Invalid refresh token", "schema": { "type": "object", "additionalProperties": true } } } } }, "/auth/token": { "post": { "security": [ { "BearerAuth": [] } ], "description": "**Experimental** — This endpoint is under active development and may change without notice.\nIBM Power Mission Control use this\nendpoint to exchange a pre-existing ManageIQ token for an internal JWT\nwithout supplying username/password credentials.", "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Exchange a ManageIQ token for a Catalog API JWT", "responses": { "200": { "description": "Returns access_token, refresh_token, and token_type", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Invalid or expired ManageIQ token", "schema": { "type": "object", "additionalProperties": true } }, "403": { "description": "ManageIQ token does not have required permissions", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "ManageIQ resource not found", "schema": { "type": "object", "additionalProperties": true } }, "503": { "description": "ManageIQ unavailable or returned an unexpected server error", "schema": { "type": "object", "additionalProperties": true } } } } }, "/catalog/bundles": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns a paginated list of all registered bundles ordered by created_at DESC.", "produces": [ "application/json" ], "tags": [ "Bundles" ], "summary": "List all bundles", "parameters": [ { "type": "integer", "default": 1, "description": "Page number (1-indexed)", "name": "page", "in": "query" }, { "type": "integer", "default": 20, "description": "Number of items per page (max: 100)", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleListResponse" } }, "400": { "description": "Invalid pagination parameters", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Uploads a .tar.gz archive and creates a new bundle. id, type, and version are read from metadata.yaml inside the archive.", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Bundles" ], "summary": "Create a new catalog bundle", "parameters": [ { "type": "file", "description": ".tar.gz archive containing the catalog item assets", "name": "file", "in": "formData", "required": true } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleResponse" } }, "400": { "description": "Missing file, wrong content-type, exceeds size limit, or metadata.yaml malformed", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "403": { "description": "Forbidden — admin role required", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "409": { "description": "Conflict — bundle with same catalog_id already exists", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "422": { "description": "Unprocessable Entity — validation failed", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/catalog/bundles/validate": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Validates a .tar.gz archive without writing a DB row or reloading CatalogProvider.", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Bundles" ], "summary": "Validate a bundle without storing it", "parameters": [ { "type": "file", "description": ".tar.gz archive to validate", "name": "file", "in": "formData", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleValidationResult" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "422": { "description": "Validation failed", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/catalog/bundles/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the status and metadata for a specific bundle.", "produces": [ "application/json" ], "tags": [ "Bundles" ], "summary": "Get a bundle by ID", "parameters": [ { "type": "string", "description": "Internal bundle UUID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Bundle not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "put": { "security": [ { "BearerAuth": [] } ], "description": "Replaces the bundle identified by id with a new archive. catalog_id and catalog_type are resolved from the DB record.", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Bundles" ], "summary": "Replace an existing bundle", "parameters": [ { "type": "string", "description": "Internal bundle UUID", "name": "id", "in": "path", "required": true }, { "type": "file", "description": "Replacement .tar.gz archive", "name": "file", "in": "formData", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Bundle not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "422": { "description": "catalog_id or catalog_type mismatch, or validation failed", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "description": "Marks the bundle deleting, removes the on-disk directory, reloads CatalogProvider, and removes the DB row.", "tags": [ "Bundles" ], "summary": "Delete a bundle", "parameters": [ { "type": "string", "description": "Internal bundle UUID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Bundle not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/components/{component_type}/providers/{provider_id}/params": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves the configuration schema (JSON Schema) for a specific provider within a component type. Returns a JSON Schema object with properties that may include x-data-id for fields that should be populated from metadata specifications.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get component provider parameters", "parameters": [ { "type": "string", "description": "Component type (e.g., 'vector_db', 'llm', 'embedding', 'reranker')", "name": "component_type", "in": "path", "required": true }, { "type": "string", "description": "Provider identifier (e.g., 'opensearch', 'vllm', 'watsonx')", "name": "provider_id", "in": "path", "required": true }, { "type": "string", "description": "Target runtime type: 'podman' or 'openshift'. Defaults to server runtime when absent.", "name": "runtime", "in": "query" } ], "responses": { "200": { "description": "JSON Schema object with $schema, type, and properties. Properties may include x-data-id field indicating data should be populated from metadata specifications (e.g., supported_models)", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request - Invalid component_type, provider_id, or runtime parameter", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Component type or provider not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/connectors": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns registered providers. When type is supplied only that type is returned; omitting it returns all providers across all connector types.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "List connector providers", "parameters": [ { "type": "string", "description": "Filter by connector type (e.g. 'datasource'). Omit to return all types.", "name": "type", "in": "query" } ], "responses": { "200": { "description": "List of providers", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ConnectorResponse" } } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Connector type not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/connectors/{connector_type}/providers/{provider_id}/params": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the JSON Schema for the configuration parameters of a specific connector provider.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get connector provider parameters", "parameters": [ { "type": "string", "description": "Connector type (e.g. 'datasource')", "name": "connector_type", "in": "path", "required": true }, { "type": "string", "description": "Provider identifier (e.g. 'object_storage', 'file_system')", "name": "provider_id", "in": "path", "required": true } ], "responses": { "200": { "description": "JSON Schema for the provider's configuration", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Connector type or provider not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/datasources": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns a paginated list of datasource connectors with optional filters by status and provider.", "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "List datasource connectors", "parameters": [ { "type": "integer", "default": 1, "description": "Page number (1-indexed)", "name": "page", "in": "query" }, { "type": "integer", "default": 20, "description": "Number of items per page (max: 100)", "name": "page_size", "in": "query" }, { "type": "string", "description": "Filter by status: 'connected' or 'offline'", "name": "status", "in": "query" }, { "type": "string", "description": "Filter by provider ID (e.g. 'object_storage', 'file_system')", "name": "provider", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceListResponse" } }, "400": { "description": "Invalid query parameters", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Validates the request, tests the connection, encrypts credentials, and persists a new datasource connector. Returns 422 if the connection test fails.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Create datasource connector", "parameters": [ { "description": "Datasource creation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateDatasourceRequest" } } ], "responses": { "201": { "description": "Datasource created", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateDatasourceResponse" } }, "400": { "description": "Invalid request body or validation errors", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Provider not found in catalog", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "409": { "description": "Datasource name already exists", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "422": { "description": "Connection test failed", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/datasources/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the full details of a datasource connector including non-sensitive metadata and the list of connected services enriched with live sync state from each service's Digitize pod.", "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Get a single datasource connector", "parameters": [ { "type": "string", "description": "Datasource UUID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Datasource detail", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.GetDatasourceResponse" } }, "400": { "description": "Invalid UUID format", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Datasource not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "put": { "security": [ { "BearerAuth": [] } ], "description": "Updates the Authentication credential fields for a datasource as defined in the provider schema. Re-runs the connectivity test before saving. If any linked Digitize services cannot be notified, the datasource is still updated and the failures are listed in propagation_errors.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Update datasource credentials", "parameters": [ { "type": "string", "description": "Datasource ID (UUID)", "name": "id", "in": "path", "required": true }, { "description": "Credential update request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.UpdateDatasourceRequest" } } ], "responses": { "200": { "description": "Datasource updated", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.UpdateDatasourceResponse" } }, "400": { "description": "Invalid request body or invalid ID", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Datasource not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "422": { "description": "Connection test failed with new credentials", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "description": "Deletes a datasource connector by ID. Returns 409 Conflict if the connector is still linked to one or more applications.", "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Delete datasource connector", "parameters": [ { "type": "string", "description": "Datasource connector ID (UUID)", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "Datasource deleted" }, "400": { "description": "Invalid connector ID format", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Datasource not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "409": { "description": "Datasource is connected to one or more applications", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/datasources/{id}/applications": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the list of applications currently connected to the given datasource, each enriched with live sync state fetched from its downstream service pod. Sync-state fetch failures degrade gracefully — the application entry is still returned with sync_status set to \"unknown\".", "produces": [ "application/json" ], "tags": [ "Datasources" ], "summary": "Get connected applications for a datasource", "parameters": [ { "type": "string", "description": "Datasource UUID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Connected applications with live sync state", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceApplicationsResponse" } }, "400": { "description": "Invalid UUID format", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Datasource not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/resources": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves system resource information including CPU, memory, and accelerator availability", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get system resources", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ResourcesResponse" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/services": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves a list of all deployable service templates. Dependency-only services are excluded from this list. Returns service summaries including standalone flag without endpoints and pod templates.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "List available services", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ServiceSummary" } } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/services/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves detailed information about a specific service template", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get service details", "parameters": [ { "type": "string", "description": "Service template ID (e.g., 'summarize')", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Service" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Service not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/services/{id}/deploy-options": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves available providers and dependency rules for a specific service", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get service deploy options", "parameters": [ { "type": "string", "description": "Service ID (e.g., 'digitize', 'chat')", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Target runtime type: 'podman' or 'openshift'. Defaults to server runtime when absent.", "name": "runtime", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsService" } }, "400": { "description": "Invalid runtime parameter", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Service not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/services/{id}/images": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the complete list of container images required to deploy a service and all its component dependencies.\nThe response always includes catalog asset images (the tool image used for housekeeping tasks\nand the catalog infrastructure images for the catalog service itself).\nBoth embedded (built-in) and custom bundle services are supported.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get service images", "parameters": [ { "type": "string", "description": "Service ID (e.g., 'chat', 'digitize', 'summarize')", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "List of container image references", "schema": { "type": "array", "items": { "type": "string" } } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Service not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/services/{id}/models": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns all unique model names referenced in the schema of a service's component dependencies", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get models for a service", "parameters": [ { "type": "string", "description": "Service ID (e.g., 'chat', 'digitize')", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "List of unique model names", "schema": { "type": "array", "items": { "type": "string" } } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Service not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/services/{id}/params": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Retrieves the configuration schema (JSON Schema) for a specific service. Returns a JSON Schema object with properties that define the service's configurable parameters.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get service parameters", "parameters": [ { "type": "string", "description": "Service ID (e.g., 'chat', 'digitize', 'similarity')", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Target runtime type: 'podman' or 'openshift'. Defaults to server runtime when absent.", "name": "runtime", "in": "query" } ], "responses": { "200": { "description": "JSON Schema object with $schema, type, and properties defining service parameters", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request - Invalid service ID or runtime parameter", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Service not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/services/{id}/steps": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns all files under the service's steps directory for the requested runtime\n(e.g. info.md, next.md, vars_file.yaml). Both embedded and custom bundle services\nare supported. The response is a JSON object keyed by filename with the raw file\ncontent as a string value.", "produces": [ "application/json" ], "tags": [ "Catalog" ], "summary": "Get steps files for a service", "parameters": [ { "type": "string", "description": "Service ID (e.g., 'chat', 'digitize')", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Runtime type: 'podman' or 'openshift' (default: podman)", "name": "runtime", "in": "query" } ], "responses": { "200": { "description": "Map of filename to raw file content", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Invalid runtime value", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "401": { "description": "Unauthorized - Invalid or missing access token", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "404": { "description": "Service not found", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.ErrorResponse" } } } } }, "/workers": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns all registered workers, their current status, human-readable message, and connected application IDs.", "produces": [ "application/json" ], "tags": [ "Workers" ], "summary": "List all workers", "responses": { "200": { "description": "List of workers", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Worker" } } }, "500": { "description": "Internal error", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Pre-registers a worker by name, creates a pending DB row, and returns a single-use bootstrap token.\nThe operator passes this token when starting the worker daemon (`worker join --token \u003ctoken\u003e`).", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Workers" ], "summary": "Register a new worker", "parameters": [ { "description": "Worker registration request", "name": "worker", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.createWorkerReq" } } ], "responses": { "201": { "description": "Worker registered; token valid for 24 hours", "schema": { "$ref": "#/definitions/internal_pkg_catalog_apiserver_handlers.createWorkerResp" } }, "400": { "description": "Invalid payload", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal error", "schema": { "type": "object", "additionalProperties": true } } } } }, "/workers/{id}": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns the worker with the given ID, including its status message and connected application IDs.", "produces": [ "application/json" ], "tags": [ "Workers" ], "summary": "Get a single worker", "parameters": [ { "type": "string", "description": "Worker ID (UUID)", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Worker details", "schema": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Worker" } }, "400": { "description": "Invalid worker ID", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Worker not found", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal error", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "description": "Permanently removes a worker from the registry and the database.\nIf the worker is currently connected its gRPC stream is also cleaned up.", "produces": [ "application/json" ], "tags": [ "Workers" ], "summary": "Deregister a worker", "parameters": [ { "type": "string", "description": "Worker ID (UUID)", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "Worker deleted" }, "400": { "description": "Invalid worker ID", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Worker not found", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal error", "schema": { "type": "object", "additionalProperties": true } } } } } }, "definitions": { "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.Component": { "type": "object", "required": [ "component_type", "provider_id", "version" ], "properties": { "component_type": { "type": "string" }, "params": { "type": "object", "additionalProperties": {} }, "provider_id": { "type": "string" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ConnectDatasourcesRequest": { "type": "object", "required": [ "datasource_ids" ], "properties": { "datasource_ids": { "description": "DatasourceIDs is the list of datasource connector UUIDs to connect.", "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ConnectDatasourcesResponse": { "type": "object", "properties": { "errors": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceConnectionError" } } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ConnectedApplicationItem": { "type": "object", "properties": { "catalog_id": { "description": "CatalogID is the catalog identifier of the owning application (e.g. \"rag\").", "type": "string" }, "err_msg": { "description": "ErrMsg is populated when sync state could not be fetched (e.g. service unreachable or\nno endpoint registered). Empty on success.", "type": "string" }, "id": { "description": "ID is the UUID of the application that owns this service.", "type": "string" }, "last_sync_at": { "description": "LastSyncAt is the ISO-8601 timestamp of the last completed sync, or null when unavailable.", "type": "string" }, "name": { "description": "Name is the human-readable display name of the owning application.", "type": "string" }, "sync_status": { "description": "SyncStatus is the current sync state sourced from the downstream service pod.\nSet to \"unknown\" when the pod is unreachable.", "type": "string" }, "type": { "description": "Type is the resolved catalog type name of the owning application (e.g. \"Digital Assistants\").\nFalls back to CatalogID when the catalog entry cannot be loaded.", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateApplicationRequest": { "type": "object", "required": [ "catalog_id", "name", "services", "version" ], "properties": { "catalog_id": { "type": "string" }, "name": { "type": "string", "maxLength": 100, "minLength": 3 }, "services": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.Service" } }, "version": { "type": "string" }, "worker_name": { "description": "WorkerName is the name of a connected remote worker to deploy to.\nWhen empty the application is deployed locally.", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateApplicationResponse": { "type": "object", "properties": { "id": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateDatasourceRequest": { "type": "object", "required": [ "name", "params", "provider_id" ], "properties": { "name": { "description": "Name is the unique human-readable label for this connector.\nMust be 3–100 characters; only letters, digits, hyphens (-), and underscores (_) are\nallowed. Duplicate-name detection is case-insensitive (\"My-DB\" and \"my-db\" conflict).", "type": "string", "maxLength": 100, "minLength": 3 }, "params": { "description": "Params holds the provider-specific configuration. Sensitive fields (format: \"password\"\nin the JSON schema) are encrypted at rest; all other fields are stored in plain text.", "type": "object", "additionalProperties": {} }, "provider_id": { "description": "ProviderID identifies the provider implementation (e.g. \"object_storage\", \"file_system\").", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.CreateDatasourceResponse": { "type": "object", "properties": { "id": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceApplicationsResponse": { "type": "object", "properties": { "applications": { "description": "Applications lists every application currently connected to this datasource,\nenriched with live sync state from each downstream service pod.", "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ConnectedApplicationItem" } }, "datasource_id": { "description": "DatasourceID is the UUID of the queried datasource connector.", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceConnectionError": { "type": "object", "properties": { "datasource_id": { "type": "string" }, "error": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceResponse" } }, "pagination": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.PaginationMetadata" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceProviderInfo": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceResponse": { "type": "object", "properties": { "connected_services": { "type": "integer" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "provider": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceProviderInfo" }, "status": { "type": "string" }, "type": { "type": "string" }, "updated_at": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.GetApplicationDatasourceResponse": { "type": "object", "properties": { "id": { "description": "ID is the UUID of the datasource connector.", "type": "string" }, "message": { "description": "Message contains a human-readable description of the current status (omitted when empty).", "type": "string" }, "name": { "description": "Name is the unique human-readable label for this connector.", "type": "string" }, "provider": { "description": "Provider contains the provider ID and its resolved display name.", "allOf": [ { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceProviderInfo" } ] }, "service_details": { "description": "ServiceDetails contains live sync state fetched from the linked service.", "allOf": [ { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ServiceSyncDetails" } ] }, "status": { "description": "Status is the catalog-side connectivity health: \"connected\" or \"offline\".", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.GetDatasourceResponse": { "type": "object", "properties": { "applications": { "description": "Applications lists every application currently connected to this datasource,\nenriched with live sync state from each downstream service pod.", "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ConnectedApplicationItem" } }, "created_at": { "description": "CreatedAt is the creation timestamp.", "type": "string" }, "id": { "description": "ID is the UUID of the datasource connector.", "type": "string" }, "message": { "description": "Message contains a human-readable description of the current status (may be empty).", "type": "string" }, "metadata": { "description": "Metadata holds the non-sensitive configuration fields.\nSensitive fields (e.g. secret_access_key, private_key) are always stripped.", "type": "object", "additionalProperties": {} }, "name": { "description": "Name is the unique human-readable label.", "type": "string" }, "provider": { "description": "Provider contains the provider ID and its resolved display name.", "allOf": [ { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.DatasourceProviderInfo" } ] }, "status": { "description": "Status is the current connectivity status (\"connected\" or \"offline\").", "type": "string" }, "type": { "description": "Type is always \"datasource\".", "type": "string" }, "updated_at": { "description": "UpdatedAt is the last-update timestamp.", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.PropagationError": { "type": "object", "properties": { "error": { "description": "Error is the human-readable reason the propagation failed.", "type": "string" }, "id": { "description": "ID is the UUID of the application whose Digitize service could not be updated.", "type": "string" }, "name": { "description": "Name is the display name of that application, for UI rendering.", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.Service": { "type": "object", "required": [ "catalog_id", "components", "version" ], "properties": { "catalog_id": { "type": "string" }, "components": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.Component" } }, "params": { "description": "Service-level parameters", "type": "object", "additionalProperties": {} }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.ServiceSyncDetails": { "type": "object", "properties": { "err_msg": { "description": "ErrMsg is populated when the connected service was unreachable or returned an error.\nOmitted from the JSON response when empty (i.e. when the service was reachable).", "type": "string" }, "last_sync_at": { "description": "LastSyncAt is the ISO-8601 timestamp of the last completed sync, or null when unavailable.", "type": "string" }, "last_sync_error": { "description": "LastSyncError is the error string from the last failed sync, or null on success.", "type": "string" }, "sync_status": { "description": "SyncStatus is the current sync state from the service. Set to \"unknown\" when unreachable.", "type": "string" }, "total_files": { "description": "TotalFiles is the total number of files known to the connector, or null when unavailable.", "type": "integer" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.UpdateDatasourceRequest": { "type": "object", "required": [ "params" ], "properties": { "params": { "description": "Params holds the credential fields to update. Only fields in the provider's\nschema whose ui:section is \"Authentication\" may be changed; structural fields\nare filtered out server-side.\nNote: binding:\"required\" only prevents null/missing — an empty map is rejected in the\nservice layer, which also validates that at least one updatable field is present.", "type": "object", "additionalProperties": {} } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.UpdateDatasourceResponse": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "id": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "propagation_errors": { "description": "PropagationErrors lists any downstream Digitize propagation failures.\nOmitted when all propagations succeeded.", "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_models.PropagationError" } }, "provider": { "type": "string" }, "status": { "type": "string" }, "type": { "type": "string" }, "updated_at": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_repository.DeleteApplicationResponse": { "type": "object", "properties": { "id": { "type": "string" }, "message": { "type": "string" }, "status": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleListResponse": { "type": "object", "properties": { "bundles": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleResponse" } }, "pagination": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.PaginationMetadata" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleResponse": { "type": "object", "properties": { "catalog_id": { "type": "string" }, "catalog_type": { "type": "string" }, "created_at": { "type": "string" }, "created_by": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "size_bytes": { "type": "integer" }, "status": { "type": "string" }, "updated_at": { "type": "string" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_apiserver_services_bundle.BundleValidationResult": { "type": "object", "properties": { "catalog_id": { "type": "string" }, "catalog_type": { "type": "string" }, "name": { "type": "string" }, "valid": { "type": "boolean" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Application": { "type": "object", "properties": { "catalog_id": { "type": "string" }, "created_at": { "type": "string" }, "deployment_type": { "type": "string" }, "id": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "services": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationService" } }, "status": { "type": "string" }, "type": { "type": "string" }, "updated_at": { "type": "string" }, "version": { "type": "string" }, "worker": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationWorker" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationCPUInfo": { "type": "object", "properties": { "total_cpu": { "description": "Total allocated CPUs", "type": "number" }, "used_cpu": { "description": "Actually used CPUs", "type": "number" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Application" } }, "pagination": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.PaginationMetadata" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationMemInfo": { "type": "object", "properties": { "total_bytes": { "description": "Total allocated memory in bytes", "type": "integer" }, "used_bytes": { "description": "Actually used memory in bytes", "type": "integer" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationPSResponse": { "type": "object", "properties": { "components": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Pod" } }, "id": { "type": "string" }, "name": { "type": "string" }, "services": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Pod" } } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationResourcesResponse": { "type": "object", "properties": { "accelerators": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } }, "cpu": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationCPUInfo" }, "memory": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationMemInfo" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationService": { "type": "object", "properties": { "catalog_id": { "type": "string" }, "components": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ServiceComponentResp" } }, "created_at": { "type": "string" }, "endpoints": { "type": "array", "items": { "type": "object", "additionalProperties": {} } }, "id": { "type": "string" }, "message": { "type": "string" }, "status": { "type": "string" }, "type": { "type": "string" }, "updated_at": { "type": "string" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ApplicationWorker": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "runtime_type": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Architecture": { "type": "object", "properties": { "certified_by": { "type": "string" }, "description": { "type": "string" }, "global_components": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ComponentReference" } }, "id": { "type": "string" }, "links": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ArchitectureLinks" }, "name": { "type": "string" }, "runtimes": { "type": "array", "items": { "type": "string" } }, "services": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ServiceReference" } }, "type": { "description": "\"architecture\"", "type": "string" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ArchitectureLinks": { "type": "object", "properties": { "code": { "type": "string" }, "demo": { "type": "string" }, "documentation": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ArchitectureSummary": { "type": "object", "properties": { "certified_by": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "services": { "type": "array", "items": { "type": "string" } } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ComponentReference": { "type": "object", "properties": { "type": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ConnectorProvider": { "type": "object", "properties": { "description": { "description": "Description is a short description of the provider.", "type": "string" }, "id": { "description": "ID is the provider identifier (e.g. \"object_storage\", \"file_system\").", "type": "string" }, "name": { "description": "Name is the human-readable display name of the provider.", "type": "string" }, "schema": { "description": "Schema is the path to the provider's JSON Schema params endpoint.", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ConnectorResponse": { "type": "object", "properties": { "name": { "description": "Name is the display label for the connector type (e.g. \"Data sources\").", "type": "string" }, "provider": { "description": "Provider contains the identity and schema URL of the connector provider.", "allOf": [ { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ConnectorProvider" } ] }, "type": { "description": "Type is the connector type (e.g. \"datasource\").", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DependencyReference": { "type": "object", "properties": { "id": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsArchitecture": { "type": "object", "properties": { "global_components": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsComponent" } }, "id": { "type": "string" }, "name": { "type": "string" }, "services": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsService" } }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsComponent": { "type": "object", "properties": { "name": { "type": "string" }, "providers": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsProvider" } }, "type": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsProvider": { "type": "object", "properties": { "default": { "type": "boolean" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "resources": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Resources" }, "schema": { "type": "string" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsService": { "type": "object", "properties": { "accepts_datasource": { "type": "boolean" }, "components": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DeployOptionsComponent" } }, "id": { "type": "string" }, "name": { "type": "string" }, "resources": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Resources" }, "schema": { "type": "string" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.PaginationMetadata": { "type": "object", "properties": { "has_next": { "type": "boolean" }, "has_prev": { "type": "boolean" }, "page": { "type": "integer" }, "page_size": { "type": "integer" }, "total_items": { "type": "integer" }, "total_pages": { "type": "integer" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Pod": { "type": "object", "properties": { "containers": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.PodContainer" } }, "created": { "type": "string" }, "healthy": { "type": "boolean" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "pod_id": { "type": "string" }, "pod_name": { "type": "string" }, "status": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Status" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.PodContainer": { "type": "object", "properties": { "healthy": { "type": "boolean" }, "name": { "type": "string" }, "status": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Status" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ProviderInfo": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Resources": { "type": "object", "properties": { "accelerators": { "description": "Accelerator cards (e.g., \"ibm.com/spyre_pf\": 1)", "type": "object", "additionalProperties": { "type": "integer" } }, "cpu": { "description": "CPU cores", "type": "integer" }, "memory": { "description": "Memory in bytes", "type": "integer" }, "storage": { "description": "Storage in bytes", "type": "integer" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Service": { "type": "object", "properties": { "accepts_datasource": { "type": "boolean" }, "architectures": { "type": "array", "items": { "type": "string" } }, "certified_by": { "type": "string" }, "dependencies": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DependencyReference" } }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "standalone": { "type": "boolean" }, "type": { "description": "\"service\"", "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ServiceComponentResp": { "type": "object", "properties": { "id": { "type": "string" }, "message": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": {} }, "provider": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ProviderInfo" }, "status": { "type": "string" }, "type": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ServiceReference": { "type": "object", "properties": { "id": { "type": "string" }, "optional": { "type": "boolean" }, "version": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.ServiceSummary": { "type": "object", "properties": { "architectures": { "type": "array", "items": { "type": "string" } }, "certified_by": { "type": "string" }, "dependencies": { "type": "array", "items": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_catalog_types.DependencyReference" } }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "standalone": { "type": "boolean" } } }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Status": { "type": "string", "enum": [ "waiting", "running", "terminated", "created", "paused", "restarting", "exited", "removing", "dead" ], "x-enum-varnames": [ "Waiting", "Running", "Terminated", "Created", "Paused", "Restarting", "Exited", "Removing", "Dead" ] }, "github_com_project-ai-services_ai-services_internal_pkg_catalog_types.Worker": { "type": "object", "properties": { "application_ids": { "type": "array", "items": { "type": "string" } }, "id": { "type": "string" }, "last_heartbeat": { "type": "string" }, "message": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": {} }, "name": { "type": "string" }, "registered_at": { "type": "string" }, "runtime_type": { "type": "string" }, "status": { "type": "string" }, "updated_at": { "type": "string" } } }, "github_com_project-ai-services_ai-services_internal_pkg_models.AcceleratorInfo": { "type": "object", "properties": { "available": { "type": "integer" }, "total": { "type": "integer" } } }, "github_com_project-ai-services_ai-services_internal_pkg_models.CPUInfo": { "type": "object", "properties": { "available_cpu": { "type": "number" }, "total_cpu": { "type": "integer" } } }, "github_com_project-ai-services_ai-services_internal_pkg_models.MemoryInfo": { "type": "object", "properties": { "available_bytes": { "type": "integer" }, "total_bytes": { "type": "integer" } } }, "internal_pkg_catalog_apiserver_handlers.ErrorResponse": { "type": "object", "properties": { "error": { "type": "string" } } }, "internal_pkg_catalog_apiserver_handlers.ResourcesResponse": { "type": "object", "properties": { "accelerators": { "type": "object", "additionalProperties": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_models.AcceleratorInfo" } }, "cpu": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_models.CPUInfo" }, "memory": { "$ref": "#/definitions/github_com_project-ai-services_ai-services_internal_pkg_models.MemoryInfo" } } }, "internal_pkg_catalog_apiserver_handlers.UpdateApplicationRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "maxLength": 100, "minLength": 3 } } }, "internal_pkg_catalog_apiserver_handlers.createWorkerReq": { "type": "object", "required": [ "worker_name" ], "properties": { "worker_name": { "type": "string", "maxLength": 100, "minLength": 1 } } }, "internal_pkg_catalog_apiserver_handlers.createWorkerResp": { "type": "object", "properties": { "token": { "type": "string" }, "worker_name": { "type": "string" } } }, "internal_pkg_catalog_apiserver_handlers.loginReq": { "type": "object", "required": [ "password", "username" ], "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "internal_pkg_catalog_apiserver_handlers.refreshReq": { "type": "object", "required": [ "refresh_token" ], "properties": { "refresh_token": { "type": "string" } } } }, "securityDefinitions": { "BearerAuth": { "description": "Type \"Bearer\" followed by a space and JWT token.", "type": "apiKey", "name": "Authorization", "in": "header" } }, "tags": [ { "description": "Authentication and authorization endpoints", "name": "Authentication" }, { "description": "Application management endpoints", "name": "Applications" }, { "description": "Catalog endpoints for architectures and services", "name": "Catalog" } ] }