{ "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" }, "basePath": "/api/v1", "paths": { "/api/v1/ingestion/runs": { "get": { "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "List ingestion job runs", "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/schedules.ListJobRunsResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/ingestion/runs/{id}": { "get": { "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Get a job run by ID", "parameters": [ { "type": "string", "description": "Job run ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/runs.JobRun" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/ingestion/runs/{id}/cancel": { "post": { "tags": [ "ingestion" ], "summary": "Cancel a running job", "parameters": [ { "type": "string", "description": "Job run ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/ingestion/runs/{id}/entities": { "get": { "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Get entities for a job run", "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/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/ingestion/schedules": { "get": { "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "List ingestion schedules", "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/schedules.ListSchedulesResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Create a new ingestion schedule", "parameters": [ { "description": "Schedule configuration", "name": "schedule", "in": "body", "required": true, "schema": { "$ref": "#/definitions/schedules.CreateScheduleRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/runs.Schedule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/ingestion/schedules/{id}": { "get": { "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Get an ingestion schedule by ID", "parameters": [ { "type": "string", "description": "Schedule ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/runs.Schedule" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Update an ingestion schedule", "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/schedules.UpdateScheduleRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/runs.Schedule" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "delete": { "tags": [ "ingestion" ], "summary": "Delete an ingestion schedule", "parameters": [ { "type": "string", "description": "Schedule ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/ingestion/schedules/{id}/trigger": { "post": { "tags": [ "ingestion" ], "summary": "Manually trigger an ingestion schedule", "parameters": [ { "type": "string", "description": "Schedule ID", "name": "id", "in": "path", "required": true } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/runs.JobRun" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/ingestion/validate": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ingestion" ], "summary": "Validate plugin configuration", "parameters": [ { "description": "Config to validate", "name": "config", "in": "body", "required": true, "schema": { "$ref": "#/definitions/schedules.ValidateConfigRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/schedules.ValidateConfigResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/lineage": { "post": { "description": "Process OpenLineage run events and update assets/lineage accordingly", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Ingest OpenLineage event", "parameters": [ { "description": "OpenLineage run event", "name": "event", "in": "body", "required": true, "schema": { "$ref": "#/definitions/lineage.RunEvent" } } ], "responses": { "200": { "description": "Event processed successfully" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/metrics": { "get": { "description": "Get aggregated metrics for dashboard display", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get metrics for UI", "parameters": [ { "type": "string", "example": "2024-01-01T00:00:00Z", "description": "Start time (ISO 8601)", "name": "start", "in": "query", "required": true }, { "type": "string", "example": "2024-01-02T00:00:00Z", "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/metrics.GetMetricsResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/api/v1/metrics/assets/by-owner": { "get": { "description": "Get asset counts grouped by owner", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets by owner", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/metrics.AssetsByOwnerResponse" } } } } }, "/api/v1/metrics/assets/by-provider": { "get": { "description": "Get asset counts grouped by provider", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets by provider", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/metrics.AssetsByProviderResponse" } } } } }, "/api/v1/metrics/assets/by-type": { "get": { "description": "Get asset counts grouped by type", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets by type", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/metrics.AssetsByTypeResponse" } } } } }, "/api/v1/metrics/assets/total": { "get": { "description": "Get the total number of assets", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get total assets count", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/metrics.TotalAssetsResponse" } } } } }, "/api/v1/metrics/assets/with-schemas": { "get": { "description": "Get the count of assets that have schemas defined", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get assets with schemas count", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/metrics.AssetsWithSchemasResponse" } } } } }, "/api/v1/metrics/top-assets": { "get": { "description": "Get the most viewed assets", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get top viewed assets", "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/metrics.AssetCount" } } } } } }, "/api/v1/metrics/top-queries": { "get": { "description": "Get the most popular search queries", "produces": [ "application/json" ], "tags": [ "metrics" ], "summary": "Get top search queries", "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/metrics.QueryCount" } } } } } }, "/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", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/plugin.AWSCredentialStatus" } } } } }, "/assets": { "post": { "description": "Create a new asset in the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Create a new asset", "parameters": [ { "description": "Asset creation request", "name": "asset", "in": "body", "required": true, "schema": { "$ref": "#/definitions/assets.CreateRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/asset.Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/by-glossary-term/{term_id}": { "get": { "description": "Retrieve all assets associated with a specific glossary term", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get assets by glossary term", "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/common.ErrorResponse" } } } } }, "/assets/documentation": { "post": { "description": "Create or update documentation for an asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Create asset documentation", "parameters": [ { "description": "Documentation creation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/assets.DocumentationCreateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/assetdocs.Documentation" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/documentation/batch": { "post": { "description": "Create or update documentation for multiple assets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Batch create documentation", "parameters": [ { "description": "Batch documentation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/assets.BatchDocumentationRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/assets.BatchDocumentationResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/documentation/{mrn}": { "get": { "description": "Get documentation for a specific asset", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset documentation", "parameters": [ { "type": "string", "format": "url", "description": "Asset MRN", "name": "mrn", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/assetdocs.Documentation" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/list": { "get": { "description": "Get a paginated list of assets", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "List assets with pagination", "parameters": [ { "type": "integer", "description": "Offset for pagination", "name": "offset", "in": "query" }, { "type": "integer", "description": "Limit for pagination", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/asset.ListResult" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/lookup/{type}/{name}": { "get": { "description": "Get an asset using its type and name", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Lookup asset by type and name", "parameters": [ { "type": "string", "description": "Asset type", "name": "type", "in": "path", "required": true }, { "type": "string", "description": "Asset name", "name": "name", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/asset.Asset" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/match-pattern": { "get": { "description": "Find assets matching a pattern", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Match asset pattern", "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.Asset" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/my-assets": { "get": { "description": "Get assets owned by the current user or their teams", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get user's assets", "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/assets.SearchResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/qualified-name/{qualifiedName}": { "get": { "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", "parameters": [ { "type": "string", "description": "Asset qualified name", "name": "qualifiedName", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/asset.Asset" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/search": { "get": { "description": "Search for assets using query string and filters", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Search assets", "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/assets.SearchResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/suggestions/metadata/fields": { "get": { "description": "Get suggestions for metadata fields and their types", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get metadata field suggestions", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/asset.MetadataFieldSuggestion" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/suggestions/metadata/values": { "get": { "description": "Get suggestions for values of a specific metadata field", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get metadata value suggestions", "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/asset.MetadataValueSuggestion" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/suggestions/tags": { "get": { "description": "Get suggestions for asset tags", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get tag suggestions", "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/common.ErrorResponse" } } } } }, "/assets/summary": { "get": { "description": "Get the total count of assets by type", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset summary", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/assets.AssetSummaryResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/{id}": { "get": { "description": "Get detailed information about a specific asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get an asset by ID", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/asset.Asset" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "put": { "description": "Update an existing asset's information", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Update an asset", "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/assets.UpdateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/asset.Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "delete": { "description": "Delete an asset from the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Delete an asset", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/{id}/run-history": { "get": { "description": "Get paginated run history for a specific asset", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset run history", "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/assets.RunHistoryResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/{id}/run-history/histogram": { "get": { "description": "Get histogram data for asset run history over specified period", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset run history histogram", "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/assets.HistogramResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/{id}/tags": { "post": { "description": "Add a new tag to an existing asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Add tag to asset", "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/assets.TagRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/asset.Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "delete": { "description": "Remove a tag from an existing asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Remove tag from asset", "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/assets.TagRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/asset.Asset" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/assets/{id}/terms": { "get": { "description": "Retrieve all glossary terms associated with an asset", "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Get asset's glossary terms", "parameters": [ { "type": "string", "description": "Asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/asset.AssetTerm" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "post": { "description": "Associate one or more glossary terms with an asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Add glossary terms to asset", "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/assets.AddTermsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/asset.AssetTerm" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "delete": { "description": "Remove a glossary term association from an asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "assets" ], "summary": "Remove glossary term from asset", "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/assets.RemoveTermRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/asset.AssetTerm" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/auth/config": { "get": { "description": "Returns the enabled auth providers without sensitive data", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Get auth configuration", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/auth.AuthConfig" } } } } }, "/auth/okta/callback": { "get": { "description": "Processes the OAuth callback from Okta", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Handle Okta OAuth callback", "parameters": [ { "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/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/auth/okta/login": { "get": { "description": "Redirects the user to Okta for authentication", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Initiate Okta OAuth login", "responses": { "307": { "description": "Temporary Redirect", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/lineage/assets/{id}": { "get": { "description": "Get upstream and downstream lineage for a specific asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Get asset lineage", "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" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/lineage.LineageResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/lineage/batch": { "post": { "description": "Create lineage edges in batch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Batch create lineage edges", "parameters": [ { "description": "Array of lineage edges to create", "name": "edges", "in": "body", "required": true, "schema": { "type": "array", "items": { "$ref": "#/definitions/lineage.LineageEdge" } } } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/lineage.BatchLineageResult" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/lineage/direct": { "post": { "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", "parameters": [ { "description": "Lineage edge to create", "name": "edge", "in": "body", "required": true, "schema": { "$ref": "#/definitions/lineage.LineageEdge" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/lineage.LineageEdge" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/lineage/direct/{id}": { "get": { "description": "Get a specific direct lineage connection by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Get direct lineage by ID", "parameters": [ { "type": "string", "format": "uuid", "description": "Edge ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/lineage.LineageEdge" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "delete": { "description": "Delete a direct lineage connection by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "lineage" ], "summary": "Delete direct lineage", "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/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/pipelines/{pipelineName}": { "delete": { "description": "Delete all resources ever created by a pipeline (across all sources)", "produces": [ "application/json" ], "tags": [ "pipelines" ], "summary": "Destroy pipeline", "parameters": [ { "type": "string", "description": "Pipeline Name", "name": "pipelineName", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_marmotdata_marmot_internal_api_v1_runs.DestroyRunResponse" } } } } }, "/runs": { "get": { "description": "Get paginated list of runs with filtering", "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "List runs", "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/plugin.Run" } }, "total": { "type": "integer" } } } } } } }, "/runs/assets/batch": { "post": { "description": "Create/update assets within a run", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Batch create assets", "parameters": [ { "description": "Batch create request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/runs.BatchCreateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/runs.BatchCreateResponse" } } } } }, "/runs/cleanup": { "post": { "description": "Mark runs as failed if they've been running too long without updates", "tags": [ "runs" ], "summary": "Cleanup stale runs", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "integer" } } } } } }, "/runs/complete": { "post": { "description": "Complete a run with results", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Complete run", "parameters": [ { "description": "Complete run request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/runs.CompleteRunRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/runs/start": { "post": { "description": "Start a new run for tracking", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Start run", "parameters": [ { "description": "Start run request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/runs.StartRunRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/plugin.Run" } } } } }, "/runs/{id}": { "get": { "description": "Get a specific run by ID", "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Get run", "parameters": [ { "type": "string", "description": "Run ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/plugin.Run" } } } } }, "/runs/{id}/entities": { "get": { "description": "Get paginated list of entities for a specific run", "produces": [ "application/json" ], "tags": [ "runs" ], "summary": "Get run entities", "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/runs.RunEntitiesResponse" } } } } }, "/search": { "get": { "description": "Search across assets, glossary terms, teams, and users", "produces": [ "application/json" ], "tags": [ "search" ], "summary": "Unified search", "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/search.Response" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/ui/config": { "get": { "description": "Get UI configuration including banner settings", "produces": [ "application/json" ], "tags": [ "ui" ], "summary": "Get UI configuration", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ui.UIConfigResponse" } } } } }, "/users": { "get": { "description": "Get a list of users with optional filtering", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "List users", "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/users.ListUsersResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "post": { "description": "Create a new user in the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Create a new user", "parameters": [ { "description": "User creation request", "name": "user", "in": "body", "required": true, "schema": { "$ref": "#/definitions/user.CreateUserInput" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/user.User" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/users/apikeys": { "get": { "description": "Get all API keys for a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "List API keys", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/user.APIKey" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "post": { "description": "Create a new API key for a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Create API key", "parameters": [ { "description": "API key creation request", "name": "key", "in": "body", "required": true, "schema": { "$ref": "#/definitions/users.CreateAPIKeyRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/user.APIKey" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/users/apikeys/{id}": { "delete": { "description": "Delete an API key", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Delete API key", "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/common.ErrorResponse" } } } } }, "/users/login": { "post": { "description": "Authenticate a user with username/email and password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Login user", "parameters": [ { "description": "Login credentials", "name": "credentials", "in": "body", "required": true, "schema": { "$ref": "#/definitions/users.LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/users.TokenResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/users/me": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Get detailed information about the currently authenticated user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Get current user profile", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/user.User" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/users/oauth/link": { "post": { "description": "Link an OAuth account to an existing user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Link OAuth account", "parameters": [ { "description": "OAuth account link request", "name": "link", "in": "body", "required": true, "schema": { "$ref": "#/definitions/users.OAuthLinkRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/users/oauth/unlink/{id}/{provider}": { "delete": { "description": "Unlink an OAuth account from a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Unlink OAuth account", "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/common.ErrorResponse" } } } } }, "/users/preferences": { "put": { "description": "Update preferences for the current user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Update user preferences", "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/common.ErrorResponse" } } } } }, "/users/update-password": { "post": { "description": "Update current user's password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Update user password", "parameters": [ { "description": "Password update request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/users.UpdatePasswordRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/users.TokenResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } }, "/users/{id}": { "get": { "description": "Get detailed information about a specific user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Get a user by ID", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/user.User" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "put": { "description": "Update user information", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Update a user", "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/user.UpdateUserInput" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/user.User" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } }, "delete": { "description": "Delete a user from the system", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "users" ], "summary": "Delete a user", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/common.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/common.ErrorResponse" } } } } } }, "definitions": { "asset.Asset": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "description": { "type": "string" }, "environments": { "type": "object", "additionalProperties": { "$ref": "#/definitions/asset.Environment" } }, "external_links": { "type": "array", "items": { "$ref": "#/definitions/asset.ExternalLink" } }, "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/asset.AssetSource" } }, "tags": { "type": "array", "items": { "type": "string" } }, "type": { "type": "string" }, "updated_at": { "type": "string" }, "user_description": { "type": "string" } } }, "asset.AssetSource": { "type": "object", "properties": { "last_sync_at": { "type": "string" }, "name": { "type": "string" }, "priority": { "type": "integer" }, "properties": { "type": "object", "additionalProperties": true } } }, "asset.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" } } }, "asset.AvailableFilters": { "type": "object", "properties": { "providers": { "type": "object", "additionalProperties": { "type": "integer" } }, "tags": { "type": "object", "additionalProperties": { "type": "integer" } }, "types": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "asset.Environment": { "type": "object", "properties": { "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "path": { "type": "string" } } }, "asset.ExternalLink": { "type": "object", "properties": { "icon": { "type": "string" }, "name": { "type": "string" }, "url": { "type": "string" } } }, "asset.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" } } }, "asset.ListResult": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/asset.Asset" } }, "filters": { "$ref": "#/definitions/asset.AvailableFilters" }, "total": { "type": "integer" } } }, "asset.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" } } } }, "asset.MetadataValueSuggestion": { "type": "object", "properties": { "count": { "type": "integer" }, "example": { "$ref": "#/definitions/asset.Asset" }, "value": { "type": "string" } } }, "asset.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" } } }, "assetdocs.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" } } }, "assets.AddTermsRequest": { "type": "object", "required": [ "term_ids" ], "properties": { "term_ids": { "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "assets.AssetSummaryResponse": { "type": "object", "properties": { "services": { "type": "object", "additionalProperties": { "type": "integer" } }, "tags": { "type": "object", "additionalProperties": { "type": "integer" } }, "types": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "assets.BatchDocumentationRequest": { "type": "object", "required": [ "documentation" ], "properties": { "documentation": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/assetdocs.Documentation" } } } }, "assets.BatchDocumentationResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/definitions/assets.BatchDocumentationResult" } } } }, "assets.BatchDocumentationResult": { "type": "object", "properties": { "documentation": { "$ref": "#/definitions/assetdocs.Documentation" }, "error": { "type": "string" }, "status": { "type": "string" } } }, "assets.CreateRequest": { "type": "object", "required": [ "name", "providers", "type" ], "properties": { "description": { "type": "string" }, "environments": { "type": "object", "additionalProperties": { "$ref": "#/definitions/asset.Environment" } }, "external_links": { "type": "array", "items": { "$ref": "#/definitions/asset.ExternalLink" } }, "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/asset.AssetSource" } }, "tags": { "type": "array", "items": { "type": "string" } }, "type": { "type": "string" } } }, "assets.DocumentationCreateRequest": { "type": "object", "required": [ "content", "mrn", "source" ], "properties": { "content": { "type": "string" }, "mrn": { "type": "string" }, "source": { "type": "string" } } }, "assets.HistogramResponse": { "type": "object", "properties": { "buckets": { "type": "array", "items": { "$ref": "#/definitions/asset.HistogramBucket" } }, "period": { "type": "string" } } }, "assets.RemoveTermRequest": { "type": "object", "required": [ "term_id" ], "properties": { "term_id": { "type": "string" } } }, "assets.RunHistoryResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "run_history": { "type": "array", "items": { "$ref": "#/definitions/asset.RunHistory" } }, "total": { "type": "integer" } } }, "assets.SearchResponse": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/asset.Asset" } }, "filters": { "$ref": "#/definitions/asset.AvailableFilters" }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "total": { "type": "integer" } } }, "assets.TagRequest": { "type": "object", "required": [ "tag" ], "properties": { "tag": { "type": "string" } } }, "assets.UpdateRequest": { "type": "object", "properties": { "description": { "type": "string" }, "environments": { "type": "object", "additionalProperties": { "$ref": "#/definitions/asset.Environment" } }, "external_links": { "type": "array", "items": { "$ref": "#/definitions/asset.ExternalLink" } }, "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/asset.AssetSource" } }, "tags": { "type": "array", "items": { "type": "string" } }, "type": { "type": "string" }, "user_description": { "type": "string" } } }, "auth.AuthConfig": { "type": "object", "properties": { "enabled_providers": { "type": "array", "items": { "type": "string" } } } }, "common.ErrorResponse": { "type": "object", "properties": { "error": { "type": "string" } } }, "common.ValidationError": { "type": "object", "properties": { "field": { "type": "string" }, "message": { "type": "string" } } }, "github_com_marmotdata_marmot_internal_api_v1_runs.DestroyRunResponse": { "type": "object", "properties": { "assets_deleted": { "type": "integer" }, "deleted_entity_mrns": { "type": "array", "items": { "type": "string" } }, "documentation_deleted": { "type": "integer" }, "lineage_deleted": { "type": "integer" } } }, "github_com_marmotdata_marmot_internal_api_v1_runs.DocumentationResult": { "type": "object", "properties": { "asset_mrn": { "type": "string" }, "error": { "type": "string" }, "status": { "type": "string" }, "type": { "type": "string" } } }, "github_com_marmotdata_marmot_internal_api_v1_runs.LineageResult": { "type": "object", "properties": { "error": { "type": "string" }, "source": { "type": "string" }, "status": { "type": "string" }, "target": { "type": "string" }, "type": { "type": "string" } } }, "lineage.BatchLineageResult": { "type": "object", "properties": { "edge": { "$ref": "#/definitions/lineage.LineageEdge" }, "status": { "description": "\"created\", \"duplicate\", or \"existing\"", "type": "string" } } }, "lineage.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 } } }, "lineage.Job": { "type": "object", "properties": { "facets": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "namespace": { "type": "string" } } }, "lineage.LineageEdge": { "type": "object", "properties": { "id": { "type": "string" }, "job_mrn": { "type": "string" }, "source": { "type": "string" }, "target": { "type": "string" }, "type": { "type": "string" } } }, "lineage.LineageNode": { "type": "object", "properties": { "asset": { "$ref": "#/definitions/asset.Asset" }, "depth": { "type": "integer" }, "id": { "type": "string" }, "type": { "type": "string" } } }, "lineage.LineageResponse": { "type": "object", "properties": { "edges": { "type": "array", "items": { "$ref": "#/definitions/lineage.LineageEdge" } }, "nodes": { "type": "array", "items": { "$ref": "#/definitions/lineage.LineageNode" } } } }, "lineage.Run": { "type": "object", "properties": { "facets": { "type": "object", "additionalProperties": true }, "runId": { "type": "string" } } }, "lineage.RunEvent": { "type": "object", "properties": { "eventTime": { "type": "string" }, "eventType": { "type": "string" }, "inputs": { "type": "array", "items": { "$ref": "#/definitions/lineage.Dataset" } }, "job": { "$ref": "#/definitions/lineage.Job" }, "outputs": { "type": "array", "items": { "$ref": "#/definitions/lineage.Dataset" } }, "producer": { "type": "string" }, "run": { "$ref": "#/definitions/lineage.Run" }, "schemaURL": { "type": "string" } } }, "metrics.AggregatedMetric": { "type": "object", "properties": { "aggregation_type": { "type": "string" }, "bucket_end": { "type": "string" }, "bucket_size": { "$ref": "#/definitions/time.Duration" }, "bucket_start": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "name": { "type": "string" }, "value": { "type": "number" } } }, "metrics.AssetCount": { "type": "object", "properties": { "asset_id": { "type": "string" }, "asset_name": { "type": "string" }, "asset_provider": { "type": "string" }, "asset_type": { "type": "string" }, "count": { "type": "integer" } } }, "metrics.AssetsByOwnerResponse": { "type": "object", "properties": { "assets": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "metrics.AssetsByProviderResponse": { "type": "object", "properties": { "assets": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "metrics.AssetsByTypeResponse": { "type": "object", "properties": { "assets": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "metrics.AssetsWithSchemasResponse": { "type": "object", "properties": { "count": { "type": "integer" }, "percentage": { "type": "number" }, "total": { "type": "integer" } } }, "metrics.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" } } }, "metrics.GetMetricsResponse": { "type": "object", "properties": { "metrics": { "type": "array", "items": { "$ref": "#/definitions/metrics.AggregatedMetric" } }, "query": { "$ref": "#/definitions/metrics.GetMetricsRequest" } } }, "metrics.QueryCount": { "type": "object", "properties": { "count": { "type": "integer" }, "query": { "type": "string" }, "query_type": { "type": "string" } } }, "metrics.TotalAssetsResponse": { "type": "object", "properties": { "count": { "type": "integer" } } }, "plugin.AWSCredentialStatus": { "type": "object", "properties": { "available": { "type": "boolean" }, "error": { "type": "string" }, "sources": { "type": "array", "items": { "type": "string" } } } }, "plugin.RawPluginConfig": { "type": "object", "additionalProperties": true }, "plugin.Run": { "type": "object", "properties": { "completed_at": { "type": "string" }, "config": { "$ref": "#/definitions/plugin.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/plugin.RunStatus" }, "summary": { "$ref": "#/definitions/plugin.RunSummary" } } }, "plugin.RunStatus": { "type": "string", "enum": [ "running", "completed", "failed", "cancelled" ], "x-enum-varnames": [ "StatusRunning", "StatusCompleted", "StatusFailed", "StatusCancelled" ] }, "plugin.RunSummary": { "type": "object", "properties": { "assets_created": { "type": "integer" }, "assets_deleted": { "type": "integer" }, "assets_updated": { "type": "integer" }, "documentation_added": { "type": "integer" }, "duration_seconds": { "type": "integer" }, "errors_count": { "type": "integer" }, "lineage_created": { "type": "integer" }, "lineage_updated": { "type": "integer" }, "total_entities": { "type": "integer" } } }, "runs.BatchAssetResult": { "type": "object", "properties": { "asset": {}, "error": { "type": "string" }, "mrn": { "type": "string" }, "name": { "type": "string" }, "provider": { "type": "string" }, "status": { "type": "string" }, "type": { "type": "string" } } }, "runs.BatchCreateRequest": { "type": "object", "required": [ "assets", "pipeline_name", "run_id", "source_name" ], "properties": { "assets": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/runs.CreateAssetRequest" } }, "config": { "$ref": "#/definitions/plugin.RawPluginConfig" }, "documentation": { "type": "array", "items": { "$ref": "#/definitions/runs.CreateDocRequest" } }, "lineage": { "type": "array", "items": { "$ref": "#/definitions/runs.CreateLineageRequest" } }, "pipeline_name": { "type": "string" }, "run_id": { "type": "string" }, "source_name": { "type": "string" }, "statistics": { "type": "array", "items": { "$ref": "#/definitions/runs.CreateStatRequest" } } } }, "runs.BatchCreateResponse": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/runs.BatchAssetResult" } }, "documentation": { "type": "array", "items": { "$ref": "#/definitions/github_com_marmotdata_marmot_internal_api_v1_runs.DocumentationResult" } }, "lineage": { "type": "array", "items": { "$ref": "#/definitions/github_com_marmotdata_marmot_internal_api_v1_runs.LineageResult" } }, "stale_entities_removed": { "type": "array", "items": { "type": "string" } } } }, "runs.CompleteRunRequest": { "type": "object", "required": [ "run_id", "status" ], "properties": { "error": { "type": "string" }, "run_id": { "type": "string" }, "status": { "$ref": "#/definitions/plugin.RunStatus" }, "summary": { "$ref": "#/definitions/plugin.RunSummary" } } }, "runs.CreateAssetRequest": { "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": { "type": "string" } }, "tags": { "type": "array", "items": { "type": "string" } }, "type": { "type": "string" } } }, "runs.CreateDocRequest": { "type": "object", "properties": { "asset_mrn": { "type": "string" }, "content": { "type": "string" }, "type": { "type": "string" } } }, "runs.CreateLineageRequest": { "type": "object", "properties": { "source": { "type": "string" }, "target": { "type": "string" }, "type": { "type": "string" } } }, "runs.CreateStatRequest": { "type": "object", "required": [ "asset_mrn", "metric_name", "value" ], "properties": { "asset_mrn": { "type": "string" }, "metric_name": { "type": "string" }, "value": { "type": "number" } } }, "runs.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" } } }, "runs.RunEntitiesResponse": { "type": "object", "properties": { "entities": { "type": "array", "items": { "$ref": "#/definitions/runs.RunEntity" } }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "total": { "type": "integer" } } }, "runs.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" } } }, "runs.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" }, "name": { "type": "string" }, "next_run_at": { "type": "string" }, "plugin_id": { "type": "string" }, "updated_at": { "type": "string" } } }, "runs.StartRunRequest": { "type": "object", "required": [ "pipeline_name", "source_name" ], "properties": { "config": { "$ref": "#/definitions/plugin.RawPluginConfig" }, "pipeline_name": { "type": "string" }, "source_name": { "type": "string" } } }, "schedules.CreateScheduleRequest": { "type": "object", "properties": { "config": { "type": "object", "additionalProperties": true }, "cron_expression": { "type": "string" }, "enabled": { "type": "boolean" }, "name": { "type": "string" }, "plugin_id": { "type": "string" } } }, "schedules.ListJobRunsResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "runs": { "type": "array", "items": { "$ref": "#/definitions/runs.JobRun" } }, "total": { "type": "integer" } } }, "schedules.ListSchedulesResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "schedules": { "type": "array", "items": { "$ref": "#/definitions/runs.Schedule" } }, "total": { "type": "integer" } } }, "schedules.UpdateScheduleRequest": { "type": "object", "properties": { "config": { "type": "object", "additionalProperties": true }, "cron_expression": { "type": "string" }, "enabled": { "type": "boolean" }, "name": { "type": "string" }, "plugin_id": { "type": "string" } } }, "schedules.ValidateConfigRequest": { "type": "object", "properties": { "config": { "type": "object", "additionalProperties": true }, "plugin_id": { "type": "string" } } }, "schedules.ValidateConfigResponse": { "type": "object", "properties": { "errors": { "type": "array", "items": { "$ref": "#/definitions/common.ValidationError" } }, "valid": { "type": "boolean" } } }, "search.FacetValue": { "type": "object", "properties": { "count": { "type": "integer" }, "value": { "type": "string" } } }, "search.Facets": { "type": "object", "properties": { "asset_types": { "type": "array", "items": { "$ref": "#/definitions/search.FacetValue" } }, "providers": { "type": "array", "items": { "$ref": "#/definitions/search.FacetValue" } }, "tags": { "type": "array", "items": { "$ref": "#/definitions/search.FacetValue" } }, "types": { "type": "object", "additionalProperties": { "type": "integer" } } } }, "search.Response": { "type": "object", "properties": { "facets": { "$ref": "#/definitions/search.Facets" }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "results": { "type": "array", "items": { "$ref": "#/definitions/search.Result" } }, "total": { "type": "integer" } } }, "search.Result": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "name": { "type": "string" }, "rank": { "type": "number" }, "type": { "$ref": "#/definitions/search.ResultType" }, "updated_at": { "type": "string" }, "url": { "type": "string" } } }, "search.ResultType": { "type": "string", "enum": [ "asset", "glossary", "team" ], "x-enum-varnames": [ "ResultTypeAsset", "ResultTypeGlossary", "ResultTypeTeam" ] }, "time.Duration": { "type": "integer", "enum": [ 1, 1000, 1000000, 1000000000, 60000000000, 3600000000000, 1, 1000, 1000000, 1000000000, 60000000000 ], "x-enum-varnames": [ "Nanosecond", "Microsecond", "Millisecond", "Second", "Minute", "Hour", "Nanosecond", "Microsecond", "Millisecond", "Second", "Minute" ] }, "ui.BannerResponse": { "type": "object", "properties": { "dismissible": { "type": "boolean" }, "enabled": { "type": "boolean" }, "id": { "type": "string" }, "message": { "type": "string" }, "variant": { "type": "string" } } }, "ui.UIConfigResponse": { "type": "object", "properties": { "banner": { "$ref": "#/definitions/ui.BannerResponse" } } }, "user.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" } } }, "user.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 }, "role_names": { "type": "array", "minItems": 1, "items": { "type": "string" } }, "username": { "type": "string", "maxLength": 255, "minLength": 3 } } }, "user.Permission": { "type": "object", "properties": { "action": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "resource_type": { "type": "string" } } }, "user.Role": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "permissions": { "type": "array", "items": { "$ref": "#/definitions/user.Permission" } } } }, "user.UpdateUserInput": { "type": "object", "properties": { "active": { "type": "boolean" }, "email": { "type": "string" }, "name": { "type": "string" }, "password": { "type": "string", "minLength": 8 }, "preferences": { "type": "object", "additionalProperties": true }, "role_names": { "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "user.User": { "type": "object", "properties": { "active": { "type": "boolean" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "must_change_password": { "type": "boolean" }, "name": { "type": "string" }, "preferences": { "type": "object", "additionalProperties": true }, "roles": { "type": "array", "items": { "$ref": "#/definitions/user.Role" } }, "updated_at": { "type": "string" }, "username": { "type": "string" } } }, "users.CreateAPIKeyRequest": { "type": "object", "required": [ "name" ], "properties": { "expires_in_days": { "type": "integer" }, "name": { "type": "string" } } }, "users.ListUsersResponse": { "type": "object", "properties": { "limit": { "type": "integer" }, "offset": { "type": "integer" }, "total": { "type": "integer" }, "users": { "type": "array", "items": { "$ref": "#/definitions/user.User" } } } }, "users.LoginRequest": { "type": "object", "required": [ "password", "username" ], "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "users.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 } } }, "users.TokenResponse": { "type": "object", "properties": { "access_token": { "type": "string" }, "expires_in": { "type": "integer" }, "requires_password_change": { "type": "boolean" }, "token_type": { "type": "string" } } }, "users.UpdatePasswordRequest": { "type": "object", "required": [ "new_password" ], "properties": { "new_password": { "type": "string", "minLength": 8 } } } } }