{ "swagger": "2.0", "info": { "description": "API for interacting with Marmot", "title": "Marmot API", "contact": {}, "license": { "name": "MIT", "url": "https://opensource.org/license/MIT" }, "version": "0.1" }, "paths": { "/api/v1/admin/search/reindex": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Check whether a search reindex is currently running and whether Elasticsearch is configured.", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get reindex status", "operationId": "getAdminSearchReindex", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ReindexStatusResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Trigger a full reindex from PostgreSQL to Elasticsearch. The reindex runs asynchronously in the background. Only one reindex can run at a time.", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Start search reindex", "operationId": "postAdminSearchReindex", "responses": { "202": { "description": "Accepted", "schema": { "$ref": "#/definitions/ReindexAcceptedResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "503": { "description": "Service Unavailable", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/agents/runs": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "agents" ], "summary": "Record agent run", "operationId": "postAgentsRuns", "parameters": [ { "description": "Agent run record", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/RecordRunRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/AgentRun" } } } } }, "/api/v1/agents/{asset_id}/activity": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "agents" ], "summary": "Agent activity", "operationId": "getAgentsAssetIDActivity", "parameters": [ { "type": "string", "description": "Agent asset id", "name": "asset_id", "in": "path", "required": true }, { "type": "string", "description": "Lookback window (e.g. 24h, 7d). Default 24h.", "name": "period", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ActivityResponse" } } } } }, "/api/v1/agents/{asset_id}/runs": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "agents" ], "summary": "List agent runs", "operationId": "getAgentsAssetIDRuns", "parameters": [ { "type": "string", "description": "Agent asset id", "name": "asset_id", "in": "path", "required": true }, { "type": "string", "description": "Lookback window (e.g. 24h, 7d). Default 24h.", "name": "period", "in": "query" }, { "type": "integer", "description": "Max number of runs to return", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/RunsResponse" } } } } }, "/api/v1/agents/{asset_id}/stats": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "agents" ], "summary": "Agent stats", "operationId": "getAgentsAssetIDStats", "parameters": [ { "type": "string", "description": "Agent asset id", "name": "asset_id", "in": "path", "required": true }, { "type": "string", "description": "Lookback window (e.g. 24h, 7d). Default 24h.", "name": "period", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Stats" } } } } }, "/api/v1/asset-rules/": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new asset rule that applies enrichments to matching assets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "asset-rules" ], "summary": "Create an asset rule", "operationId": "postAssetRules", "parameters": [ { "description": "Asset rule creation request", "name": "rule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateAssetRuleRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/AssetRule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/asset-rules/assets/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the list of asset IDs matched by an asset rule", "produces": [ "application/json" ], "tags": [ "asset-rules" ], "summary": "Get assets matched by a rule", "operationId": "getAssetRulesAssetsID", "parameters": [ { "type": "string", "description": "Asset rule ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "default": 50, "description": "Number of items to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of items to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/asset-rules/list": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "List all asset rules with pagination", "produces": [ "application/json" ], "tags": [ "asset-rules" ], "summary": "List asset rules", "operationId": "getAssetRulesList", "parameters": [ { "type": "integer", "default": 50, "description": "Number of items to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of items to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetRuleListResult" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/asset-rules/preview": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Preview which assets would match a rule configuration", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "asset-rules" ], "summary": "Preview an asset rule", "operationId": "postAssetRulesPreview", "parameters": [ { "description": "Rule preview request", "name": "rule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/PreviewRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/RulePreview" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/asset-rules/search": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Search asset rules by name", "produces": [ "application/json" ], "tags": [ "asset-rules" ], "summary": "Search asset rules", "operationId": "getAssetRulesSearch", "parameters": [ { "type": "string", "description": "Search query", "name": "query", "in": "query" }, { "type": "integer", "default": 50, "description": "Number of items to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of items to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetRuleListResult" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/asset-rules/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get an asset rule by ID", "produces": [ "application/json" ], "tags": [ "asset-rules" ], "summary": "Get an asset rule", "operationId": "getAssetRulesID", "parameters": [ { "type": "string", "description": "Asset rule ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetRule" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update an existing asset rule", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "asset-rules" ], "summary": "Update an asset rule", "operationId": "putAssetRulesID", "parameters": [ { "type": "string", "description": "Asset rule ID", "name": "id", "in": "path", "required": true }, { "description": "Asset rule update request", "name": "rule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateAssetRuleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetRule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete an asset rule by ID", "tags": [ "asset-rules" ], "summary": "Delete an asset rule", "operationId": "deleteAssetRulesID", "parameters": [ { "type": "string", "description": "Asset rule ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new asset in the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Create a new asset", "operationId": "postAssets", "parameters": [ { "description": "Asset creation request", "name": "asset", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateAssetRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/by-glossary-term/{term_id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Retrieve all assets associated with a specific glossary term", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get assets by glossary term", "operationId": "getAssetsByGlossaryTermTermID", "parameters": [ { "type": "string", "description": "Glossary Term ID", "name": "term_id", "in": "path", "required": true }, { "type": "integer", "default": 20, "description": "Maximum number of assets", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Pagination offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/documentation/": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create or update documentation for an asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Create asset documentation", "operationId": "postAssetsDocumentation", "parameters": [ { "description": "Documentation creation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/DocumentationCreateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Documentation" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/documentation/batch": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create or update documentation for multiple assets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Batch create documentation", "operationId": "postAssetsDocumentationBatch", "parameters": [ { "description": "Batch documentation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/BatchDocumentationRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/BatchDocumentationResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/documentation/{mrn}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get documentation for a specific asset", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset documentation", "operationId": "getAssetsDocumentationMrn", "parameters": [ { "type": "string", "format": "url", "description": "Asset MRN", "name": "mrn", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/Documentation" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/lookup/{type}/{service}/{name}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get an asset by its type, service (provider), and name", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Lookup asset by type, service, and name", "operationId": "getAssetsLookupTypeServiceName", "parameters": [ { "type": "string", "description": "Asset type", "name": "type", "in": "path", "required": true }, { "type": "string", "description": "Service/Provider name", "name": "service", "in": "path", "required": true }, { "type": "string", "description": "Asset name", "name": "name", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Asset" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/match-pattern/": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Find assets matching a pattern", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Match asset pattern", "operationId": "getAssetsMatchPattern", "parameters": [ { "type": "string", "description": "Asset pattern to match", "name": "pattern", "in": "query", "required": true }, { "type": "string", "description": "Asset type", "name": "type", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/Asset" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/my-assets": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get assets owned by the current user or their teams", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get user's assets", "operationId": "getAssetsMyAssets", "parameters": [ { "type": "integer", "default": 20, "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetSearchResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/preview/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Fetches sample data from the asset's data source. Requires assets:preview permission.", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get preview data for an asset", "operationId": "getAssetsPreviewID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/PreviewResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "403": { "description": "Missing assets:preview permission", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "501": { "description": "Data preview not supported for this asset", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/qualified-name/{name}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get detailed information about a specific asset using its qualified name", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get an asset by qualified name", "operationId": "getAssetsQualifiedNameQualifiedName", "parameters": [ { "type": "string", "description": "Asset qualified name", "name": "name", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Asset" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/run-history-histogram/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get histogram data for asset run history over specified period", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset run history histogram", "operationId": "getAssetsIDRunHistoryHistogram", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "type": "string", "default": "30d", "description": "Time period (7d, 30d, 90d)", "name": "period", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/HistogramResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/run-history/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get paginated run history for a specific asset", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset run history", "operationId": "getAssetsIDRunHistory", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "default": 10, "description": "Number of items per page", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of items to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/RunHistoryResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/search": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Search for assets using query string and filters", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Search assets", "operationId": "getAssetsSearch", "parameters": [ { "type": "string", "description": "Search query", "name": "q", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Filter by asset types", "name": "types", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Filter by services", "name": "services", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Filter by tags", "name": "tags", "in": "query" }, { "type": "integer", "default": 50, "description": "Number of items to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of items to skip", "name": "offset", "in": "query" }, { "type": "boolean", "default": false, "description": "Calculate filter counts", "name": "calculateCounts", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetSearchResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/suggestions/metadata/fields": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get suggestions for metadata fields and their types", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get metadata field suggestions", "operationId": "getAssetsSuggestionsMetadataFields", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/MetadataFieldSuggestion" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/suggestions/metadata/values": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get suggestions for values of a specific metadata field", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get metadata value suggestions", "operationId": "getAssetsSuggestionsMetadataValues", "parameters": [ { "type": "string", "description": "Metadata field name", "name": "field", "in": "query", "required": true }, { "type": "string", "description": "Value prefix to filter by", "name": "prefix", "in": "query" }, { "type": "integer", "default": 10, "description": "Maximum number of suggestions", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/MetadataValueSuggestion" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/suggestions/tags": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get suggestions for asset tags", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get tag suggestions", "operationId": "getAssetsSuggestionsTags", "parameters": [ { "type": "string", "description": "Tag prefix to filter by", "name": "prefix", "in": "query" }, { "type": "integer", "default": 10, "description": "Maximum number of suggestions", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/summary": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the total count of assets by type", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset summary", "operationId": "getAssetsSummary", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetSummaryResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/tags/{id}": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Add a new tag to an existing asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Add tag to asset", "operationId": "postAssetsTagsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "description": "Tag to add", "name": "tag", "in": "body", "required": true, "schema": { "$ref": "#/definitions/TagRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Remove a tag from an existing asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Remove tag from asset", "operationId": "deleteAssetsTagsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "description": "Tag to remove", "name": "tag", "in": "body", "required": true, "schema": { "$ref": "#/definitions/TagRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/terms/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Retrieve all glossary terms associated with an asset", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset's glossary terms", "operationId": "getAssetsTermsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/AssetTerm" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Associate one or more glossary terms with an asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Add glossary terms to asset", "operationId": "postAssetsTermsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "description": "Term IDs to add", "name": "terms", "in": "body", "required": true, "schema": { "$ref": "#/definitions/AddTermsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/AssetTerm" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Remove a glossary term association from an asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Remove glossary term from asset", "operationId": "deleteAssetsTermsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "description": "Term ID to remove", "name": "term", "in": "body", "required": true, "schema": { "$ref": "#/definitions/RemoveTermRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/AssetTerm" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/assets/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get detailed information about a specific asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get an asset by ID", "operationId": "getAssetsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Asset" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update an existing asset's information", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Update an asset", "operationId": "putAssetsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "description": "Asset update request", "name": "asset", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateAssetRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete an asset from the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Delete an asset", "operationId": "deleteAssetsID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/glossary/": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new glossary term with name, definition, and optional metadata", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "Create glossary term", "operationId": "postGlossary", "parameters": [ { "description": "Glossary term to create", "name": "term", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateTermRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/GlossaryTerm" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/glossary/ancestors/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Retrieve all ancestor terms of a glossary term (parent chain)", "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "Get ancestor terms", "operationId": "getGlossaryAncestorsID", "parameters": [ { "type": "string", "description": "Term ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/glossary/children/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Retrieve all child terms of a glossary term", "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "Get child terms", "operationId": "getGlossaryChildrenID", "parameters": [ { "type": "string", "description": "Parent Term ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/glossary/list": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Retrieve a paginated list of all glossary terms", "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "List glossary terms", "operationId": "getGlossaryList", "parameters": [ { "type": "integer", "default": 20, "description": "Maximum number of terms to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of terms to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/GlossaryListResult" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/glossary/search": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Search for glossary terms by query string and filters", "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "Search glossary terms", "operationId": "getGlossarySearch", "parameters": [ { "type": "string", "description": "Search query", "name": "q", "in": "query" }, { "type": "string", "description": "Filter by parent term ID", "name": "parent_term_id", "in": "query" }, { "type": "integer", "default": 20, "description": "Maximum number of terms to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of terms to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/GlossaryListResult" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/glossary/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Retrieve a glossary term by its ID", "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "Get glossary term", "operationId": "getGlossaryID", "parameters": [ { "type": "string", "description": "Glossary Term ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/GlossaryTerm" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update an existing glossary term by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "Update glossary term", "operationId": "putGlossaryID", "parameters": [ { "type": "string", "description": "Glossary Term ID", "name": "id", "in": "path", "required": true }, { "description": "Glossary term update data", "name": "term", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateTermRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/GlossaryTerm" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a glossary term by its ID", "produces": [ "application/json" ], "tags": [ "glossary" ], "summary": "Delete glossary term", "operationId": "deleteGlossaryID", "parameters": [ { "type": "string", "description": "Glossary Term ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/runs": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "List ingestion job runs", "operationId": "getIngestionRuns", "parameters": [ { "type": "string", "description": "Filter by schedule ID", "name": "schedule_id", "in": "query" }, { "type": "string", "description": "Filter by status", "name": "status", "in": "query" }, { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ListJobRunsResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/runs/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Get a job run by ID", "operationId": "getIngestionRunsID", "parameters": [ { "type": "string", "description": "Job run ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/JobRun" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/runs/{id}/cancel": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ "ingestion" ], "summary": "Cancel a running job", "operationId": "postIngestionRunsIDCancel", "parameters": [ { "type": "string", "description": "Job run ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/runs/{id}/entities": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Get entities for a job run", "operationId": "getIngestionRunsIDEntities", "parameters": [ { "type": "string", "description": "Job run ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/schedules": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "List ingestion schedules", "operationId": "getIngestionSchedules", "parameters": [ { "type": "boolean", "description": "Filter by enabled status", "name": "enabled", "in": "query" }, { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ListSchedulesResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Create a new ingestion schedule", "operationId": "postIngestionSchedules", "parameters": [ { "description": "Schedule configuration", "name": "schedule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateScheduleRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/Schedule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/schedules/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Get an ingestion schedule by ID", "operationId": "getIngestionSchedulesID", "parameters": [ { "type": "string", "description": "Schedule ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Schedule" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Update an ingestion schedule", "operationId": "putIngestionSchedulesID", "parameters": [ { "type": "string", "description": "Schedule ID", "name": "id", "in": "path", "required": true }, { "description": "Updated schedule configuration", "name": "schedule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateScheduleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Schedule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ "ingestion" ], "summary": "Delete an ingestion schedule", "operationId": "deleteIngestionSchedulesID", "parameters": [ { "type": "string", "description": "Schedule ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/schedules/{id}/trigger": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "tags": [ "ingestion" ], "summary": "Manually trigger an ingestion schedule", "operationId": "postIngestionSchedulesIDTrigger", "parameters": [ { "type": "string", "description": "Schedule ID", "name": "id", "in": "path", "required": true } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/JobRun" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ingestion/validate": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Validate plugin configuration", "operationId": "postIngestionValidate", "parameters": [ { "description": "Config to validate", "name": "config", "in": "body", "required": true, "schema": { "$ref": "#/definitions/ValidateConfigRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ValidateConfigResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/lineage": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Process OpenLineage run events and update assets/lineage accordingly", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Ingest OpenLineage event", "operationId": "postLineage", "parameters": [ { "description": "OpenLineage run event", "name": "event", "in": "body", "required": true, "schema": { "$ref": "#/definitions/RunEvent" } } ], "responses": { "200": { "description": "Event processed successfully" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/lineage/assets/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get upstream and downstream lineage for a specific asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Get asset lineage", "operationId": "getLineageAssetsID", "parameters": [ { "type": "string", "format": "uuid", "description": "Asset ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "default": 10, "description": "Maximum depth of lineage graph", "name": "limit", "in": "query" }, { "enum": [ "upstream", "downstream", "both" ], "type": "string", "default": "both", "description": "Direction of lineage (upstream, downstream, or both)", "name": "direction", "in": "query" }, { "type": "string", "description": "Comma separated edge types to leave out, for example CONTAINS to see data flow without structure", "name": "exclude_types", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/LineageResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/lineage/batch": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create lineage edges in batch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Batch create lineage edges", "operationId": "postLineageBatch", "parameters": [ { "description": "Array of lineage edges to create", "name": "edges", "in": "body", "required": true, "schema": { "type": "array", "items": { "$ref": "#/definitions/LineageEdge" } } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/BatchLineageResult" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/lineage/direct": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a direct lineage connection between two assets and returns the created edge", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Create direct lineage", "operationId": "postLineageDirect", "parameters": [ { "description": "Lineage edge to create", "name": "edge", "in": "body", "required": true, "schema": { "$ref": "#/definitions/LineageEdge" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/LineageEdge" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/lineage/direct/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a specific direct lineage connection by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Get direct lineage by ID", "operationId": "getLineageDirectID", "parameters": [ { "type": "string", "format": "uuid", "description": "Edge ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/LineageEdge" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a direct lineage connection by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Delete direct lineage", "operationId": "deleteLineageDirectID", "parameters": [ { "type": "string", "format": "uuid", "description": "Edge ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/mcp": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "JSON-RPC 2.0 over the MCP Streamable HTTP transport. Requires assets:view, glossary:view and teams:view.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "mcp" ], "summary": "MCP endpoint", "operationId": "postMcp", "parameters": [ { "description": "JSON-RPC 2.0 request", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "JSON-RPC 2.0 response", "schema": { "type": "object", "additionalProperties": true } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/metrics": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get aggregated metrics for dashboard display", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get metrics for UI", "operationId": "getMetrics", "parameters": [ { "type": "string", "description": "Start time (ISO 8601)", "name": "start", "in": "query", "required": true }, { "type": "string", "description": "End time (ISO 8601)", "name": "end", "in": "query", "required": true }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Filter by metric names", "name": "metric_names", "in": "query" }, { "enum": [ "avg", "sum", "max", "min" ], "type": "string", "default": "avg", "description": "Aggregation type", "name": "aggregation", "in": "query" }, { "enum": [ "1m", "5m", "1h", "1d" ], "type": "string", "description": "Time bucket size", "name": "bucket_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/GetMetricsResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/metrics/assets/by-owner": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get asset counts grouped by owner", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets by owner", "operationId": "getMetricsAssetsByOwner", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetsByOwnerResponse" } } } } }, "/api/v1/metrics/assets/by-provider": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get asset counts grouped by provider", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets by provider", "operationId": "getMetricsAssetsByProvider", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetsByProviderResponse" } } } } }, "/api/v1/metrics/assets/by-type": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get asset counts grouped by type", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets by type", "operationId": "getMetricsAssetsByType", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetsByTypeResponse" } } } } }, "/api/v1/metrics/assets/total": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the total number of assets", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get total assets count", "operationId": "getMetricsAssetsTotal", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/TotalAssetsResponse" } } } } }, "/api/v1/metrics/assets/with-schemas": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the count of assets that have schemas defined", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets with schemas count", "operationId": "getMetricsAssetsWithSchemas", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AssetsWithSchemasResponse" } } } } }, "/api/v1/metrics/top-assets": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the most viewed assets", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get top viewed assets", "operationId": "getMetricsTopAssets", "parameters": [ { "type": "string", "description": "Start time (ISO 8601)", "name": "start", "in": "query", "required": true }, { "type": "string", "description": "End time (ISO 8601)", "name": "end", "in": "query", "required": true }, { "type": "integer", "default": 10, "description": "Number of results", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/AssetCount" } } } } } }, "/api/v1/metrics/top-queries": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the most popular search queries", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get top search queries", "operationId": "getMetricsTopQueries", "parameters": [ { "type": "string", "description": "Start time (ISO 8601)", "name": "start", "in": "query", "required": true }, { "type": "string", "description": "End time (ISO 8601)", "name": "end", "in": "query", "required": true }, { "type": "integer", "default": 10, "description": "Number of results", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/QueryCount" } } } } } }, "/api/v1/owners/search": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Search for asset owners (users and teams)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "owners" ], "summary": "Search owners", "operationId": "getOwnersSearch", "parameters": [ { "type": "string", "description": "Search query", "name": "q", "in": "query", "required": true }, { "type": "integer", "default": 20, "description": "Maximum number of results", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/SearchOwnersResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/permissions": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "List all defined permissions grouped by resource type", "produces": [ "application/json" ], "tags": [ "roles" ], "summary": "List all permissions", "operationId": "getPermissions", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/RolePermission" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/pipelines/{pipelineName}": { "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete all resources ever created by a pipeline (across all sources)", "produces": [ "application/json" ], "tags": [ "pipelines" ], "summary": "Destroy pipeline", "operationId": "deletePipelinesPipelineName", "parameters": [ { "type": "string", "description": "Pipeline Name", "name": "pipelineName", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DestroyRunResponse" } } } } }, "/api/v1/plugins": { "get": { "produces": [ "application/json" ], "tags": [ "plugins" ], "summary": "List registered plugins", "operationId": "getPlugins", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ListPluginsResponse" } } } } }, "/api/v1/plugins/aws/credentials/status": { "get": { "description": "Detects if AWS credentials are available from environment or config files", "produces": [ "application/json" ], "tags": [ "plugins" ], "summary": "Get AWS credential detection status", "operationId": "getPluginsAwsCredentialsStatus", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AWSCredentialStatus" } } } } }, "/api/v1/products/": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new data product with owners and optional membership rules", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Create data product", "operationId": "postProducts", "parameters": [ { "description": "Data product to create", "name": "product", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateDataProductRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/DataProduct" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/assets/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the manually added assets of a data product", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Get data product assets", "operationId": "getProductsAssetsID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "default": 20, "description": "Maximum number of assets to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of assets to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProductAssetsResult" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Manually add assets to a data product", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Add data product assets", "operationId": "postProductsAssetsID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "description": "Asset IDs to add", "name": "assets", "in": "body", "required": true, "schema": { "$ref": "#/definitions/AddDataProductAssetsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/assets/{id}/{assetId}": { "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Remove a manually added asset from a data product", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Remove data product asset", "operationId": "deleteProductsAssetsIDAssetID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Asset ID", "name": "assetId", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/images/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "List all images for a data product", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "List product images", "operationId": "getProductsImagesID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/images/{id}/{purpose}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get an icon or header image for a data product", "produces": [ "image/jpeg", "image/png", "image/gif", "image/webp" ], "tags": [ "products" ], "summary": "Get product image", "operationId": "getProductsImagesIDPurpose", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Image purpose (icon or header)", "name": "purpose", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "file" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Upload an icon or header image for a data product", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Upload product image", "operationId": "postProductsImagesIDPurpose", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Image purpose (icon or header)", "name": "purpose", "in": "path", "required": true }, { "type": "file", "description": "Image file", "name": "file", "in": "formData", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ProductImageMeta" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete an icon or header image for a data product", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Delete product image", "operationId": "deleteProductsImagesIDPurpose", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Image purpose (icon or header)", "name": "purpose", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/list": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Retrieve a paginated list of data products", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "List data products", "operationId": "getProductsList", "parameters": [ { "type": "integer", "default": 20, "description": "Maximum number of data products to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of data products to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProductListResult" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/resolved-assets/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get all assets of a data product, both manually added and matched by rules", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Get resolved data product assets", "operationId": "getProductsResolvedAssetsID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "default": 20, "description": "Maximum number of assets to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of assets to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProductResolvedAssets" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/rule-preview": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Preview which assets would match a rule configuration", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Preview data product rule", "operationId": "postProductsRulePreview", "parameters": [ { "description": "Rule to preview", "name": "rule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/DataProductRuleRequest" } }, { "type": "integer", "default": 20, "description": "Maximum number of matching assets to return", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProductRulePreview" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/rules/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the membership rules of a data product", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Get data product rules", "operationId": "getProductsRulesID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProductRulesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a membership rule for a data product", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Create data product rule", "operationId": "postProductsRulesID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "description": "Rule to create", "name": "rule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/DataProductRuleRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/DataProductRule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/rules/{id}/{ruleId}": { "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update a membership rule of a data product", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Update data product rule", "operationId": "putProductsRulesIDRuleID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Rule ID", "name": "ruleId", "in": "path", "required": true }, { "description": "Rule fields to update", "name": "rule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/DataProductRuleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProductRule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a membership rule from a data product", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Delete data product rule", "operationId": "deleteProductsRulesIDRuleID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Rule ID", "name": "ruleId", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/search": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Search data products by name, description, and tags", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Search data products", "operationId": "getProductsSearch", "parameters": [ { "type": "string", "description": "Search query", "name": "q", "in": "query" }, { "type": "string", "description": "Comma-separated list of tags to filter by", "name": "tags", "in": "query" }, { "type": "integer", "default": 20, "description": "Maximum number of data products to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of data products to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProductListResult" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/products/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a data product by ID", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Get data product", "operationId": "getProductsID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProduct" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update an existing data product", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Update data product", "operationId": "putProductsID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true }, { "description": "Fields to update", "name": "product", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateDataProductRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/DataProduct" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a data product by ID", "produces": [ "application/json" ], "tags": [ "products" ], "summary": "Delete data product", "operationId": "deleteProductsID", "parameters": [ { "type": "string", "description": "Data Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/roles": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "List all active roles with user counts and permissions", "produces": [ "application/json" ], "tags": [ "roles" ], "summary": "List roles", "operationId": "getRoles", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/Role" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new role with optional initial permissions", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "roles" ], "summary": "Create a role", "operationId": "postRoles", "parameters": [ { "description": "Role creation request", "name": "role", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1_roles.createRoleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Role" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/roles/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a role by ID with its permissions", "produces": [ "application/json" ], "tags": [ "roles" ], "summary": "Get a role", "operationId": "getRolesID", "parameters": [ { "type": "string", "description": "Role ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Role" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Soft-delete a role. Fails if the role is a system role or has active user assignments.", "produces": [ "application/json" ], "tags": [ "roles" ], "summary": "Delete a role", "operationId": "deleteRolesID", "parameters": [ { "type": "string", "description": "Role ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "422": { "description": "Unprocessable Entity", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "patch": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update a role's name or description. System roles cannot be renamed.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "roles" ], "summary": "Update a role", "operationId": "patchRolesID", "parameters": [ { "type": "string", "description": "Role ID", "name": "id", "in": "path", "required": true }, { "description": "Role update request", "name": "role", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1_roles.updateRoleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Role" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "422": { "description": "Unprocessable Entity", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/roles/{id}/permissions": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Atomically replace all permissions on a role. System roles enforce a minimum permission floor.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "roles" ], "summary": "Replace role permissions", "operationId": "postRolesIDPermissions", "parameters": [ { "type": "string", "description": "Role ID", "name": "id", "in": "path", "required": true }, { "description": "Permission IDs to assign", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1_roles.replacePermissionsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Role" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "422": { "description": "Unprocessable Entity", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/runs": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get paginated list of runs with filtering", "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "List runs", "operationId": "getRuns", "parameters": [ { "type": "string", "description": "Comma-separated list of pipeline names", "name": "pipelines", "in": "query" }, { "type": "string", "description": "Comma-separated list of statuses", "name": "statuses", "in": "query" }, { "type": "integer", "default": 50, "description": "Number of results per page", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of results to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "pipelines": { "type": "array", "items": { "type": "string" } }, "runs": { "type": "array", "items": { "$ref": "#/definitions/PluginRun" } }, "total": { "type": "integer" } } } } } } }, "/api/v1/runs/assets/batch": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create/update assets within a run", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Batch create assets", "operationId": "postRunsAssetsBatch", "parameters": [ { "description": "Batch create request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/BatchCreateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/BatchCreateResponse" } } } } }, "/api/v1/runs/cleanup": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Mark runs as failed if they've been running too long without updates", "tags": [ "runs" ], "summary": "Cleanup stale runs", "operationId": "postRunsCleanup", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "integer" } } } } } }, "/api/v1/runs/complete": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Complete a run with results", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Complete run", "operationId": "postRunsComplete", "parameters": [ { "description": "Complete run request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CompleteRunRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/runs/start": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Start a new run for tracking", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Start run", "operationId": "postRunsStart", "parameters": [ { "description": "Start run request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/StartRunRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/PluginRun" } } } } }, "/api/v1/runs/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a specific run by ID", "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Get run", "operationId": "getRunsID", "parameters": [ { "type": "string", "description": "Run ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/PluginRun" } } } } }, "/api/v1/runs/{id}/entities": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get paginated list of entities for a specific run", "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Get run entities", "operationId": "getRunsIDEntities", "parameters": [ { "type": "string", "description": "Run ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Filter by entity type (asset, lineage, documentation)", "name": "entity_type", "in": "query" }, { "type": "string", "description": "Filter by status (created, updated, deleted, failed)", "name": "status", "in": "query" }, { "type": "integer", "default": 100, "description": "Number of results per page", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of results to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/RunEntitiesResponse" } } } } }, "/api/v1/search": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Search across assets, glossary terms, teams, and users", "produces": [ "application/json" ], "tags": [ "search" ], "summary": "Unified search", "operationId": "getSearch", "parameters": [ { "type": "string", "description": "Search query", "name": "q", "in": "query", "required": true }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Filter by result types (asset, glossary, team, user)", "name": "types", "in": "query" }, { "type": "integer", "default": 20, "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/SearchResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/service-accounts": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get all service accounts", "produces": [ "application/json" ], "tags": [ "service_accounts" ], "summary": "List service accounts", "operationId": "getServiceAccounts", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/ServiceAccount" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new service account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "service_accounts" ], "summary": "Create service account", "operationId": "postServiceAccounts", "parameters": [ { "description": "Service account", "name": "account", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateServiceAccountRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/ServiceAccount" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/service-accounts/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a service account by ID", "produces": [ "application/json" ], "tags": [ "service_accounts" ], "summary": "Get service account", "operationId": "getServiceAccountsID", "parameters": [ { "type": "string", "description": "Service account ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ServiceAccount" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Soft-delete a service account", "tags": [ "service_accounts" ], "summary": "Delete service account", "operationId": "deleteServiceAccountsID", "parameters": [ { "type": "string", "description": "Service account ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "patch": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update a service account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "service_accounts" ], "summary": "Update service account", "operationId": "patchServiceAccountsID", "parameters": [ { "type": "string", "description": "Service account ID", "name": "id", "in": "path", "required": true }, { "description": "Update fields", "name": "account", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateServiceAccountRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ServiceAccount" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/service-accounts/{id}/api-keys": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get all API keys for a service account", "produces": [ "application/json" ], "tags": [ "service_accounts" ], "summary": "List API keys for a service account", "operationId": "getServiceAccountsIDAPIKeys", "parameters": [ { "type": "string", "description": "Service account ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/ServiceAccountAPIKey" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new API key. The plaintext key is only returned once.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "service_accounts" ], "summary": "Create API key for a service account", "operationId": "postServiceAccountsIDAPIKeys", "parameters": [ { "type": "string", "description": "Service account ID", "name": "id", "in": "path", "required": true }, { "description": "API key details", "name": "key", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateServiceAccountAPIKeyRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/ServiceAccountAPIKey" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/service-accounts/{id}/api-keys/{keyId}": { "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete an API key for a service account", "tags": [ "service_accounts" ], "summary": "Delete an API key", "operationId": "deleteServiceAccountsIDAPIKeysKeyID", "parameters": [ { "type": "string", "description": "Service account ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "API key ID", "name": "keyId", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/sso-providers": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Read-only view of SSO providers wired via server config. Editing is done in config.yaml.", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "List configured SSO providers (admin)", "operationId": "getSsoProviders", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/SSOProvidersResponse" } } } } }, "/api/v1/sso/team-mappings": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a list of SSO group to team mappings", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "sso" ], "summary": "List SSO team mappings", "operationId": "getSsoTeamMappings", "parameters": [ { "type": "string", "description": "Filter by SSO provider", "name": "provider", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ListSSOMappingsResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new SSO group to team mapping", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "sso" ], "summary": "Create an SSO team mapping", "operationId": "postSsoTeamMappings", "parameters": [ { "description": "SSO mapping creation request", "name": "mapping", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateSSOMappingRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/SSOTeamMapping" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/sso/team-mappings/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get an SSO team mapping by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "sso" ], "summary": "Get an SSO team mapping", "operationId": "getSsoTeamMappingsID", "parameters": [ { "type": "string", "description": "SSO mapping ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/SSOTeamMapping" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update an SSO team mapping by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "sso" ], "summary": "Update an SSO team mapping", "operationId": "putSsoTeamMappingsID", "parameters": [ { "type": "string", "description": "SSO mapping ID", "name": "id", "in": "path", "required": true }, { "description": "SSO mapping update request", "name": "mapping", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateSSOMappingRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/MessageResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete an SSO team mapping by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "sso" ], "summary": "Delete an SSO team mapping", "operationId": "deleteSsoTeamMappingsID", "parameters": [ { "type": "string", "description": "SSO mapping ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/MessageResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/teams": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a paginated list of teams", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "List teams", "operationId": "getTeams", "parameters": [ { "type": "integer", "default": 50, "description": "Number of items to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of items to skip", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ListTeamsResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new team", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Create a team", "operationId": "postTeams", "parameters": [ { "description": "Team creation request", "name": "team", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateTeamRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/Team" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/teams/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a team by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Get a team", "operationId": "getTeamsID", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Team" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update a team's fields by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Update a team", "operationId": "putTeamsID", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true }, { "description": "Team update request", "name": "team", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateTeamRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/MessageResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a team by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Delete a team", "operationId": "deleteTeamsID", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/MessageResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/teams/{id}/members": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get the members of a team", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "List team members", "operationId": "getTeamsIDMembers", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ListMembersResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Add a user as a member of a team", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Add a team member", "operationId": "postTeamsIDMembers", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true }, { "description": "Member addition request", "name": "member", "in": "body", "required": true, "schema": { "$ref": "#/definitions/AddMemberRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/MessageResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "403": { "description": "Forbidden", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/teams/{id}/members/{userId}": { "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Remove a user from a team", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Remove a team member", "operationId": "deleteTeamsIDMembersUserID", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "User ID", "name": "userId", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/MessageResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/teams/{id}/members/{userId}/convert-to-manual": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Convert an SSO-managed team member to a manually managed member", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Convert member to manual", "operationId": "postTeamsIDMembersUserIDConvertToManual", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "User ID", "name": "userId", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/MessageResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/teams/{id}/members/{userId}/role": { "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update the role of a team member", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "teams" ], "summary": "Update member role", "operationId": "putTeamsIDMembersUserIDRole", "parameters": [ { "type": "string", "description": "Team ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "User ID", "name": "userId", "in": "path", "required": true }, { "description": "Role update request", "name": "role", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateMemberRoleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/MessageResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/ui/config": { "get": { "description": "Get UI configuration including banner settings", "produces": [ "application/json" ], "tags": [ "ui" ], "summary": "Get UI configuration", "operationId": "getUIConfig", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/UIConfigResponse" } } } } }, "/api/v1/users": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get a list of users with optional filtering", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "List users", "operationId": "getUsers", "parameters": [ { "type": "integer", "default": 50, "description": "Number of items to return", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Number of items to skip", "name": "offset", "in": "query" }, { "type": "string", "description": "Search query for username or email", "name": "query", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Filter by role IDs", "name": "role_ids", "in": "query" }, { "type": "boolean", "description": "Filter by active status", "name": "active", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ListUsersResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new user in the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Create a new user", "operationId": "postUsers", "parameters": [ { "description": "User creation request", "name": "user", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateUserInput" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/User" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/apikeys": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get all API keys for a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "List API keys", "operationId": "getUsersApikeys", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/APIKey" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Create a new API key for a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Create API key", "operationId": "postUsersApikeys", "parameters": [ { "description": "API key creation request", "name": "key", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateAPIKeyRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/APIKey" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/apikeys/{id}": { "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete an API key", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Delete API key", "operationId": "deleteUsersApikeysID", "parameters": [ { "type": "string", "description": "API key ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/login": { "post": { "description": "Authenticate a user with username/email and password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Login user", "operationId": "postUsersLogin", "parameters": [ { "description": "Login credentials", "name": "credentials", "in": "body", "required": true, "schema": { "$ref": "#/definitions/LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/TokenResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/me": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get detailed information about the currently authenticated user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Get current user profile", "operationId": "getUsersMe", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/User" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/oauth/link": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Link an OAuth account to an existing user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Link OAuth account", "operationId": "postUsersOauthLink", "parameters": [ { "description": "OAuth account link request", "name": "link", "in": "body", "required": true, "schema": { "$ref": "#/definitions/OAuthLinkRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/oauth/unlink/{id}/{provider}": { "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Unlink an OAuth account from a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Unlink OAuth account", "operationId": "deleteUsersOauthUnlinkIDProvider", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "OAuth provider", "name": "provider", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/preferences": { "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update preferences for the current user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Update user preferences", "operationId": "putUsersPreferences", "parameters": [ { "description": "User preferences", "name": "preferences", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": true } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/update-password": { "post": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update current user's password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Update user password", "operationId": "postUsersUpdatePassword", "parameters": [ { "description": "Password update request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdatePasswordRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/TokenResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/api/v1/users/{id}": { "get": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Get detailed information about a specific user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Get a user by ID", "operationId": "getUsersID", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/User" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "put": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Update user information", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Update a user", "operationId": "putUsersID", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "description": "User update request", "name": "user", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateUserInput" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/User" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } } } }, "delete": { "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ], "description": "Delete a user from the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Delete a user", "operationId": "deleteUsersID", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/auth-providers": { "get": { "description": "Returns the enabled auth providers without sensitive data", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Get auth configuration", "operationId": "getAuthProviders", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/AuthConfig" } } } } }, "/auth/{provider}/callback": { "get": { "description": "Processes the OAuth callback from any provider", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Handle OAuth callback", "operationId": "getAuthProviderCallback", "parameters": [ { "type": "string", "description": "OAuth provider (okta, google, github, etc.)", "name": "provider", "in": "path", "required": true }, { "type": "string", "description": "Authorization code", "name": "code", "in": "query", "required": true }, { "type": "string", "description": "State parameter for CSRF protection", "name": "state", "in": "query", "required": true } ], "responses": { "307": { "description": "Temporary Redirect", "schema": { "type": "string" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/auth/{provider}/login": { "get": { "description": "Redirects the user to the OAuth provider for authentication", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Initiate OAuth login", "operationId": "getAuthProviderLogin", "parameters": [ { "type": "string", "description": "OAuth provider (okta, google, github, etc.)", "name": "provider", "in": "path", "required": true } ], "responses": { "307": { "description": "Temporary Redirect", "schema": { "type": "string" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/ErrorResponse" } } } } }, "/oauth/token": { "post": { "description": "Handles authorization_code grants (with PKCE) and token exchange (RFC 8693).\nFor token-exchange, supported subject_token_type values are\nurn:ietf:params:oauth:token-type:id_token and urn:ietf:params:oauth:token-type:access_token.", "consumes": [ "application/x-www-form-urlencoded" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "OAuth token endpoint", "operationId": "postOauthToken", "parameters": [ { "type": "string", "description": "authorization_code or urn:ietf:params:oauth:grant-type:token-exchange", "name": "grant_type", "in": "formData", "required": true }, { "type": "string", "description": "Token to exchange (token-exchange grant only)", "name": "subject_token", "in": "formData" }, { "type": "string", "description": "id_token or access_token URI (token-exchange grant only)", "name": "subject_token_type", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/TokenExchangeResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/OAuthErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/OAuthErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/OAuthErrorResponse" } } } } } }, "definitions": { "APIKey": { "type": "object", "properties": { "created_at": { "type": "string" }, "expires_at": { "type": "string" }, "id": { "type": "string" }, "key": { "type": "string" }, "last_used_at": { "type": "string" }, "name": { "type": "string" }, "user_id": { "type": "string" } } }, "AWSCredentialStatus": { "type": "object", "properties": { "available": { "type": "boolean" }, "error": { "type": "string" }, "sources": { "type": "array", "items": { "type": "string" } } } }, "ActivityResponse": { "type": "object", "properties": { "buckets": { "type": "array", "items": { "$ref": "#/definitions/Bucket" } } } }, "AddDataProductAssetsRequest": { "type": "object", "required": [ "asset_ids" ], "properties": { "asset_ids": { "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "AddMemberRequest": { "type": "object", "properties": { "role": { "type": "string" }, "user_id": { "type": "string" } } }, "AddTermsRequest": { "type": "object", "required": [ "term_ids" ], "properties": { "term_ids": { "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "AgentRun": { "type": "object", "properties": { "agent_id": { "type": "string" }, "created_at": { "type": "string" }, "duration_ms": { "type": "integer" }, "ended_at": { "type": "string" }, "error": { "type": "string" }, "id": { "type": "string" }, "model": { "type": "string" }, "run_id": { "type": "string" }, "started_at": { "type": "string" }, "status": { "type": "string" }, "tokens_in": { "type": "integer" }, "tokens_out": { "type": "integer" }, "tool_calls": { "type": "array", "items": { "$ref": "#/definitions/ToolCall" } } } }, "AggregatedMetric": { "type": "object", "properties": { "aggregation_type": { "type": "string" }, "bucket_end": { "type": "string" }, "bucket_size": { "type": "integer" }, "bucket_start": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "name": { "type": "string" }, "value": { "type": "number" } } }, "Asset": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "description": { "type": "string" }, "environments": { "type": "object", "additionalProperties": { "$ref": "#/definitions/Environment" } }, "external_links": { "type": "array", "items": { "$ref": "#/definitions/AssetExternalLink" } }, "has_run_history": { "type": "boolean" }, "id": { "type": "string" }, "is_stub": { "type": "boolean" }, "last_sync_at": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "mrn": { "type": "string" }, "name": { "type": "string" }, "parent_mrn": { "type": "string" }, "providers": { "type": "array", "items": { "type": "string" } }, "query": { "type": "string" }, "query_language": { "type": "string" }, "schema": { "type": "object", "additionalProperties": { "type": "string" } }, "sources": { "type": "array", "items": { "$ref": "#/definitions/AssetSource" } }, "tags": { "type": "array", "items": { "type": "string" } }, "terms": { "description": "Terms carries glossary term names a discovery assigned to this\nasset. It is input only: the links live in asset_terms, so reading\nan asset back from the database never fills this in.", "type": "array", "items": { "type": "string" } }, "type": { "type": "string" }, "updated_at": { "type": "string" }, "user_description": { "type": "string" } } }, "AssetCount": { "type": "object", "properties": { "asset_id": { "type": "string" }, "asset_name": { "type": "string" }, "asset_provider": { "type": "string" }, "asset_type": { "type": "string" }, "count": { "type": "integer" } } }, "AssetExternalLink": { "type": "object", "properties": { "icon": { "type": "string" }, "name": { "type": "string" }, "url": { "type": "string" } } }, "AssetRule": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "is_enabled": { "type": "boolean" }, "last_reconciled_at": { "type": "string" }, "links": { "type": "array", "items": { "$ref": "#/definitions/AssetRuleExternalLink" } }, "membership_count": { "type": "integer" }, "metadata_field": { "type": "string" }, "name": { "type": "string" }, "pattern_type": { "type": "string" }, "pattern_value": { "type": "string" }, "priority": { "type": "integer" }, "query_expression": { "type": "string" }, "reconciliation_hash": { "type": "string" }, "rule_type": { "$ref": "#/definitions/RuleType" }, "term_ids": { "type": "array", "items": { "type": "string" } }, "updated_at": { "type": "string" } } }, "AssetRuleExternalLink": { "type": "object", "properties": { "icon": { "type": "string" }, "name": { "type": "string" }, "url": { "type": "string" } } }, "AssetRuleListResult": { "type": "object", "properties": { "asset_rules": { "type": "array", "items": { "$ref": "#/definitions/AssetRule" } }, "total": { "type": "integer" } } }, "AssetSearchResponse": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/Asset" } }, "filters": { "$ref": "#/definitions/AvailableFilters" }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "total": { "type": "integer" } } }, "AssetSource": { "type": "object", "properties": { "last_sync_at": { "type": "string" }, "name": { "type": "string" }, "priority": { "type": "integer" }, "properties": { "type": "object", "additionalProperties": true } } }, "AssetSummaryResponse": { "type": "object", "properties": { "providers": { "type": "object", "additionalProperties": { "type": "integer" } }, "tags": { "type": "object", "additionalProperties": { "type": "integer" } }, "types": { "type": "object", "additionalProperties": { "$ref": "#/definitions/AssetTypeSummary" } } } }, "AssetTerm": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "created_by_username": { "type": "string" }, "definition": { "type": "string" }, "source": { "description": "\"user\" or \"plugin:name\"", "type": "string" }, "term_id": { "type": "string" }, "term_name": { "type": "string" } } }, "AssetTypeSummary": { "type": "object", "properties": { "count": { "type": "integer" }, "service": { "type": "string" } } }, "AssetsByOwnerResponse": { "type": "object", "properties": { "assets": { "type": "object", "additionalProperties": { "type": "integer", "format": "int64" } } } }, "AssetsByProviderResponse": { "type": "object", "properties": { "assets": { "type": "object", "additionalProperties": { "type": "integer", "format": "int64" } } } }, "AssetsByTypeResponse": { "type": "object", "properties": { "assets": { "type": "object", "additionalProperties": { "type": "integer", "format": "int64" } } } }, "AssetsWithSchemasResponse": { "type": "object", "properties": { "count": { "type": "integer" }, "percentage": { "type": "number" }, "total": { "type": "integer" } } }, "AuthConfig": { "type": "object", "properties": { "enabled_providers": { "type": "array", "items": { "type": "string" } } } }, "AvailableFilters": { "type": "object", "properties": { "providers": { "type": "object", "additionalProperties": { "type": "integer" } }, "tags": { "type": "object", "additionalProperties": { "type": "integer" } }, "types": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "BannerResponse": { "type": "object", "properties": { "dismissible": { "type": "boolean" }, "enabled": { "type": "boolean" }, "id": { "type": "string" }, "message": { "type": "string" }, "variant": { "type": "string" } } }, "BatchAssetResult": { "type": "object", "properties": { "asset": {}, "error": { "type": "string" }, "mrn": { "type": "string" }, "name": { "type": "string" }, "provider": { "type": "string" }, "status": { "type": "string" }, "type": { "type": "string" } } }, "BatchCreateRequest": { "type": "object", "required": [ "assets", "pipeline_name", "run_id", "source_name" ], "properties": { "assets": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/RunCreateAssetRequest" } }, "config": { "$ref": "#/definitions/RawPluginConfig" }, "documentation": { "type": "array", "items": { "$ref": "#/definitions/CreateDocRequest" } }, "glossary_terms": { "type": "array", "items": { "$ref": "#/definitions/CreateGlossaryTermRequest" } }, "lineage": { "type": "array", "items": { "$ref": "#/definitions/CreateLineageRequest" } }, "pipeline_name": { "type": "string" }, "run_history": { "type": "array", "items": { "$ref": "#/definitions/CreateRunHistoryRequest" } }, "run_id": { "type": "string" }, "source_name": { "type": "string" }, "statistics": { "type": "array", "items": { "$ref": "#/definitions/CreateStatRequest" } } } }, "BatchCreateResponse": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/BatchAssetResult" } }, "documentation": { "type": "array", "items": { "$ref": "#/definitions/DocumentationResult" } }, "lineage": { "type": "array", "items": { "$ref": "#/definitions/LineageResult" } }, "stale_entities_removed": { "type": "array", "items": { "type": "string" } } } }, "BatchDocumentationRequest": { "type": "object", "required": [ "documentation" ], "properties": { "documentation": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/Documentation" } } } }, "BatchDocumentationResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/definitions/BatchDocumentationResult" } } } }, "BatchDocumentationResult": { "type": "object", "properties": { "documentation": { "$ref": "#/definitions/Documentation" }, "error": { "type": "string" }, "status": { "type": "string" } } }, "BatchLineageResult": { "type": "object", "properties": { "edge": { "$ref": "#/definitions/LineageEdge" }, "status": { "description": "\"created\", \"duplicate\", or \"existing\"", "type": "string" } } }, "Bucket": { "type": "object", "properties": { "error": { "type": "integer" }, "hour": { "type": "string" }, "success": { "type": "integer" } } }, "CompleteRunRequest": { "type": "object", "required": [ "run_id", "status" ], "properties": { "error": { "type": "string" }, "run_id": { "type": "string" }, "status": { "$ref": "#/definitions/RunStatus" }, "summary": { "$ref": "#/definitions/RunSummary" } } }, "CreateAPIKeyRequest": { "type": "object", "required": [ "name" ], "properties": { "expires_in_days": { "type": "integer" }, "name": { "type": "string" } } }, "CreateAssetRequest": { "type": "object", "required": [ "name", "providers", "type" ], "properties": { "description": { "type": "string" }, "environments": { "type": "object", "additionalProperties": { "$ref": "#/definitions/Environment" } }, "external_links": { "type": "array", "items": { "$ref": "#/definitions/AssetExternalLink" } }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "providers": { "type": "array", "items": { "type": "string" } }, "schema": { "type": "object", "additionalProperties": { "type": "string" } }, "sources": { "type": "array", "items": { "$ref": "#/definitions/AssetSource" } }, "tags": { "type": "array", "items": { "type": "string" } }, "type": { "type": "string" } } }, "CreateAssetRuleRequest": { "type": "object", "properties": { "description": { "type": "string" }, "is_enabled": { "type": "boolean" }, "links": { "type": "array", "items": { "$ref": "#/definitions/AssetRuleExternalLink" } }, "metadata_field": { "type": "string" }, "name": { "type": "string" }, "pattern_type": { "type": "string" }, "pattern_value": { "type": "string" }, "priority": { "type": "integer" }, "query_expression": { "type": "string" }, "rule_type": { "type": "string" }, "term_ids": { "type": "array", "items": { "type": "string" } } } }, "CreateDataProductRequest": { "type": "object", "required": [ "name" ], "properties": { "description": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "owners": { "type": "array", "items": { "$ref": "#/definitions/DataProductOwnerRequest" } }, "rules": { "type": "array", "items": { "$ref": "#/definitions/DataProductRuleRequest" } }, "tags": { "type": "array", "items": { "type": "string" } } } }, "CreateDocRequest": { "type": "object", "properties": { "asset_mrn": { "type": "string" }, "content": { "type": "string" }, "type": { "type": "string" } } }, "CreateGlossaryTermRequest": { "type": "object", "properties": { "definition": { "type": "string" }, "description": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "parent": { "type": "string" }, "synonyms": { "type": "array", "items": { "type": "string" } }, "tags": { "type": "array", "items": { "type": "string" } } } }, "CreateLineageRequest": { "type": "object", "properties": { "job_mrn": { "type": "string" }, "source": { "type": "string" }, "target": { "type": "string" }, "type": { "type": "string" } } }, "CreateRunHistoryRequest": { "type": "object", "properties": { "asset_mrn": { "type": "string" }, "event_time": { "type": "string" }, "event_type": { "type": "string" }, "job_facets": { "type": "object", "additionalProperties": true }, "job_name": { "type": "string" }, "job_namespace": { "type": "string" }, "run_facets": { "type": "object", "additionalProperties": true }, "run_id": { "type": "string" } } }, "CreateSSOMappingRequest": { "type": "object", "properties": { "member_role": { "type": "string" }, "provider": { "type": "string" }, "sso_group_name": { "type": "string" }, "team_id": { "type": "string" } } }, "CreateScheduleRequest": { "type": "object", "properties": { "config": { "type": "object", "additionalProperties": true }, "cron_expression": { "type": "string" }, "enabled": { "type": "boolean" }, "name": { "type": "string" }, "plugin_id": { "type": "string" } } }, "CreateServiceAccountAPIKeyRequest": { "type": "object", "properties": { "expires_in_days": { "type": "integer" }, "name": { "type": "string" } } }, "CreateServiceAccountRequest": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "type": "string" }, "role_ids": { "type": "array", "items": { "type": "string" } } } }, "CreateStatRequest": { "type": "object", "required": [ "asset_mrn", "metric_name", "value" ], "properties": { "asset_mrn": { "type": "string" }, "metric_name": { "type": "string" }, "value": { "type": "number" } } }, "CreateTeamRequest": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "type": "string" } } }, "CreateTermRequest": { "type": "object", "required": [ "definition", "name" ], "properties": { "definition": { "type": "string" }, "description": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "owners": { "type": "array", "items": { "$ref": "#/definitions/OwnerRequest" } }, "parent_term_id": { "type": "string" } } }, "CreateUserInput": { "type": "object", "required": [ "name", "role_names", "username" ], "properties": { "name": { "type": "string" }, "oauth_provider": { "type": "string" }, "oauth_provider_data": { "type": "object", "additionalProperties": true }, "oauth_provider_id": { "type": "string" }, "password": { "type": "string", "minLength": 8 }, "profile_picture": { "type": "string" }, "role_names": { "type": "array", "minItems": 1, "items": { "type": "string" } }, "username": { "type": "string", "maxLength": 255, "minLength": 3 } } }, "DataProduct": { "type": "object", "properties": { "asset_count": { "type": "integer" }, "created_at": { "type": "string" }, "created_by": { "type": "string" }, "description": { "type": "string" }, "icon_url": { "type": "string" }, "id": { "type": "string" }, "manual_asset_count": { "type": "integer" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "owners": { "type": "array", "items": { "$ref": "#/definitions/DataProductOwner" } }, "rule_asset_count": { "type": "integer" }, "rules": { "type": "array", "items": { "$ref": "#/definitions/DataProductRule" } }, "tags": { "type": "array", "items": { "type": "string" } }, "updated_at": { "type": "string" } } }, "DataProductAssetsResult": { "type": "object", "properties": { "asset_ids": { "type": "array", "items": { "type": "string" } }, "total": { "type": "integer" } } }, "DataProductListResult": { "type": "object", "properties": { "data_products": { "type": "array", "items": { "$ref": "#/definitions/DataProduct" } }, "total": { "type": "integer" } } }, "DataProductOwner": { "type": "object", "properties": { "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "profile_picture": { "type": "string" }, "type": { "type": "string" }, "username": { "type": "string" } } }, "DataProductOwnerRequest": { "type": "object", "required": [ "id", "type" ], "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "user", "team" ] } } }, "DataProductResolvedAssets": { "type": "object", "properties": { "all_assets": { "type": "array", "items": { "type": "string" } }, "dynamic_assets": { "type": "array", "items": { "type": "string" } }, "manual_assets": { "type": "array", "items": { "type": "string" } }, "total": { "type": "integer" } } }, "DataProductRule": { "type": "object", "properties": { "created_at": { "type": "string" }, "data_product_id": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "is_enabled": { "type": "boolean" }, "matched_asset_count": { "type": "integer" }, "metadata_field": { "type": "string" }, "name": { "type": "string" }, "pattern_type": { "type": "string" }, "pattern_value": { "type": "string" }, "priority": { "type": "integer" }, "query_expression": { "type": "string" }, "rule_type": { "$ref": "#/definitions/DataProductRuleType" }, "updated_at": { "type": "string" } } }, "DataProductRulePreview": { "type": "object", "properties": { "asset_count": { "type": "integer" }, "asset_ids": { "type": "array", "items": { "type": "string" } }, "errors": { "type": "array", "items": { "type": "string" } } } }, "DataProductRuleRequest": { "type": "object", "required": [ "name", "rule_type" ], "properties": { "description": { "type": "string" }, "is_enabled": { "type": "boolean" }, "metadata_field": { "type": "string" }, "name": { "type": "string" }, "pattern_type": { "type": "string" }, "pattern_value": { "type": "string" }, "priority": { "type": "integer" }, "query_expression": { "type": "string" }, "rule_type": { "type": "string" } } }, "DataProductRuleType": { "type": "string", "enum": [ "query", "metadata_match" ], "x-enum-varnames": [ "RuleTypeQuery", "RuleTypeMetadataMatch" ] }, "DataProductRulesResponse": { "type": "object", "properties": { "rules": { "type": "array", "items": { "$ref": "#/definitions/DataProductRule" } }, "total": { "type": "integer" } } }, "Dataset": { "type": "object", "properties": { "facets": { "type": "object", "additionalProperties": true }, "inputFacets": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "namespace": { "type": "string" }, "outputFacets": { "type": "object", "additionalProperties": true } } }, "DestroyRunResponse": { "type": "object", "properties": { "assets_deleted": { "type": "integer" }, "deleted_entity_mrns": { "type": "array", "items": { "type": "string" } }, "documentation_deleted": { "type": "integer" }, "lineage_deleted": { "type": "integer" } } }, "Documentation": { "type": "object", "properties": { "content": { "type": "string" }, "created_at": { "type": "string" }, "global_docs": { "type": "array", "items": { "type": "string" } }, "id": { "type": "string" }, "mrn": { "type": "string" }, "source": { "type": "string" }, "updated_at": { "type": "string" } } }, "DocumentationCreateRequest": { "type": "object", "required": [ "content", "mrn", "source" ], "properties": { "content": { "type": "string" }, "mrn": { "type": "string" }, "source": { "type": "string" } } }, "DocumentationResult": { "type": "object", "properties": { "asset_mrn": { "type": "string" }, "error": { "type": "string" }, "status": { "type": "string" }, "type": { "type": "string" } } }, "Environment": { "type": "object", "properties": { "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "path": { "type": "string" } } }, "ErrorResponse": { "type": "object", "properties": { "error": { "type": "string" } } }, "FacetValue": { "type": "object", "properties": { "count": { "type": "integer" }, "value": { "type": "string" } } }, "Facets": { "type": "object", "properties": { "asset_types": { "type": "array", "items": { "$ref": "#/definitions/FacetValue" } }, "providers": { "type": "array", "items": { "$ref": "#/definitions/FacetValue" } }, "tags": { "type": "array", "items": { "$ref": "#/definitions/FacetValue" } }, "types": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "GetMetricsRequest": { "type": "object", "properties": { "aggregation": { "type": "string" }, "bucket_size": { "type": "string" }, "end": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "metric_names": { "type": "array", "items": { "type": "string" } }, "start": { "type": "string" } } }, "GetMetricsResponse": { "type": "object", "properties": { "metrics": { "type": "array", "items": { "$ref": "#/definitions/AggregatedMetric" } }, "query": { "$ref": "#/definitions/GetMetricsRequest" } } }, "GlossaryListResult": { "type": "object", "properties": { "terms": { "type": "array", "items": { "$ref": "#/definitions/GlossaryTerm" } }, "total": { "type": "integer" } } }, "GlossaryOwner": { "type": "object", "properties": { "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "profile_picture": { "type": "string" }, "type": { "description": "\"user\" or \"team\"", "type": "string" }, "username": { "description": "Only for user owners", "type": "string" } } }, "GlossaryTerm": { "type": "object", "properties": { "created_at": { "type": "string" }, "definition": { "description": "Definition is what the last run wrote. On a term a person has\nworded themselves the read path serves UserDefinition here instead,\nso a caller always gets the wording the catalog stands behind.", "type": "string" }, "deleted_at": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "owners": { "type": "array", "items": { "$ref": "#/definitions/GlossaryOwner" } }, "parent_term_id": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } }, "updated_at": { "type": "string" }, "user_definition": { "description": "UserDefinition is the wording a person gave the term. Ingestion\nreads it and never writes it, so it survives every run.", "type": "string" } } }, "HistogramBucket": { "type": "object", "properties": { "abort": { "type": "integer" }, "complete": { "type": "integer" }, "date": { "type": "string" }, "fail": { "type": "integer" }, "other": { "type": "integer" }, "running": { "type": "integer" }, "total": { "type": "integer" } } }, "HistogramResponse": { "type": "object", "properties": { "buckets": { "type": "array", "items": { "$ref": "#/definitions/HistogramBucket" } }, "period": { "type": "string" } } }, "ImagePurpose": { "type": "string", "enum": [ "icon", "header" ], "x-enum-varnames": [ "ImagePurposeIcon", "ImagePurposeHeader" ] }, "Job": { "type": "object", "properties": { "facets": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "namespace": { "type": "string" } } }, "JobRun": { "type": "object", "properties": { "assets_created": { "type": "integer" }, "assets_deleted": { "type": "integer" }, "assets_updated": { "type": "integer" }, "claimed_at": { "type": "string" }, "claimed_by": { "type": "string" }, "config": { "type": "object", "additionalProperties": true }, "created_at": { "type": "string" }, "created_by": { "type": "string" }, "documentation_added": { "type": "integer" }, "error_message": { "type": "string" }, "finished_at": { "type": "string" }, "id": { "type": "string" }, "lineage_created": { "type": "integer" }, "log": { "type": "string" }, "pipeline_name": { "type": "string" }, "plugin_run_id": { "type": "string" }, "run_id": { "type": "string" }, "schedule_id": { "type": "string" }, "source_name": { "type": "string" }, "started_at": { "type": "string" }, "status": { "type": "string" }, "updated_at": { "type": "string" } } }, "LineageEdge": { "type": "object", "properties": { "id": { "type": "string" }, "job_mrn": { "type": "string" }, "last_seen_at": { "type": "string" }, "observation_count": { "type": "integer" }, "origin": { "type": "string" }, "source": { "type": "string" }, "target": { "type": "string" }, "type": { "type": "string" } } }, "LineageNode": { "type": "object", "properties": { "asset": { "$ref": "#/definitions/Asset" }, "depth": { "type": "integer" }, "id": { "type": "string" }, "type": { "type": "string" } } }, "LineageResponse": { "type": "object", "properties": { "edges": { "type": "array", "items": { "$ref": "#/definitions/LineageEdge" } }, "nodes": { "type": "array", "items": { "$ref": "#/definitions/LineageNode" } } } }, "LineageResult": { "type": "object", "properties": { "error": { "type": "string" }, "source": { "type": "string" }, "status": { "type": "string" }, "target": { "type": "string" }, "type": { "type": "string" } } }, "LineageRun": { "type": "object", "properties": { "facets": { "type": "object", "additionalProperties": true }, "runId": { "type": "string" } } }, "ListJobRunsResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "runs": { "type": "array", "items": { "$ref": "#/definitions/JobRun" } }, "total": { "type": "integer" } } }, "ListMembersResponse": { "type": "object", "properties": { "members": { "type": "array", "items": { "$ref": "#/definitions/TeamMemberWithUser" } } } }, "ListPluginsResponse": { "type": "object", "properties": { "loading": { "type": "boolean" }, "plugins": { "type": "array", "items": { "$ref": "#/definitions/pluginsdk.Meta" } } } }, "ListSSOMappingsResponse": { "type": "object", "properties": { "mappings": { "type": "array", "items": { "$ref": "#/definitions/SSOTeamMapping" } } } }, "ListSchedulesResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "schedules": { "type": "array", "items": { "$ref": "#/definitions/Schedule" } }, "total": { "type": "integer" } } }, "ListTeamsResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "teams": { "type": "array", "items": { "$ref": "#/definitions/Team" } }, "total": { "type": "integer" } } }, "ListUsersResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "total": { "type": "integer" }, "users": { "type": "array", "items": { "$ref": "#/definitions/User" } } } }, "LoginRequest": { "type": "object", "required": [ "password", "username" ], "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "MessageResponse": { "type": "object", "properties": { "message": { "type": "string" } } }, "MetadataFieldSuggestion": { "type": "object", "properties": { "count": { "type": "integer" }, "example": {}, "field": { "type": "string" }, "path_parts": { "type": "array", "items": { "type": "string" } }, "type": { "type": "string" }, "types": { "type": "array", "items": { "type": "string" } } } }, "MetadataValueSuggestion": { "type": "object", "properties": { "count": { "type": "integer" }, "example": { "$ref": "#/definitions/Asset" }, "value": { "type": "string" } } }, "OAuthErrorResponse": { "type": "object", "properties": { "error": { "type": "string" }, "error_description": { "type": "string" } } }, "OAuthLinkRequest": { "type": "object", "required": [ "provider", "provider_user_id", "user_id", "user_info" ], "properties": { "provider": { "type": "string" }, "provider_user_id": { "type": "string" }, "user_id": { "type": "string" }, "user_info": { "type": "object", "additionalProperties": true } } }, "OwnerRequest": { "type": "object", "required": [ "id", "type" ], "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "user", "team" ] } } }, "Permission": { "type": "object", "properties": { "action": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "resource_type": { "type": "string" } } }, "PluginRun": { "type": "object", "properties": { "completed_at": { "type": "string" }, "config": { "$ref": "#/definitions/RawPluginConfig" }, "created_by": { "type": "string" }, "error_message": { "type": "string" }, "id": { "type": "string" }, "pipeline_name": { "type": "string" }, "run_id": { "type": "string" }, "source_name": { "type": "string" }, "started_at": { "type": "string" }, "status": { "$ref": "#/definitions/RunStatus" }, "summary": { "$ref": "#/definitions/RunSummary" } } }, "PreviewRequest": { "type": "object", "properties": { "limit": { "type": "integer" }, "metadata_field": { "type": "string" }, "pattern_type": { "type": "string" }, "pattern_value": { "type": "string" }, "query_expression": { "type": "string" }, "rule_type": { "type": "string" } } }, "PreviewResponse": { "type": "object", "properties": { "column_names": { "type": "array", "items": { "type": "string" } }, "rows": { "type": "array", "items": { "type": "array", "items": {} } }, "total_rows": { "type": "integer" } } }, "ProductImageMeta": { "type": "object", "properties": { "content_type": { "type": "string" }, "created_at": { "type": "string" }, "data_product_id": { "type": "string" }, "filename": { "type": "string" }, "id": { "type": "string" }, "purpose": { "$ref": "#/definitions/ImagePurpose" }, "size_bytes": { "type": "integer" }, "url": { "type": "string" } } }, "QueryCount": { "type": "object", "properties": { "count": { "type": "integer" }, "query": { "type": "string" }, "query_type": { "type": "string" } } }, "RawPluginConfig": { "type": "object", "additionalProperties": true }, "RecordRunRequest": { "type": "object", "properties": { "agent_mrn": { "type": "string" }, "ended_at": { "type": "string" }, "error": { "type": "string" }, "model": { "type": "string" }, "observed_assets": { "type": "array", "items": { "type": "string" } }, "run_id": { "type": "string" }, "started_at": { "type": "string" }, "status": { "type": "string" }, "tokens_in": { "type": "integer" }, "tokens_out": { "type": "integer" }, "tool_calls": { "type": "array", "items": { "$ref": "#/definitions/ToolCallPayload" } } } }, "ReindexAcceptedResponse": { "type": "object", "properties": { "message": { "type": "string", "example": "Reindex started" }, "status": { "type": "string", "example": "accepted" } } }, "ReindexStatusResponse": { "type": "object", "properties": { "es_configured": { "type": "boolean" }, "running": { "type": "boolean" } } }, "RemoveTermRequest": { "type": "object", "required": [ "term_id" ], "properties": { "term_id": { "type": "string" } } }, "Result": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "rank": { "type": "number" }, "type": { "$ref": "#/definitions/ResultType" }, "updated_at": { "type": "string" }, "url": { "type": "string" } } }, "ResultType": { "type": "string", "enum": [ "asset", "glossary", "team", "data_product" ], "x-enum-varnames": [ "ResultTypeAsset", "ResultTypeGlossary", "ResultTypeTeam", "ResultTypeDataProduct" ] }, "Role": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "permissions": { "type": "array", "items": { "$ref": "#/definitions/Permission" } } } }, "RolePermission": { "type": "object", "properties": { "action": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "resource_type": { "type": "string" } } }, "RulePreview": { "type": "object", "properties": { "asset_count": { "type": "integer" }, "asset_ids": { "type": "array", "items": { "type": "string" } }, "errors": { "type": "array", "items": { "type": "string" } } } }, "RuleType": { "type": "string", "enum": [ "query", "metadata_match" ], "x-enum-varnames": [ "RuleTypeQuery", "RuleTypeMetadataMatch" ] }, "RunCreateAssetRequest": { "type": "object", "properties": { "description": { "type": "string" }, "external_links": { "type": "array", "items": { "type": "object", "additionalProperties": { "type": "string" } } }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "providers": { "type": "array", "items": { "type": "string" } }, "schema": { "type": "object", "additionalProperties": true }, "sources": { "type": "array", "items": { "$ref": "#/definitions/AssetSource" } }, "tags": { "type": "array", "items": { "type": "string" } }, "terms": { "description": "Terms are the names of glossary terms assigned to this asset.", "type": "array", "items": { "type": "string" } }, "type": { "type": "string" } } }, "RunEntitiesResponse": { "type": "object", "properties": { "entities": { "type": "array", "items": { "$ref": "#/definitions/RunEntity" } }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "total": { "type": "integer" } } }, "RunEntity": { "type": "object", "properties": { "created_at": { "type": "string" }, "entity_mrn": { "type": "string" }, "entity_name": { "type": "string" }, "entity_type": { "type": "string" }, "error_message": { "type": "string" }, "id": { "type": "string" }, "run_id": { "type": "string" }, "status": { "type": "string" } } }, "RunEvent": { "type": "object", "properties": { "eventTime": { "type": "string" }, "eventType": { "type": "string" }, "inputs": { "type": "array", "items": { "$ref": "#/definitions/Dataset" } }, "job": { "$ref": "#/definitions/Job" }, "outputs": { "type": "array", "items": { "$ref": "#/definitions/Dataset" } }, "producer": { "type": "string" }, "run": { "$ref": "#/definitions/LineageRun" }, "schemaURL": { "type": "string" } } }, "RunHistory": { "type": "object", "properties": { "duration_ms": { "type": "integer" }, "end_time": { "type": "string" }, "event_time": { "type": "string" }, "id": { "type": "string" }, "job_name": { "type": "string" }, "job_namespace": { "type": "string" }, "run_id": { "type": "string" }, "start_time": { "type": "string" }, "status": { "type": "string" }, "type": { "type": "string" } } }, "RunHistoryResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "run_history": { "type": "array", "items": { "$ref": "#/definitions/RunHistory" } }, "total": { "type": "integer" } } }, "RunStatus": { "type": "string", "enum": [ "running", "completed", "failed", "cancelled" ], "x-enum-varnames": [ "StatusRunning", "StatusCompleted", "StatusFailed", "StatusCancelled" ] }, "RunSummary": { "type": "object", "properties": { "assets_created": { "type": "integer" }, "assets_deleted": { "type": "integer" }, "assets_terms_linked": { "type": "integer" }, "assets_updated": { "type": "integer" }, "documentation_added": { "type": "integer" }, "duration_seconds": { "type": "integer" }, "errors_count": { "type": "integer" }, "glossary_terms_created": { "description": "Glossary counts are absent from runs that predate them, and from\nsources that curate no business terms.", "type": "integer" }, "glossary_terms_updated": { "type": "integer" }, "lineage_created": { "type": "integer" }, "lineage_updated": { "type": "integer" }, "total_entities": { "type": "integer" } } }, "RunsResponse": { "type": "object", "properties": { "runs": { "type": "array", "items": { "$ref": "#/definitions/AgentRun" } }, "total": { "type": "integer" } } }, "SSOProvider": { "type": "object", "properties": { "issuer_url": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string" } } }, "SSOProvidersResponse": { "type": "object", "properties": { "providers": { "type": "array", "items": { "$ref": "#/definitions/SSOProvider" } } } }, "SSOTeamMapping": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "member_role": { "type": "string" }, "provider": { "type": "string" }, "sso_group_name": { "type": "string" }, "team_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "Schedule": { "type": "object", "properties": { "config": { "type": "object", "additionalProperties": true }, "created_at": { "type": "string" }, "created_by": { "type": "string" }, "cron_expression": { "type": "string" }, "enabled": { "type": "boolean" }, "id": { "type": "string" }, "last_run_at": { "type": "string" }, "last_run_status": { "type": "string" }, "managed_by": { "type": "string" }, "name": { "type": "string" }, "next_run_at": { "type": "string" }, "plugin_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "SearchOwnersResponse": { "type": "object", "properties": { "owners": { "type": "array", "items": { "$ref": "#/definitions/TeamOwner" } } } }, "SearchResponse": { "type": "object", "properties": { "facets": { "$ref": "#/definitions/Facets" }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "results": { "type": "array", "items": { "$ref": "#/definitions/Result" } }, "total": { "type": "integer" } } }, "ServiceAccount": { "type": "object", "properties": { "active": { "type": "boolean" }, "created_at": { "type": "string" }, "created_by": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "roles": { "type": "array", "items": { "$ref": "#/definitions/Role" } }, "updated_at": { "type": "string" } } }, "ServiceAccountAPIKey": { "type": "object", "properties": { "created_at": { "type": "string" }, "expires_at": { "type": "string" }, "id": { "type": "string" }, "key": { "type": "string" }, "last_used_at": { "type": "string" }, "name": { "type": "string" }, "service_account_id": { "type": "string" } } }, "StartRunRequest": { "type": "object", "required": [ "pipeline_name", "source_name" ], "properties": { "config": { "$ref": "#/definitions/RawPluginConfig" }, "pipeline_name": { "type": "string" }, "source_name": { "type": "string" } } }, "Stats": { "type": "object", "properties": { "median_latency_ms": { "type": "integer" }, "p95_latency_ms": { "type": "integer" }, "run_count": { "type": "integer" }, "success_rate": { "type": "number" }, "tokens_in": { "type": "integer" }, "tokens_out": { "type": "integer" } } }, "TagRequest": { "type": "object", "required": [ "tag" ], "properties": { "tag": { "type": "string" } } }, "Team": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "created_via_sso": { "type": "boolean" }, "description": { "type": "string" }, "id": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "sso_provider": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } }, "updated_at": { "type": "string" } } }, "TeamMemberWithUser": { "type": "object", "properties": { "email": { "type": "string" }, "id": { "type": "string" }, "joined_at": { "type": "string" }, "name": { "type": "string" }, "profile_picture": { "type": "string" }, "role": { "type": "string" }, "source": { "type": "string" }, "sso_provider": { "type": "string" }, "team_id": { "type": "string" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "TeamOwner": { "type": "object", "properties": { "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "profile_picture": { "type": "string" }, "type": { "type": "string" }, "username": { "type": "string" } } }, "TokenExchangeResponse": { "type": "object", "properties": { "access_token": { "type": "string" }, "expires_in": { "type": "integer" }, "issued_token_type": { "type": "string" }, "token_type": { "type": "string" } } }, "TokenResponse": { "type": "object", "properties": { "access_token": { "type": "string" }, "expires_in": { "type": "integer" }, "requires_password_change": { "type": "boolean" }, "token_type": { "type": "string" } } }, "ToolCall": { "type": "object", "properties": { "duration_ms": { "type": "integer" }, "ordinal": { "type": "integer" }, "started_at": { "type": "string" }, "status": { "type": "string" }, "target_mrn": { "type": "string" }, "tool_name": { "type": "string" } } }, "ToolCallPayload": { "type": "object", "properties": { "duration_ms": { "type": "integer" }, "started_at": { "type": "string" }, "status": { "type": "string" }, "target_mrn": { "type": "string" }, "tool_name": { "type": "string" } } }, "TotalAssetsResponse": { "type": "object", "properties": { "count": { "type": "integer" } } }, "UIConfigResponse": { "type": "object", "properties": { "allow_unencrypted": { "type": "boolean" }, "banner": { "$ref": "#/definitions/BannerResponse" }, "encryption_configured": { "type": "boolean" }, "table_preview_enabled": { "type": "boolean" } } }, "UpdateAssetRequest": { "type": "object", "properties": { "description": { "type": "string" }, "environments": { "type": "object", "additionalProperties": { "$ref": "#/definitions/Environment" } }, "external_links": { "type": "array", "items": { "$ref": "#/definitions/AssetExternalLink" } }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "providers": { "type": "array", "items": { "type": "string" } }, "schema": { "type": "object", "additionalProperties": { "type": "string" } }, "sources": { "type": "array", "items": { "$ref": "#/definitions/AssetSource" } }, "tags": { "type": "array", "items": { "type": "string" } }, "type": { "type": "string" }, "user_description": { "type": "string" } } }, "UpdateAssetRuleRequest": { "type": "object", "properties": { "description": { "type": "string" }, "is_enabled": { "type": "boolean" }, "links": { "type": "array", "items": { "$ref": "#/definitions/AssetRuleExternalLink" } }, "metadata_field": { "type": "string" }, "name": { "type": "string" }, "pattern_type": { "type": "string" }, "pattern_value": { "type": "string" }, "priority": { "type": "integer" }, "query_expression": { "type": "string" }, "rule_type": { "type": "string" }, "term_ids": { "type": "array", "items": { "type": "string" } } } }, "UpdateDataProductRequest": { "type": "object", "properties": { "description": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "owners": { "type": "array", "items": { "$ref": "#/definitions/DataProductOwnerRequest" } }, "tags": { "type": "array", "items": { "type": "string" } } } }, "UpdateMemberRoleRequest": { "type": "object", "properties": { "role": { "type": "string" } } }, "UpdatePasswordRequest": { "type": "object", "required": [ "new_password" ], "properties": { "new_password": { "type": "string", "minLength": 8 } } }, "UpdateSSOMappingRequest": { "type": "object", "properties": { "member_role": { "type": "string" }, "team_id": { "type": "string" } } }, "UpdateScheduleRequest": { "type": "object", "properties": { "config": { "type": "object", "additionalProperties": true }, "cron_expression": { "type": "string" }, "enabled": { "type": "boolean" }, "name": { "type": "string" }, "plugin_id": { "type": "string" } } }, "UpdateServiceAccountRequest": { "type": "object", "properties": { "active": { "type": "boolean" }, "description": { "type": "string" }, "name": { "type": "string" }, "role_ids": { "type": "array", "items": { "type": "string" } } } }, "UpdateTeamRequest": { "type": "object", "properties": { "description": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } } } }, "UpdateTermRequest": { "type": "object", "properties": { "definition": { "type": "string" }, "description": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "owners": { "type": "array", "items": { "$ref": "#/definitions/OwnerRequest" } }, "parent_term_id": { "type": "string" } } }, "UpdateUserInput": { "type": "object", "properties": { "active": { "type": "boolean" }, "email": { "type": "string" }, "name": { "type": "string" }, "password": { "type": "string", "minLength": 8 }, "preferences": { "type": "object", "additionalProperties": true }, "profile_picture": { "type": "string" }, "role_names": { "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "User": { "type": "object", "properties": { "active": { "type": "boolean" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "identities": { "type": "array", "items": { "$ref": "#/definitions/UserIdentity" } }, "must_change_password": { "type": "boolean" }, "name": { "type": "string" }, "preferences": { "type": "object", "additionalProperties": true }, "profile_picture": { "type": "string" }, "roles": { "type": "array", "items": { "$ref": "#/definitions/Role" } }, "updated_at": { "type": "string" }, "username": { "type": "string" } } }, "UserIdentity": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "provider": { "type": "string" }, "provider_data": { "type": "object", "additionalProperties": true }, "provider_email": { "type": "string" }, "provider_user_id": { "type": "string" }, "updated_at": { "type": "string" }, "user_id": { "type": "string" } } }, "ValidateConfigRequest": { "type": "object", "properties": { "config": { "type": "object", "additionalProperties": true }, "plugin_id": { "type": "string" } } }, "ValidateConfigResponse": { "type": "object", "properties": { "errors": { "type": "array", "items": { "$ref": "#/definitions/ValidationErrorDetail" } }, "valid": { "type": "boolean" } } }, "ValidationErrorDetail": { "type": "object", "properties": { "field": { "type": "string" }, "message": { "type": "string" } } }, "pluginsdk.ConfigField": { "type": "object", "properties": { "default": {}, "description": { "type": "string" }, "fields": { "type": "array", "items": { "$ref": "#/definitions/pluginsdk.ConfigField" } }, "hidden": { "type": "boolean" }, "is_array": { "type": "boolean" }, "label": { "type": "string" }, "name": { "type": "string" }, "options": { "type": "array", "items": { "$ref": "#/definitions/pluginsdk.FieldOption" } }, "placeholder": { "type": "string" }, "required": { "type": "boolean" }, "sensitive": { "type": "boolean" }, "show_when": { "$ref": "#/definitions/pluginsdk.ShowWhen" }, "type": { "$ref": "#/definitions/pluginsdk.FieldType" }, "validation": { "$ref": "#/definitions/pluginsdk.Validation" } } }, "pluginsdk.FieldOption": { "type": "object", "properties": { "label": { "type": "string" }, "value": { "type": "string" } } }, "pluginsdk.FieldType": { "type": "string", "enum": [ "string", "int", "bool", "select", "multiselect", "password", "object" ], "x-enum-varnames": [ "FieldTypeString", "FieldTypeInt", "FieldTypeBool", "FieldTypeSelect", "FieldTypeMultiselect", "FieldTypePassword", "FieldTypeObject" ] }, "pluginsdk.Meta": { "type": "object", "properties": { "category": { "type": "string" }, "config_spec": { "type": "array", "items": { "$ref": "#/definitions/pluginsdk.ConfigField" } }, "description": { "type": "string" }, "features": { "type": "array", "items": { "type": "string" } }, "icon": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string" }, "supports_data_preview": { "type": "boolean" } } }, "pluginsdk.ShowWhen": { "type": "object", "properties": { "field": { "type": "string" }, "value": { "type": "string" } } }, "pluginsdk.Validation": { "type": "object", "properties": { "max": { "type": "integer" }, "max_len": { "type": "integer" }, "min": { "type": "integer" }, "min_len": { "type": "integer" }, "pattern": { "type": "string" } } }, "v1_roles.createRoleRequest": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "type": "string" }, "permission_ids": { "type": "array", "items": { "type": "string" } } } }, "v1_roles.replacePermissionsRequest": { "type": "object", "properties": { "permission_ids": { "type": "array", "items": { "type": "string" } } } }, "v1_roles.updateRoleRequest": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "type": "string" } } } }, "securityDefinitions": { "ApiKeyAuth": { "type": "apiKey", "name": "X-API-Key", "in": "header" }, "BearerAuth": { "description": "Type \"Bearer\" followed by a space and JWT.", "type": "apiKey", "name": "Authorization", "in": "header" } } }