diff --git a/_docs/master/README.md b/_docs/master/README.md index c83b4ec1bd..10958eac11 100644 --- a/_docs/master/README.md +++ b/_docs/master/README.md @@ -205,7 +205,6 @@ Metabase's reference documentation. - [Interactive embedding quick start](./embedding/interactive-embedding-quick-start-guide) - [Static embedding](./embedding/static-embedding) - [Parameters for static embeds](./embedding/static-embedding-parameters) -- [Securing embedded Metabase](./embedding/securing-embeds) ### Configuration @@ -301,5 +300,4 @@ Data jargon explained. ### [Metabase Experts](/partners/) If you’d like more technical resources to set up your data stack with Metabase, connect with a [Metabase Expert](/partners/). - diff --git a/_docs/master/actions/images/appearance.png b/_docs/master/actions/images/appearance.png index 9429442b26..4564cd7bc6 100644 Binary files a/_docs/master/actions/images/appearance.png and b/_docs/master/actions/images/appearance.png differ diff --git a/_docs/master/actions/images/basic-actions.png b/_docs/master/actions/images/basic-actions.png index 9fa9251682..04efb6a0ac 100644 Binary files a/_docs/master/actions/images/basic-actions.png and b/_docs/master/actions/images/basic-actions.png differ diff --git a/_docs/master/actions/images/custom-action.png b/_docs/master/actions/images/custom-action.png index 6c58b5e734..74dd224a92 100644 Binary files a/_docs/master/actions/images/custom-action.png and b/_docs/master/actions/images/custom-action.png differ diff --git a/_docs/master/actions/images/dropdown.png b/_docs/master/actions/images/dropdown.png index 44597dc4f9..cfc617a883 100644 Binary files a/_docs/master/actions/images/dropdown.png and b/_docs/master/actions/images/dropdown.png differ diff --git a/_docs/master/actions/images/example-action.png b/_docs/master/actions/images/example-action.png index 66168ce82a..a54fb00bc8 100644 Binary files a/_docs/master/actions/images/example-action.png and b/_docs/master/actions/images/example-action.png differ diff --git a/_docs/master/actions/images/form.png b/_docs/master/actions/images/form.png index 7a327d2b44..5e5cd9e645 100644 Binary files a/_docs/master/actions/images/form.png and b/_docs/master/actions/images/form.png differ diff --git a/_docs/master/actions/images/public-form.png b/_docs/master/actions/images/public-form.png index 08db8ff2c0..7562240224 100644 Binary files a/_docs/master/actions/images/public-form.png and b/_docs/master/actions/images/public-form.png differ diff --git a/_docs/master/actions/images/update-record.png b/_docs/master/actions/images/update-record.png index 6090c4c658..8a3fd3acd2 100644 Binary files a/_docs/master/actions/images/update-record.png and b/_docs/master/actions/images/update-record.png differ diff --git a/_docs/master/api.html b/_docs/master/api.html index c96928f667..5ce4126ead 100644 --- a/_docs/master/api.html +++ b/_docs/master/api.html @@ -89,7 +89,7 @@ }, "components" : { "schemas" : { - "api.tiles.route-params" : { + "api.tiles/route-params" : { "type" : "object", "properties" : { "lat-field" : { @@ -113,1975 +113,905 @@ }, "required" : [ "zoom", "x", "y", "lat-field", "lon-field" ] }, - "metabase-enterprise.metabot-v3.client.schema.message" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "content" : { - "type" : "string" - }, - "navigate-to" : { - "type" : "string" - }, - "role" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.role" - } + "metabase.analyze.fingerprint.schema/Fingerprint" : { + "type" : "object", + "properties" : { + "experimental" : { + "type" : "object", + "properties" : { } }, - "required" : [ "role" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.client.schema.messages" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.message" + "global" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1GlobalFingerprint" + }, + "type" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1TypeSpecificFingerprint" + } } }, - "metabase-enterprise.metabot-v3.client.schema.role" : { - "type" : "string", - "enum" : [ "system", "user", "assistant", "tool" ] - }, - "metabase-enterprise.metabot-v3.context.context" : { + "metabase.analyze.fingerprint.schema/GlobalFingerprint" : { "type" : "object", - "additionalProperties" : { } - }, - "metabase-enterprise.metabot-v3.tools.api.aggregation" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { - "type" : "string" - }, - "function" : { - "type" : "string", - "enum" : [ "avg", "count", "count-distinct", "max", "min", "sum" ] - }, - "sort_order" : { - "type" : "string", - "enum" : [ "asc", "desc" ] - } + "properties" : { + "distinct-count" : { + "type" : "integer" }, - "required" : [ "field_id", "function" ] - }, { - "type" : "object", - "properties" : { } - } ] + "nil%" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.answer-sources-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "with_metric_default_temporal_breakout" : { - "default" : true, - "type" : "boolean" - }, - "with_metric_queryable_dimensions" : { - "default" : true, - "type" : "boolean" - }, - "with_model_fields" : { - "default" : true, - "type" : "boolean" - }, - "with_model_metrics" : { - "default" : true, - "type" : "boolean" - } + "metabase.analyze.fingerprint.schema/NumberFingerprint" : { + "type" : "object", + "properties" : { + "avg" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "min" : { + "type" : "number" + }, + "q1" : { + "type" : "number" + }, + "q3" : { + "type" : "number" + }, + "sd" : { + "type" : "number" } - }, { - "type" : "object", - "properties" : { } - } ] + } }, - "metabase-enterprise.metabot-v3.tools.api.bucket" : { - "type" : "string", - "enum" : [ "millisecond", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "second-of-minute", "minute-of-hour", "hour-of-day", "day-of-week", "day-of-month", "day-of-year", "week-of-year", "month-of-year", "quarter-of-year", "year-of-era" ] + "metabase.analyze.fingerprint.schema/Percent" : { + "type" : "number" }, - "metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "dashboard_id" : { - "type" : "integer" - }, - "email" : { - "type" : "string" - }, - "schedule" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.subscription-schedule" - } + "metabase.analyze.fingerprint.schema/TemporalFingerprint" : { + "type" : "object", + "properties" : { + "earliest" : { + "type" : "string" }, - "required" : [ "dashboard_id", "email", "schedule" ] - }, { - "type" : "object", - "properties" : { } - } ] + "latest" : { + "type" : "string" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-numeric-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "number-equals", "number-not-equals" ] - }, - "values" : { - "type" : "array", - "items" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "number" - } ] - } - } + "metabase.analyze.fingerprint.schema/TextFingerprint" : { + "type" : "object", + "properties" : { + "average-length" : { + "type" : "number" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-string-date-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "string-contains", "string-not-contains", "string-starts-with", "string-ends-with" ] - }, - "values" : { - "type" : "array", - "items" : { - "type" : "string" - } - } + "percent-email" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-extraction-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "year-equals", "year-not-equals", "quarter-equals", "quarter-not-equals", "month-equals", "month-not-equals", "day-of-week-equals", "day-of-week-not-equals", "hour-equals", "hour-not-equals", "minute-equals", "minute-not-equals", "second-equals", "second-not-equals" ] - }, - "values" : { - "type" : "array", - "items" : { - "type" : "integer" - } - } + "percent-json" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "greater-than", "greater-than-or-equal", "less-than", "less-than-or-equal" ] - }, - "values" : { - "type" : "array", - "items" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "integer" - } ] - } - } + "percent-state" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] + "percent-url" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.existence-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "is-null", "is-not-null", "string-is-empty", "string-is-not-empty", "is-true", "is-false" ] - } + "metabase.analyze.fingerprint.schema/TypeSpecificFingerprint" : { + "type" : "object", + "properties" : { + "type/DateTime" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1TemporalFingerprint" }, - "required" : [ "field_id", "operation" ] - }, { - "type" : "object", - "properties" : { } - } ] + "type/Number" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1NumberFingerprint" + }, + "type/Text" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1TextFingerprint" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.field" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { + "metabase.analyze.query-results/MaybeUnnormalizedReference" : { }, + "metabase.analyze.query-results/ResultColumnMetadata" : { + "type" : "object", + "properties" : { + "field_ref" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1MaybeUnnormalizedReference" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Fingerprint" + }, + "base_type" : { + "description" : "value must be a valid field data type (keyword or string)." + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id~1field" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "description" : "value must be a valid field semantic or relation type (keyword or string)." + }, + "display_name" : { + "type" : "string" + }, + "converted_timezone" : { + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal~1timezone-id" + }, + "unit" : { + "description" : "value must be a keyword or string.", + "anyOf" : [ { "type" : "string" - } + }, { + "type" : "string" + } ] }, - "required" : [ "field_id" ] + "description" : { + "type" : "string" + } + }, + "required" : [ "name", "display_name", "base_type" ] + }, + "metabase.analyze.query-results/ResultsMetadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultColumnMetadata" + }, + "description" : "value must be an array of valid results column metadata maps.", + "optional" : true + }, + "metabase.api.cache/cache-strategy" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ee" }, { - "type" : "object", - "properties" : { } + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.oss" } ] }, - "metabase-enterprise.metabot-v3.tools.api.field-values-arguments" : { + "metabase.api.cache/cache-strategy.base" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "nocache", "ttl", "duration", "schedule" ] + } + }, + "required" : [ "type" ] + }, + "metabase.api.cache/cache-strategy.ee" : { + "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", "allOf" : [ { - "type" : "object", - "properties" : { - "entity_id" : { - "type" : "integer" - }, - "entity_type" : { - "type" : "string", - "enum" : [ "table", "model", "metric" ] - }, - "field_id" : { - "type" : "string" - }, - "limit" : { - "type" : "integer" - } - }, - "required" : [ "entity_type", "entity_id", "field_id" ] + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.base" }, { - "type" : "object", - "properties" : { } + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.nocache" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ttl" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ee.duration" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ee.schedule" + } ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.filter" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.existence-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.temporal-extraction-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-extraction-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.temporal-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.string-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-string-date-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.numeric-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-numeric-filter" - } ] + "metabase.api.cache/cache-strategy.ee.duration" : { + "type" : "object", + "properties" : { + "duration" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "refresh_automatically" : { + "type" : "boolean" + }, + "type" : { + "const" : "duration" + }, + "unit" : { + "type" : "string", + "enum" : [ "hours", "minutes", "seconds", "days" ] + } + }, + "required" : [ "type", "duration", "unit" ], + "additionalProperties" : false }, - "metabase-enterprise.metabot-v3.tools.api.filter-records-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "data_source" : { - "allOf" : [ { - "anyOf" : [ { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { - "database" : { - "type" : "integer" - } - }, - "required" : [ "database" ] - }, - "query_id" : { - "type" : "string" - } - }, - "required" : [ "query" ] - }, { - "type" : "object", - "properties" : { - "report_id" : { - "type" : "integer" - } - }, - "required" : [ "report_id" ] - }, { - "type" : "object", - "properties" : { - "table_id" : { - "type" : "string" - } - }, - "required" : [ "table_id" ] - } ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "filters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter" - } - } + "metabase.api.cache/cache-strategy.ee.schedule" : { + "type" : "object", + "properties" : { + "refresh_automatically" : { + "type" : "boolean" }, - "required" : [ "data_source", "filters" ] - }, { - "type" : "object", - "properties" : { } - } ] + "schedule" : { + "$ref" : "#/components/schemas/metabase.util.cron~1CronScheduleString" + }, + "type" : { + "const" : "schedule" + } + }, + "required" : [ "type", "schedule" ], + "additionalProperties" : false + }, + "metabase.api.cache/cache-strategy.nocache" : { + "type" : "object", + "properties" : { + "type" : { + "const" : "nocache" + } + }, + "required" : [ "type" ] }, - "metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" : { + "metabase.api.cache/cache-strategy.oss" : { + "description" : "Schema for a caching strategy (OSS)", "allOf" : [ { - "type" : "object", - "properties" : { - "data_source" : { - "allOf" : [ { - "anyOf" : [ { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { - "database" : { - "type" : "integer" - } - }, - "required" : [ "database" ] - }, - "query_id" : { - "type" : "string" - }, - "result_field_id" : { - "type" : "string" - } - }, - "required" : [ "query", "result_field_id" ] - }, { - "type" : "object", - "properties" : { - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { - "report_id" : { - "type" : "integer" - }, - "result_field_id" : { - "type" : "string" - } - }, - "required" : [ "report_id", "result_field_id" ] - }, { - "type" : "object", - "properties" : { - "result_field_id" : { - "type" : "string" - }, - "table_id" : { - "type" : "string" - } - }, - "required" : [ "table_id", "result_field_id" ] - } ] - }, { - "type" : "object", - "properties" : { } - } ] - } - }, - "required" : [ "data_source" ] + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.base" }, { - "type" : "object", - "properties" : { } + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.nocache" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ttl" + } ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { + "metabase.api.cache/cache-strategy.ttl" : { "type" : "object", "properties" : { - "for" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { - "table_id" : { - "type" : "string" - } - }, - "required" : [ "table_id" ] - }, { - "type" : "object", - "properties" : { - "report_id" : { - "type" : "integer" - } - }, - "required" : [ "report_id" ] - }, { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { } - } - }, - "required" : [ "query" ] - } ] + "min_duration_ms" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "multiplier" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "const" : "ttl" + } + }, + "required" : [ "type", "multiplier", "min_duration_ms" ], + "additionalProperties" : false + }, + "metabase.api.card/card-type" : { + "type" : "string", + "enum" : [ "question", "metric", "model" ] + }, + "metabase.api.logger/log-level" : { + "type" : "string", + "enum" : [ "off", "fatal", "error", "warn", "info", "debug", "trace" ] + }, + "metabase.api.logger/time-unit" : { + "type" : "string", + "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] + }, + "metabase.api.user/user-group-membership" : { + "description" : "Group Membership info of a User.\n In which :is_group_manager is only included if `advanced-permissions` is enabled.", + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "is_group_manager" : { + "description" : "Only relevant if `advanced-permissions` is enabled. If it is, you should always include this key.", + "type" : "boolean" } }, - "required" : [ "for" ] + "required" : [ "id" ] }, - "metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" : { - "allOf" : [ { + "metabase.channel.models.channel/Channel" : { + "description" : "Channel schema.", + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "details" : { + "type" : "object", + "properties" : { } + }, + "name" : { + "type" : "string" + }, + "type" : { + "type" : "string" + } + }, + "required" : [ "name", "type", "details" ] + }, + "metabase.channel.models.channel/ChannelTemplate" : { + "description" : "Channel Template schema.", + "oneOf" : [ { "type" : "object", "properties" : { - "metric_id" : { - "type" : "integer" - }, - "with_default_temporal_breakout" : { - "default" : true, - "type" : "boolean" - }, - "with_field_values" : { - "default" : true, - "type" : "boolean" - }, - "with_queryable_dimensions" : { - "default" : true, - "type" : "boolean" + "channel_type" : { }, + "details" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplateEmailDetails" } }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { } - } ] + "required" : [ "channel_type", "details" ] + }, { } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" : { - "allOf" : [ { + "metabase.channel.models.channel/ChannelTemplateEmailDetails" : { + "oneOf" : [ { "type" : "object", "properties" : { - "report_id" : { - "type" : "integer" + "path" : { + "type" : "string" }, - "with_field_values" : { - "default" : true, - "type" : "boolean" + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] + }, + "subject" : { + "type" : "string" }, - "with_fields" : { - "default" : true, - "type" : "boolean" + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] } }, - "required" : [ "report_id" ] + "required" : [ "type", "subject", "path" ] }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" : { - "allOf" : [ { "type" : "object", "properties" : { - "model_id" : { - "type" : "integer" - }, - "table_id" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "string" - } ] - }, - "with_field_values" : { - "default" : true, - "type" : "boolean" + "body" : { + "type" : "string" }, - "with_fields" : { - "default" : true, - "type" : "boolean" + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] }, - "with_metric_default_temporal_breakout" : { - "default" : true, - "type" : "boolean" + "subject" : { + "type" : "string" }, - "with_metrics" : { - "default" : true, - "type" : "boolean" - } - } - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.group-by" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_granularity" : { - "type" : "string", - "enum" : [ "day", "week", "month", "quarter", "year" ] - }, - "field_id" : { - "type" : "string" + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] } }, - "required" : [ "field_id" ] - }, { - "type" : "object", - "properties" : { } + "required" : [ "type", "subject", "body" ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.numeric-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "greater-than", "greater-than-or-equal", "less-than", "less-than-or-equal", "number-equals", "number-not-equals", "number-greater-than", "number-greater-than-or-equal", "number-less-than", "number-less-than-or-equal" ] - }, - "value" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "number" - } ] - } - }, - "required" : [ "field_id", "operation", "value" ] - }, { - "type" : "object", - "properties" : { } - } ] + "metabase.lib.schema.common/non-blank-string" : { + "type" : "string", + "minLength" : 1 }, - "metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" : { + "metabase.lib.schema.expression.temporal/timezone-id" : { "allOf" : [ { - "type" : "object", - "properties" : { - "filters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter" - } - }, - "group_by" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.group-by" - } - }, - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, { - "type" : "object", - "properties" : { } + "anyOf" : [ { + "type" : "string", + "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal~1string.zone-offset" + } ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.query-model-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "aggregations" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.aggregation" - } - }, - "fields" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field" - } - }, - "filters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter" - } - }, - "group_by" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.group-by" - } - }, - "limit" : { - "type" : "integer" - }, - "model_id" : { - "type" : "integer" - }, - "order_by" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "direction" : { - "type" : "string", - "enum" : [ "asc", "desc" ] - }, - "field" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field" - } - }, - "required" : [ "field", "direction" ] - } - } - }, - "required" : [ "model_id" ] - }, { - "type" : "object", - "properties" : { } - } ] + "metabase.lib.schema.id/field" : { + "type" : "integer", + "minimum" : 1 }, - "metabase-enterprise.metabot-v3.tools.api.string-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "string-equals", "string-not-equals", "string-contains", "string-not-contains", "string-starts-with", "string-ends-with" ] - }, - "value" : { - "type" : "string" - } - }, - "required" : [ "field_id", "operation", "value" ] + "metabase.lib.schema.literal/string.datetime" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" }, { - "type" : "object", - "properties" : { } + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" } ] }, - "metabase-enterprise.metabot-v3.tools.api.subscription-schedule" : { - "allOf" : [ { - "anyOf" : [ { + "metabase.lib.schema.literal/string.zone-offset" : { + "type" : "string", + "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" + }, + "metabase.lib.schema.metadata/column.has-field-values" : { + "type" : "string", + "enum" : [ "auto-list", "list", "none", "search" ] + }, + "metabase.lib.schema.temporal-bucketing/unit" : { + "type" : "string", + "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] + }, + "metabase.notification.models/FullyHydratedNotification" : { + "description" : "Fully hydrated notification.", + "oneOf" : [ { + "oneOf" : [ { "type" : "object", "properties" : { - "frequency" : { - "const" : "hourly" + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationCard" + }, + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationSubscription" + } } }, - "required" : [ "frequency" ] - }, { + "required" : [ "payload_type", "payload" ] + }, { } ] + }, { + "oneOf" : [ { "type" : "object", "properties" : { - "frequency" : { - "const" : "daily" + "creator" : { + "type" : "object", + "properties" : { } }, - "hour" : { + "creator_id" : { "type" : "integer" - } - }, - "required" : [ "frequency", "hour" ] - }, { - "type" : "object", - "properties" : { - "day_of_week" : { - "type" : "string", - "enum" : [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ] }, - "frequency" : { - "const" : "weekly" + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationCard" }, - "hour" : { + "payload_id" : { "type" : "integer" - } - }, - "required" : [ "frequency", "hour", "day_of_week" ] - }, { - "type" : "object", - "properties" : { - "day_of_month" : { - "type" : "string", - "enum" : [ "first-calendar-day", "middle-of-month", "last-calendar-day", "first-sunday", "first-monday", "first-tuesday", "first-wednesday", "first-thursday", "first-friday", "first-saturday", "last-sunday", "last-monday", "last-tuesday", "last-wednesday", "last-thursday", "last-friday", "last-saturday" ] }, - "frequency" : { - "const" : "monthly" + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] }, - "hour" : { - "type" : "integer" + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationSubscription" + } } }, - "required" : [ "frequency", "hour", "day_of_month" ] - } ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.temporal-extraction-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "year-equals", "year-not-equals", "quarter-equals", "quarter-not-equals", "month-equals", "month-not-equals", "day-of-week-equals", "day-of-week-not-equals", "hour-equals", "hour-not-equals", "minute-equals", "minute-not-equals", "second-equals", "second-not-equals" ] - }, - "value" : { - "type" : "integer" - } - }, - "required" : [ "field_id", "operation", "value" ] + "required" : [ "payload_type", "payload" ] + }, { } ] }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.temporal-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "greater-than", "greater-than-or-equal", "less-than", "less-than-or-equal", "date-equals", "date-not-equals", "date-before", "date-on-or-before", "date-after", "date-on-or-after" ] - }, - "value" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "integer" - } ] + "oneOf" : [ { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationCard" + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationSubscription" + } + } + }, + "required" : [ "payload" ] + }, { } ] + } ] + }, + "metabase.notification.models/Notification" : { + "oneOf" : [ { + "type" : "object", + "properties" : { + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] } }, - "required" : [ "field_id", "operation", "value" ] + "required" : [ "payload_type" ] }, { "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.tool-request" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] + "properties" : { + "creator_id" : { + "type" : "integer" + }, + "payload_id" : { + "type" : "integer" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + } + }, + "required" : [ "payload_type" ] + }, { } ] }, - "metabase.analyze.fingerprint.schema.Fingerprint" : { + "metabase.notification.models/NotificationCard" : { + "description" : "Schema for :model/NotificationCard.", "type" : "object", "properties" : { - "experimental" : { + "card" : { "type" : "object", "properties" : { } }, - "global" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.GlobalFingerprint" + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "type" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" - } - } - }, - "metabase.analyze.fingerprint.schema.GlobalFingerprint" : { - "type" : "object", - "properties" : { - "distinct-count" : { - "type" : "integer" + "send_condition" : { + "type" : "string", + "enum" : [ "goal_below", "has_result", "goal_above" ] }, - "nil%" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + "send_once" : { + "type" : "boolean" } - } + }, + "required" : [ "card_id" ] }, - "metabase.analyze.fingerprint.schema.NumberFingerprint" : { + "metabase.notification.models/NotificationHandler" : { "type" : "object", "properties" : { - "avg" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "min" : { - "type" : "number" + "active" : { + "type" : "boolean" }, - "q1" : { - "type" : "number" + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "q3" : { - "type" : "number" + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "sd" : { - "type" : "number" + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } - } - }, - "metabase.analyze.fingerprint.schema.Percent" : { - "type" : "number" + }, + "required" : [ "channel_type" ] }, - "metabase.analyze.fingerprint.schema.TemporalFingerprint" : { - "type" : "object", - "properties" : { - "earliest" : { - "type" : "string" + "metabase.notification.models/NotificationRecipient" : { + "description" : "Schema for :model/NotificationRecipient.", + "oneOf" : [ { + "type" : "object", + "properties" : { + "details" : { }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } }, - "latest" : { - "type" : "string" - } - } - }, - "metabase.analyze.fingerprint.schema.TextFingerprint" : { - "type" : "object", - "properties" : { - "average-length" : { - "type" : "number" + "required" : [ "type", "user_id" ] + }, { + "type" : "object", + "properties" : { + "details" : { }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { } }, - "percent-email" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + "required" : [ "type", "permissions_group_id" ] + }, { + "type" : "object", + "properties" : { + "details" : { + "type" : "object", + "properties" : { + "value" : { } + }, + "required" : [ "value" ], + "additionalProperties" : false + }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { } }, - "percent-json" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + "required" : [ "type", "details" ] + }, { + "type" : "object", + "properties" : { + "details" : { + "type" : "object", + "properties" : { + "is_optional" : { + "type" : "boolean" + }, + "pattern" : { + "type" : "string" + } + }, + "required" : [ "pattern" ], + "additionalProperties" : false + }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { } }, - "percent-state" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-url" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - } - } - }, - "metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" : { - "type" : "object", - "properties" : { - "type/DateTime" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TemporalFingerprint" - }, - "type/Number" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.NumberFingerprint" - }, - "type/Text" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TextFingerprint" - } - } - }, - "metabase.analyze.query-results.MaybeUnnormalizedReference" : { }, - "metabase.analyze.query-results.ResultColumnMetadata" : { - "type" : "object", - "properties" : { - "field_ref" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.MaybeUnnormalizedReference" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Fingerprint" - }, - "base_type" : { - "description" : "value must be a valid field data type (keyword or string)." - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "description" : "value must be a valid field semantic or relation type (keyword or string)." - }, - "display_name" : { - "type" : "string" - }, - "converted_timezone" : { - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - }, - "unit" : { - "description" : "value must be a keyword or string.", - "anyOf" : [ { - "type" : "string" - }, { - "type" : "string" - } ] - }, - "description" : { - "type" : "string" - } - }, - "required" : [ "name", "display_name", "base_type" ] - }, - "metabase.analyze.query-results.ResultsMetadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultColumnMetadata" - }, - "description" : "value must be an array of valid results column metadata maps.", - "optional" : true - }, - "metabase.cache.api..cache-strategy.base" : { - "type" : "object", - "properties" : { - "type" : { - "type" : "string", - "enum" : [ "nocache", "ttl", "duration", "schedule" ] - } - }, - "required" : [ "type" ] - }, - "metabase.cache.api..cache-strategy.ee" : { - "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.duration" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.schedule" - } ] - } ] - }, - "metabase.cache.api..cache-strategy.ee.duration" : { - "type" : "object", - "properties" : { - "duration" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "refresh_automatically" : { - "type" : "boolean" - }, - "type" : { - "const" : "duration" - }, - "unit" : { - "type" : "string", - "enum" : [ "hours", "minutes", "seconds", "days" ] - } - }, - "required" : [ "type", "duration", "unit" ], - "additionalProperties" : false - }, - "metabase.cache.api..cache-strategy.ee.schedule" : { - "type" : "object", - "properties" : { - "refresh_automatically" : { - "type" : "boolean" - }, - "schedule" : { - "$ref" : "#/components/schemas/metabase.util.cron.CronScheduleString" - }, - "type" : { - "const" : "schedule" - } - }, - "required" : [ "type", "schedule" ], - "additionalProperties" : false - }, - "metabase.cache.api..cache-strategy.nocache" : { - "type" : "object", - "properties" : { - "type" : { - "const" : "nocache" - } - }, - "required" : [ "type" ] - }, - "metabase.cache.api..cache-strategy.oss" : { - "description" : "Schema for a caching strategy (OSS)", - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" - } ] - } ] - }, - "metabase.cache.api..cache-strategy.ttl" : { - "type" : "object", - "properties" : { - "min_duration_ms" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "multiplier" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "const" : "ttl" - } - }, - "required" : [ "type", "multiplier", "min_duration_ms" ], - "additionalProperties" : false - }, - "metabase.cache.api.cache-strategy" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.oss" + "required" : [ "type", "details" ] } ] }, - "metabase.channel.models.channel.Channel" : { - "description" : "Channel schema.", - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "description" : { - "type" : "string" - }, - "details" : { - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string" - }, - "type" : { - "type" : "string" - } - }, - "required" : [ "name", "type", "details" ] - }, - "metabase.channel.models.channel.ChannelTemplate" : { - "description" : "Channel Template schema.", - "oneOf" : [ { - "type" : "object", - "properties" : { - "channel_type" : { }, - "details" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplateEmailDetails" - } - }, - "required" : [ "channel_type", "details" ] - }, { } ] - }, - "metabase.channel.models.channel.ChannelTemplateEmailDetails" : { + "metabase.notification.models/NotificationSubscription" : { + "description" : "Schema for :model/NotificationSubscription.", "oneOf" : [ { "type" : "object", "properties" : { - "path" : { - "type" : "string" - }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] + "cron_schedule" : { + "type" : "null" }, - "subject" : { - "type" : "string" + "event_name" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "string" + } ] }, "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + "type" : "string", + "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] } }, - "required" : [ "type", "subject", "path" ] + "required" : [ "type", "event_name" ] }, { "type" : "object", "properties" : { - "body" : { + "cron_schedule" : { "type" : "string" }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] - }, - "subject" : { - "type" : "string" + "event_name" : { + "type" : "null" }, "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + "type" : "string", + "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] + }, + "ui_display_type" : { + "type" : "string", + "enum" : [ "cron/raw", "cron/builder" ] } }, - "required" : [ "type", "subject", "body" ] + "required" : [ "type", "cron_schedule" ] } ] }, - "metabase.lib.schema.common.non-blank-string" : { - "type" : "string", - "minLength" : 1 + "metabase.sync.schedules/ExpandedSchedulesMap" : { + "description" : "value must be a valid map of schedule maps for a DB.", + "type" : "object", + "properties" : { + "cache_field_values" : { + "$ref" : "#/components/schemas/metabase.util.cron~1ScheduleMap" + }, + "metadata_sync" : { + "$ref" : "#/components/schemas/metabase.util.cron~1ScheduleMap" + } + } }, - "metabase.lib.schema.expression.temporal.timezone-id" : { - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, { - "anyOf" : [ { - "type" : "string", - "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" - } ] - } ] + "metabase.timeline.api.timeline/include" : { + "type" : "string", + "enum" : [ "events" ] }, - "metabase.lib.schema.id.card" : { + "metabase.util.cron/CronHour" : { "type" : "integer", - "minimum" : 1 + "minimum" : 0, + "maximum" : 23 }, - "metabase.lib.schema.id.field" : { + "metabase.util.cron/CronMinute" : { "type" : "integer", - "minimum" : 1 + "minimum" : 0, + "maximum" : 59 }, - "metabase.lib.schema.literal..string.datetime" : { - "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" - }, { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" - } ] + "metabase.util.cron/CronScheduleString" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "metabase.lib.schema.literal..string.zone-offset" : { - "type" : "string", - "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" - }, - "metabase.lib.schema.metadata..column.has-field-values" : { - "type" : "string", - "enum" : [ "auto-list", "list", "none", "search" ] - }, - "metabase.lib.schema.temporal-bucketing.unit" : { - "type" : "string", - "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] - }, - "metabase.logger.api.time-unit" : { - "type" : "string", - "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] - }, - "metabase.notification.models.FullyHydratedNotification" : { - "description" : "Fully hydrated notification.", - "oneOf" : [ { - "oneOf" : [ { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "payload_id" : { - "type" : "null" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type", "payload" ] - }, { } ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "creator_id" : { - "type" : "integer" - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type", "payload" ] - }, { } ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload" ] - }, { } ] - } ] - }, - "metabase.notification.models.Notification" : { - "oneOf" : [ { - "type" : "object", - "properties" : { - "payload_id" : { - "type" : "null" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - } - }, - "required" : [ "payload_type" ] - }, { - "type" : "object", - "properties" : { - "creator_id" : { - "type" : "integer" - }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - } - }, - "required" : [ "payload_type" ] - }, { } ] - }, - "metabase.notification.models.NotificationCard" : { - "description" : "Schema for :model/NotificationCard.", - "type" : "object", - "properties" : { - "card" : { - "type" : "object", - "properties" : { } - }, - "card_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "send_condition" : { - "type" : "string", - "enum" : [ "goal_below", "has_result", "goal_above" ] - }, - "send_once" : { - "type" : "boolean" - } - }, - "required" : [ "card_id" ] - }, - "metabase.notification.models.NotificationHandler" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - }, - "metabase.notification.models.NotificationRecipient" : { - "description" : "Schema for :model/NotificationRecipient.", - "oneOf" : [ { - "type" : "object", - "properties" : { - "details" : { }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "type", "user_id" ] - }, { - "type" : "object", - "properties" : { - "details" : { }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { } - }, - "required" : [ "type", "permissions_group_id" ] - }, { - "type" : "object", - "properties" : { - "details" : { - "type" : "object", - "properties" : { - "value" : { } - }, - "required" : [ "value" ], - "additionalProperties" : false - }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { } - }, - "required" : [ "type", "details" ] - }, { - "type" : "object", - "properties" : { - "details" : { - "type" : "object", - "properties" : { - "is_optional" : { - "type" : "boolean" - }, - "pattern" : { - "type" : "string" - } - }, - "required" : [ "pattern" ], - "additionalProperties" : false - }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { } - }, - "required" : [ "type", "details" ] - } ] - }, - "metabase.notification.models.NotificationSubscription" : { - "description" : "Schema for :model/NotificationSubscription.", - "oneOf" : [ { - "type" : "object", - "properties" : { - "cron_schedule" : { - "type" : "null" - }, - "event_name" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "string" - } ] - }, - "type" : { - "type" : "string", - "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] - } - }, - "required" : [ "type", "event_name" ] - }, { - "type" : "object", - "properties" : { - "cron_schedule" : { - "type" : "string" - }, - "event_name" : { - "type" : "null" - }, - "type" : { - "type" : "string", - "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] - }, - "ui_display_type" : { - "type" : "string", - "enum" : [ "cron/raw", "cron/builder" ] - } - }, - "required" : [ "type", "cron_schedule" ] - } ] - }, - "metabase.parameters.schema.keyword-or-non-blank-string" : { - "type" : "string", - "minLength" : 1 - }, - "metabase.parameters.schema.legacy-field-or-expression-reference" : { - "description" : "Schema for a valid legacy `:field` or `:expression` reference (possibly not yet normalized)." - }, - "metabase.parameters.schema.parameter" : { - "description" : "parameter must be a map with :id and :type keys", - "type" : "object", - "properties" : { - "mappings" : { }, - "sectionId" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "values_source_config" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.values-source-config" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "type" : "string" - }, - "slug" : { - "type" : "string" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.keyword-or-non-blank-string" - }, - "temporal_units" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - } - }, - "values_source_type" : { - "enum" : [ "static-list", "card", null ] - }, - "default" : { } - }, - "required" : [ "id", "type" ] - }, - "metabase.parameters.schema.parameter-mapping" : { - "description" : "parameter_mapping must be a map with :parameter_id and :target keys", - "type" : "object", - "properties" : { - "card_id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "parameter_id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "target" : { } - }, - "required" : [ "parameter_id", "target" ] - }, - "metabase.parameters.schema.values-source-config" : { - "description" : "Schema for valid source_options within a Parameter", - "type" : "object", - "properties" : { - "card_id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "label_field" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.legacy-field-or-expression-reference" - }, - "value_field" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.legacy-field-or-expression-reference" - }, - "values" : { } - } - }, - "metabase.queries.schema.card-type" : { - "type" : "string", - "enum" : [ "question", "metric", "model" ] - }, - "metabase.query-processor.schema.export-format" : { - "description" : "Schema for valid export formats for downloading query results.", - "type" : "string", - "enum" : [ "csv", "api", "xlsx", "json" ] - }, - "metabase.sync.schedules.ExpandedSchedulesMap" : { - "description" : "value must be a valid map of schedule maps for a DB.", - "type" : "object", - "properties" : { - "cache_field_values" : { - "$ref" : "#/components/schemas/metabase.util.cron.ScheduleMap" - }, - "metadata_sync" : { - "$ref" : "#/components/schemas/metabase.util.cron.ScheduleMap" - } - } - }, - "metabase.timeline.api.timeline.include" : { - "type" : "string", - "enum" : [ "events" ] - }, - "metabase.users.api.user-group-membership" : { - "description" : "Group Membership info of a User.\n In which :is_group_manager is only included if `advanced-permissions` is enabled.", - "type" : "object", - "properties" : { - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "is_group_manager" : { - "description" : "Only relevant if `advanced-permissions` is enabled. If it is, you should always include this key.", - "type" : "boolean" - } - }, - "required" : [ "id" ] - }, - "metabase.util.cron.CronHour" : { - "type" : "integer", - "minimum" : 0, - "maximum" : 23 - }, - "metabase.util.cron.CronMinute" : { - "type" : "integer", - "minimum" : 0, - "maximum" : 59 - }, - "metabase.util.cron.CronScheduleString" : { - "description" : "value must be a valid Quartz cron schedule string.", - "type" : "string", - "minLength" : 1 - }, - "metabase.util.cron.ScheduleMap" : { + "metabase.util.cron/ScheduleMap" : { "description" : "value must be a valid schedule map. See schema in metabase.util.cron for details.", "type" : "object", - "properties" : { - "schedule_day" : { - "type" : "string", - "enum" : [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ] - }, - "schedule_frame" : { - "type" : "string", - "enum" : [ "first", "mid", "last" ] - }, - "schedule_hour" : { - "$ref" : "#/components/schemas/metabase.util.cron.CronHour" - }, - "schedule_minute" : { - "$ref" : "#/components/schemas/metabase.util.cron.CronMinute" - }, - "schedule_type" : { - "type" : "string", - "enum" : [ "hourly", "daily", "weekly", "monthly" ] - } - }, - "required" : [ "schedule_type" ] - } - } - }, - "paths" : { - "/api/action/" : { - "get" : { - "summary" : "GET /api/action/", - "description" : "Returns actions that can be used for QueryActions. By default lists all viewable actions. Pass optional\n `?model-id=` to limit to actions on a particular model.", - "parameters" : [ { - "in" : "query", - "name" : "model-id", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - }, - "post" : { - "summary" : "POST /api/action/", - "description" : "Create a new action.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "visualization_settings" : { - "type" : "object" - }, - "response_handle" : { - "allOf" : [ { - "type" : "string" - }, { - "description" : "must be a valid json-query, something like '.item.title'" - } ] - }, - "dataset_query" : { - "type" : "object" - }, - "parameter_mappings" : { - "type" : "object" - }, - "name" : { - "type" : "string" - }, - "database_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "kind" : { - "description" : "Unsupported implicit action kind", - "type" : "string", - "enum" : [ "row/create", "row/update", "row/delete", "bulk/create", "bulk/update", "bulk/delete" ] - }, - "type" : { - "description" : "Unsupported action type", - "type" : "string", - "enum" : [ "http", "query", "implicit" ] - }, - "template" : { - "type" : "object", - "properties" : { - "body" : { - "type" : "string" - }, - "headers" : { - "type" : "string" - }, - "method" : { - "type" : "string", - "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] - }, - "parameter_mappings" : { - "type" : "object" - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "url" : { - "type" : "string" - } - }, - "required" : [ "method", "url" ], - "additionalProperties" : false - }, - "error_handle" : { - "allOf" : [ { - "type" : "string" - }, { - "description" : "must be a valid json-query, something like '.item.title'" - } ] - }, - "model_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "description" : { - "type" : "string" - } - }, - "required" : [ "name", "model_id" ] - } - } - } - }, - "tags" : [ "/api/action" ] - } - }, - "/api/action/public" : { - "get" : { - "summary" : "GET /api/action/public", - "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", - "parameters" : [ ], - "tags" : [ "/api/action" ] - } - }, - "/api/action/{action-id}" : { - "get" : { - "summary" : "GET /api/action/{action-id}", - "description" : "Fetch an Action.", - "parameters" : [ { - "in" : "path", - "name" : "action-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - }, - "delete" : { - "summary" : "DELETE /api/action/{action-id}", - "description" : "Delete an Action.", - "parameters" : [ { - "in" : "path", - "name" : "action-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "properties" : { + "schedule_day" : { + "type" : "string", + "enum" : [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ] }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - } - }, - "/api/action/{action-id}/execute" : { - "get" : { - "summary" : "GET /api/action/{action-id}/execute", - "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", - "parameters" : [ { - "in" : "path", - "name" : "action-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "schedule_frame" : { + "type" : "string", + "enum" : [ "first", "mid", "last" ] }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "parameters", - "required" : true, - "schema" : { - "type" : "string" + "schedule_hour" : { + "$ref" : "#/components/schemas/metabase.util.cron~1CronHour" }, - "description" : "value must be a valid JSON string." - } ], - "tags" : [ "/api/action" ] + "schedule_minute" : { + "$ref" : "#/components/schemas/metabase.util.cron~1CronMinute" + }, + "schedule_type" : { + "type" : "string", + "enum" : [ "hourly", "daily", "weekly", "monthly" ] + } + }, + "required" : [ "schedule_type" ] } - }, - "/api/action/{id}" : { - "put" : { - "summary" : "PUT /api/action/{id}", - "description" : "Update an Action.", + } + }, + "paths" : { + "/api/action/" : { + "get" : { + "summary" : "GET /api/action/", + "description" : "Returns actions that can be used for QueryActions. By default lists all viewable actions. Pass optional\n `?model-id=` to limit to actions on a particular model.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "model-id", + "required" : false, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], + "tags" : [ "/api/action" ] + }, + "post" : { + "summary" : "POST /api/action/", + "description" : "Create a new action.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { @@ -2089,8 +1019,7 @@ "type" : "object", "properties" : { "visualization_settings" : { - "type" : "object", - "properties" : { } + "type" : "object" }, "response_handle" : { "allOf" : [ { @@ -2100,19 +1029,14 @@ } ] }, "dataset_query" : { - "type" : "object", - "properties" : { } + "type" : "object" }, "parameter_mappings" : { - "type" : "object", - "properties" : { } + "type" : "object" }, "name" : { "type" : "string" }, - "archived" : { - "type" : "boolean" - }, "database_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", @@ -2137,235 +1061,86 @@ "headers" : { "type" : "string" }, - "method" : { - "type" : "string", - "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] - }, - "parameter_mappings" : { - "type" : "object" - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "url" : { - "type" : "string" - } - }, - "required" : [ "method", "url" ], - "additionalProperties" : false - }, - "error_handle" : { - "allOf" : [ { - "type" : "string" - }, { - "description" : "must be a valid json-query, something like '.item.title'" - } ] - }, - "model_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { } - } - }, - "description" : { - "type" : "string" - } - } - } - } - } - }, - "tags" : [ "/api/action" ] - } - }, - "/api/action/{id}/execute" : { - "post" : { - "summary" : "POST /api/action/{id}/execute", - "description" : "Execute the Action.\n\n `parameters` should be the mapped dashboard parameters with values.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "parameters" : { - "type" : "object", - "additionalProperties" : { } - } - }, - "optional" : true - } - } - } - }, - "tags" : [ "/api/action" ] - } - }, - "/api/action/{id}/public_link" : { - "post" : { - "summary" : "POST /api/action/{id}/public_link", - "description" : "Generate publicly-accessible links for this Action. Returns UUID to be used in public links. (If this\n Action has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - }, - "delete" : { - "summary" : "DELETE /api/action/{id}/public_link", - "description" : "Delete the publicly-accessible link to this Dashboard.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - } - }, - "/api/activity/most_recently_viewed_dashboard" : { - "get" : { - "summary" : "GET /api/activity/most_recently_viewed_dashboard", - "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", - "parameters" : [ ], - "tags" : [ "/api/activity" ] - } - }, - "/api/activity/popular_items" : { - "get" : { - "summary" : "GET /api/activity/popular_items", - "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", - "parameters" : [ ], - "tags" : [ "/api/activity" ] - } - }, - "/api/activity/recent_views" : { - "get" : { - "summary" : "GET /api/activity/recent_views", - "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", - "parameters" : [ ], - "tags" : [ "/api/activity" ] - } - }, - "/api/activity/recents" : { - "get" : { - "summary" : "GET /api/activity/recents", - "description" : "Get a list of recent items the current user has been viewing most recently under the `:recents` key.\n Allows for filtering by context: views or selections", - "parameters" : [ { - "in" : "query", - "name" : "context", - "required" : true, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "selections", "views" ] - } - } - }, { - "in" : "query", - "name" : "include_metadata", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - } ], - "tags" : [ "/api/activity" ] - }, - "post" : { - "summary" : "POST /api/activity/recents", - "description" : "Adds a model to the list of recently selected items.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "context" : { - "type" : "string", - "enum" : [ "selection" ] + "method" : { + "type" : "string", + "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] + }, + "parameter_mappings" : { + "type" : "object" + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "url" : { + "type" : "string" + } + }, + "required" : [ "method", "url" ], + "additionalProperties" : false }, - "model" : { - "type" : "string", - "enum" : [ "card", "dataset", "metric", "dashboard", "table", "collection" ] + "error_handle" : { + "allOf" : [ { + "type" : "string" + }, { + "description" : "must be a valid json-query, something like '.item.title'" + } ] }, "model_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "description" : { + "type" : "string" } }, - "required" : [ "model", "model_id", "context" ] + "required" : [ "name", "model_id" ] } } } }, - "tags" : [ "/api/activity" ] + "tags" : [ "/api/action" ] } }, - "/api/alert/" : { + "/api/action/public" : { "get" : { - "summary" : "GET /api/alert/", - "description" : "Fetch alerts which the current user has created or will receive, or all alerts if the user is an admin.\n The optional `user_id` will return alerts created by the corresponding user, but is ignored for non-admin users.", + "summary" : "GET /api/action/public", + "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", + "parameters" : [ ], + "tags" : [ "/api/action" ] + } + }, + "/api/action/{action-id}" : { + "get" : { + "summary" : "GET /api/action/{action-id}", + "description" : "Fetch an Action.", "parameters" : [ { - "in" : "query", - "name" : "archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "user_id", - "required" : false, + "in" : "path", + "name" : "action-id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/alert" ] - } - }, - "/api/alert/{id}" : { - "get" : { - "summary" : "GET /api/alert/{id}", - "description" : "Fetch an alert by ID", + "tags" : [ "/api/action" ] + }, + "delete" : { + "summary" : "DELETE /api/action/{action-id}", + "description" : "Delete an Action.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "action-id", "required" : true, "schema" : { "type" : "integer", @@ -2373,81 +1148,38 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/alert" ] + "tags" : [ "/api/action" ] } }, - "/api/alert/{id}/subscription" : { - "delete" : { - "summary" : "DELETE /api/alert/{id}/subscription", - "description" : "For users to unsubscribe themselves from the given alert.", + "/api/action/{action-id}/execute" : { + "get" : { + "summary" : "GET /api/action/{action-id}/execute", + "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "action-id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "parameters", + "required" : true, + "schema" : { + "type" : "string" + }, + "description" : "value must be a valid JSON string." } ], - "tags" : [ "/api/alert" ] - } - }, - "/api/analytics/anonymous-stats" : { - "get" : { - "summary" : "GET /api/analytics/anonymous-stats", - "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", - "parameters" : [ ], - "tags" : [ "/api/analytics" ] - } - }, - "/api/api-key/" : { - "post" : { - "summary" : "POST /api/api-key/", - "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "group_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "group_id", "name" ] - } - } - } - }, - "tags" : [ "/api/api-key" ] - }, - "get" : { - "summary" : "GET /api/api-key/", - "description" : "Get a list of API keys with the default scope. Non-paginated.", - "parameters" : [ ], - "tags" : [ "/api/api-key" ] - } - }, - "/api/api-key/count" : { - "get" : { - "summary" : "GET /api/api-key/count", - "description" : "Get the count of API keys in the DB with the default scope.", - "parameters" : [ ], - "tags" : [ "/api/api-key" ] + "tags" : [ "/api/action" ] } }, - "/api/api-key/{id}" : { + "/api/action/{id}" : { "put" : { - "summary" : "PUT /api/api-key/{id}", - "description" : "Update an API key by changing its group and/or its name", + "summary" : "PUT /api/action/{id}", + "description" : "Update an Action.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2464,25 +1196,109 @@ "schema" : { "type" : "object", "properties" : { - "group_id" : { + "visualization_settings" : { + "type" : "object", + "properties" : { } + }, + "response_handle" : { + "allOf" : [ { + "type" : "string" + }, { + "description" : "must be a valid json-query, something like '.item.title'" + } ] + }, + "dataset_query" : { + "type" : "object", + "properties" : { } + }, + "parameter_mappings" : { + "type" : "object", + "properties" : { } + }, + "name" : { + "type" : "string" + }, + "archived" : { + "type" : "boolean" + }, + "database_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, - "name" : { + "kind" : { + "description" : "Unsupported implicit action kind", + "type" : "string", + "enum" : [ "row/create", "row/update", "row/delete", "bulk/create", "bulk/update", "bulk/delete" ] + }, + "type" : { + "description" : "Unsupported action type", "type" : "string", - "minLength" : 1 + "enum" : [ "http", "query", "implicit" ] + }, + "template" : { + "type" : "object", + "properties" : { + "body" : { + "type" : "string" + }, + "headers" : { + "type" : "string" + }, + "method" : { + "type" : "string", + "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] + }, + "parameter_mappings" : { + "type" : "object" + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "url" : { + "type" : "string" + } + }, + "required" : [ "method", "url" ], + "additionalProperties" : false + }, + "error_handle" : { + "allOf" : [ { + "type" : "string" + }, { + "description" : "must be a valid json-query, something like '.item.title'" + } ] + }, + "model_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { } + } + }, + "description" : { + "type" : "string" } } } } } }, - "tags" : [ "/api/api-key" ] - }, - "delete" : { - "summary" : "DELETE /api/api-key/{id}", - "description" : "Delete an ApiKey", + "tags" : [ "/api/action" ] + } + }, + "/api/action/{id}/execute" : { + "post" : { + "summary" : "POST /api/action/{id}/execute", + "description" : "Execute the Action.\n\n `parameters` should be the mapped dashboard parameters with values.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2493,13 +1309,29 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/api-key" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "parameters" : { + "type" : "object", + "additionalProperties" : { } + } + }, + "optional" : true + } + } + } + }, + "tags" : [ "/api/action" ] } }, - "/api/api-key/{id}/regenerate" : { - "put" : { - "summary" : "PUT /api/api-key/{id}/regenerate", - "description" : "Regenerate an API Key", + "/api/action/{id}/public_link" : { + "post" : { + "summary" : "POST /api/action/{id}/public_link", + "description" : "Generate publicly-accessible links for this Action. Returns UUID to be used in public links. (If this\n Action has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2510,13 +1342,11 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/api-key" ] - } - }, - "/api/automagic-dashboards/database/{id}/candidates" : { - "get" : { - "summary" : "GET /api/automagic-dashboards/database/{id}/candidates", - "description" : "Return a list of candidates for automagic dashboards ordered by interestingness.", + "tags" : [ "/api/action" ] + }, + "delete" : { + "summary" : "DELETE /api/action/{id}/public_link", + "description" : "Delete the publicly-accessible link to this Dashboard.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2527,427 +1357,347 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/automagic-dashboards" ] + "tags" : [ "/api/action" ] } }, - "/api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}" : { + "/api/activity/most_recently_viewed_dashboard" : { "get" : { - "summary" : "GET /api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}", - "description" : "Return an automagic dashboard for an entity detail specified by `entity`\n with id `id` and a primary key of `indexed-value`.", - "parameters" : [ { - "in" : "path", - "name" : "model-index-id", - "required" : true, - "schema" : { - "type" : "integer" - } - }, { - "in" : "path", - "name" : "pk-id", - "required" : true, - "schema" : { - "type" : "integer" - } - } ], - "tags" : [ "/api/automagic-dashboards" ] + "summary" : "GET /api/activity/most_recently_viewed_dashboard", + "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", + "parameters" : [ ], + "tags" : [ "/api/activity" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}" : { + "/api/activity/popular_items" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}", - "description" : "Return an automagic dashboard for entity `entity` with id `id`.", - "parameters" : [ { - "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "const" : "all" - }, { - "type" : "integer", - "minimum" : 0 - } ] - } - } ], - "tags" : [ "/api/automagic-dashboards" ] + "summary" : "GET /api/activity/popular_items", + "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", + "parameters" : [ ], + "tags" : [ "/api/activity" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}" : { + "/api/activity/recent_views" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}", - "description" : "Return an automagic dashboard analyzing cell in automagic dashboard for entity `entity` defined by query\n `cell-query`.", - "parameters" : [ { - "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" - }, { - "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] - }, - "description" : "invalid show value" - } ], - "tags" : [ "/api/automagic-dashboards" ] + "summary" : "GET /api/activity/recent_views", + "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", + "parameters" : [ ], + "tags" : [ "/api/activity" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/activity/recents" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query`; compared with entity `comparison-entity` with id\n `comparison-entity-id-or-query.`.", + "summary" : "GET /api/activity/recents", + "description" : "Get a list of recent items the current user has been viewing most recently under the `:recents` key.\n Allows for filtering by context: views or selections", "parameters" : [ { - "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" - }, { - "in" : "path", - "name" : "comparison-entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] - }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" - }, { "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] - }, - "description" : "invalid show value" - } ], - "tags" : [ "/api/automagic-dashboards" ] - } - }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}" : { - "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}", - "description" : "Return an automagic dashboard analyzing cell in question with id `id` defined by query `cell-query` using\n dashboard-template `dashboard-template`.", - "parameters" : [ { - "in" : "path", - "name" : "entity", + "name" : "context", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "selections", "views" ] + } } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 + } ], + "tags" : [ "/api/activity" ] + }, + "post" : { + "summary" : "POST /api/activity/recents", + "description" : "Adds a model to the list of recently selected items.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "context" : { + "type" : "string", + "enum" : [ "selection" ] + }, + "model" : { + "type" : "string", + "enum" : [ "card", "dataset", "metric", "dashboard", "table", "collection" ] + }, + "model_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "model", "model_id", "context" ] + } + } + } + }, + "tags" : [ "/api/activity" ] + } + }, + "/api/alert/" : { + "get" : { + "summary" : "GET /api/alert/", + "description" : "Fetch alerts which the current user has created or will receive, or all alerts if the user is an admin.\n The optional `user_id` will return alerts created by the corresponding user, but is ignored for non-admin users.", + "parameters" : [ { + "in" : "query", + "name" : "archived", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } - }, { - "in" : "path", - "name" : "dashboard-template", - "required" : true, - "schema" : { }, - "description" : "invalid value for dashboard template name" - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" }, { "in" : "query", - "name" : "show", + "name" : "user_id", "required" : false, "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] + "type" : "integer", + "minimum" : 1 }, - "description" : "invalid show value" + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/automagic-dashboards" ] + "tags" : [ "/api/alert" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/alert/{id}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query` using dashboard-template `dashboard-template`; compared with entity\n `comparison-entity` with id `comparison-entity-id-or-query.`.", + "summary" : "GET /api/alert/{id}", + "description" : "Fetch an alert by ID", "parameters" : [ { "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } - }, { - "in" : "path", - "name" : "dashboard-template", - "required" : true, - "schema" : { }, - "description" : "invalid value for dashboard template name" - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" - }, { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/alert" ] + } + }, + "/api/alert/{id}/subscription" : { + "delete" : { + "summary" : "DELETE /api/alert/{id}/subscription", + "description" : "For users to unsubscribe themselves from the given alert.", + "parameters" : [ { "in" : "path", - "name" : "comparison-entity", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] - }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" - }, { - "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] + "type" : "integer", + "minimum" : 1 }, - "description" : "invalid show value" + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/automagic-dashboards" ] + "tags" : [ "/api/alert" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/api-key/" : { + "post" : { + "summary" : "POST /api/api-key/", + "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "group_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "group_id", "name" ] + } + } + } + }, + "tags" : [ "/api/api-key" ] + }, "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` compared with entity `comparison-entity`\n with id `comparison-entity-id-or-query.`", + "summary" : "GET /api/api-key/", + "description" : "Get a list of API keys with the default scope. Non-paginated.", + "parameters" : [ ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/api-key/count" : { + "get" : { + "summary" : "GET /api/api-key/count", + "description" : "Get the count of API keys in the DB with the default scope.", + "parameters" : [ ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/api-key/{id}" : { + "put" : { + "summary" : "PUT /api/api-key/{id}", + "description" : "Update an API key by changing its group and/or its name", "parameters" : [ { "in" : "path", - "name" : "entity-id-or-query", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "group_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + } + } + } } - }, { + }, + "tags" : [ "/api/api-key" ] + }, + "delete" : { + "summary" : "DELETE /api/api-key/{id}", + "description" : "Delete an ApiKey", + "parameters" : [ { "in" : "path", - "name" : "entity", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/api-key/{id}/regenerate" : { + "put" : { + "summary" : "PUT /api/api-key/{id}/regenerate", + "description" : "Regenerate an API Key", + "parameters" : [ { "in" : "path", - "name" : "comparison-entity", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] + "type" : "integer", + "minimum" : 1 }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" - }, { - "in" : "query", - "name" : "show", - "required" : false, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/automagic-dashboards/database/{id}/candidates" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/database/{id}/candidates", + "description" : "Return a list of candidates for automagic dashboards ordered by interestingness.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] + "type" : "integer", + "minimum" : 1 }, - "description" : "invalid show value" + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata" : { + "/api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata", - "description" : "Return all metadata for an automagic dashboard for entity `entity` with id `id`.", + "summary" : "GET /api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}", + "description" : "Return an automagic dashboard for an entity detail specified by `entity`\n with id `id` and a primary key of `indexed-value`.", "parameters" : [ { "in" : "path", - "name" : "entity", + "name" : "model-index-id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] + "type" : "integer" + } + }, { + "in" : "path", + "name" : "pk-id", + "required" : true, + "schema" : { + "type" : "integer" } } ], "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}", - "description" : "Return an automagic dashboard for entity `entity` with id `id` using dashboard-template `dashboard-template`.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}", + "description" : "Return an automagic dashboard for entity `entity` with id `id`.", "parameters" : [ { "in" : "path", "name" : "entity", "required" : true, "schema" : { "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } - }, { - "in" : "path", - "name" : "dashboard-template", - "required" : true, - "schema" : { }, - "description" : "invalid value for dashboard template name" }, { "in" : "query", "name" : "show", "required" : false, "schema" : { "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] + "const" : "all" }, { "type" : "integer", "minimum" : 0 } ] - }, - "description" : "invalid show value" + } } ], "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` using dashboard-template\n `dashboard-template`; compared with entity `comparison-entity` with id `comparison-entity-id-or-query.`.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}", + "description" : "Return an automagic dashboard analyzing cell in automagic dashboard for entity `entity` defined by query\n `cell-query`.", "parameters" : [ { "in" : "path", "name" : "entity", "required" : true, "schema" : { "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { "in" : "path", "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", - "name" : "dashboard-template", + "name" : "cell-query", "required" : true, "schema" : { }, - "description" : "invalid value for dashboard template name" - }, { - "in" : "path", - "name" : "comparison-entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] - }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + "description" : "form-encoded base-64-encoded JSON" }, { "in" : "query", "name" : "show", @@ -2966,650 +1716,407 @@ "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/bookmark/" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { "get" : { - "summary" : "GET /api/bookmark/", - "description" : "Fetch all bookmarks for the user", - "parameters" : [ ], - "tags" : [ "/api/bookmark" ] - } - }, - "/api/bookmark/ordering" : { - "put" : { - "summary" : "PUT /api/bookmark/ordering", - "description" : "Sets the order of bookmarks for user.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "orderings" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "item_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "type" : "string", - "enum" : [ "card", "dashboard", "collection" ] - } - }, - "required" : [ "type", "item_id" ] - } - } - }, - "required" : [ "orderings" ] - } - } - } - }, - "tags" : [ "/api/bookmark" ] - } - }, - "/api/bookmark/{model}/{id}" : { - "post" : { - "summary" : "POST /api/bookmark/{model}/{id}", - "description" : "Create a new bookmark for user.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query`; compared with entity `comparison-entity` with id\n `comparison-entity-id-or-query.`.", "parameters" : [ { "in" : "path", - "name" : "model", + "name" : "entity", "required" : true, "schema" : { "type" : "string", - "enum" : [ "card", "dashboard", "collection" ] + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { "in" : "path", - "name" : "id", + "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/bookmark" ] - }, - "delete" : { - "summary" : "DELETE /api/bookmark/{model}/{id}", - "description" : "Delete a bookmark. Will delete a bookmark assigned to the user making the request by model and id.", - "parameters" : [ { + "description" : "value must be a non-blank string." + }, { "in" : "path", - "name" : "model", + "name" : "cell-query", "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "card", "dashboard", "collection" ] - } + "schema" : { }, + "description" : "form-encoded base-64-encoded JSON" }, { "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/bookmark" ] - } - }, - "/api/bug-reporting/connection-pool-details" : { - "get" : { - "summary" : "GET /api/bug-reporting/connection-pool-details", - "description" : "Returns database connection pool info for the current Metabase instance.", - "parameters" : [ ], - "tags" : [ "/api/bug-reporting" ] - } - }, - "/api/bug-reporting/details" : { - "get" : { - "summary" : "GET /api/bug-reporting/details", - "description" : "Returns version and system information relevant to filing a bug report against Metabase.", - "parameters" : [ ], - "tags" : [ "/api/bug-reporting" ] - } - }, - "/api/cache/" : { - "get" : { - "summary" : "GET /api/cache/", - "description" : "Return cache configuration.", - "parameters" : [ { - "in" : "query", - "name" : "model", + "name" : "comparison-entity", "required" : true, "schema" : { - "default" : [ "root" ], - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "root", "database", "dashboard", "question" ] - } - }, - "description" : "Type of model" - }, { - "in" : "query", - "name" : "collection", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "Collection id to filter results. Returns everything if not supplied." - }, { - "in" : "query", - "name" : "id", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "Model id to get configuration for." - } ], - "tags" : [ "/api/cache" ] - }, - "put" : { - "summary" : "PUT /api/cache/", - "description" : "Store cache configuration.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "model" : { - "type" : "string", - "enum" : [ "root", "database", "dashboard", "question" ] - }, - "model_id" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "strategy" : { - "$ref" : "#/components/schemas/metabase.cache.api.cache-strategy" - } - }, - "required" : [ "model", "model_id", "strategy" ] - } - } - } - }, - "tags" : [ "/api/cache" ] - }, - "delete" : { - "summary" : "DELETE /api/cache/", - "description" : "Delete cache configurations.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "model" : { - "type" : "string", - "enum" : [ "root", "database", "dashboard", "question" ] - }, - "model_id" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - } - } - }, - "required" : [ "model", "model_id" ] - } - } - } - }, - "tags" : [ "/api/cache" ] - } - }, - "/api/cache/invalidate" : { - "post" : { - "summary" : "POST /api/cache/invalidate", - "description" : "Invalidate cache entries.\n\n Use it like `/api/cache/invalidate?database=1&dashboard=15` (any number of database/dashboard/question can be\n supplied).\n\n `&include=overrides` controls whenever you want to invalidate cache for a specific cache configuration without\n touching all nested configurations, or you want your invalidation to trickle down to every card.", - "parameters" : [ { - "in" : "query", - "name" : "include", - "required" : false, - "schema" : { - "const" : "overrides" + "type" : "string", + "enum" : [ "segment", "adhoc", "table" ] }, - "description" : "All cache configuration overrides should invalidate cache too" + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" }, { "in" : "query", - "name" : "database", + "name" : "show", "required" : false, "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { "type" : "integer", "minimum" : 0 - } + } ] }, - "description" : "A list of database ids" + "description" : "invalid show value" + } ], + "tags" : [ "/api/automagic-dashboards" ] + } + }, + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}", + "description" : "Return an automagic dashboard analyzing cell in question with id `id` defined by query `cell-query` using\n dashboard-template `dashboard-template`.", + "parameters" : [ { + "in" : "path", + "name" : "entity", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] + } }, { - "in" : "query", - "name" : "dashboard", - "required" : false, + "in" : "path", + "name" : "entity-id-or-query", + "required" : true, "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "A list of dashboard ids" + "description" : "value must be a non-blank string." + }, { + "in" : "path", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", + "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "path", + "name" : "cell-query", + "required" : true, + "schema" : { }, + "description" : "form-encoded base-64-encoded JSON" }, { "in" : "query", - "name" : "question", + "name" : "show", "required" : false, "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { "type" : "integer", "minimum" : 0 - } + } ] }, - "description" : "A list of question ids" + "description" : "invalid show value" } ], - "tags" : [ "/api/cache" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { "get" : { - "summary" : "GET /api/card/", - "description" : "Get all the Cards. Option filter param `f` can be used to change the set of Cards that are returned; default is\n `all`, but other options include `mine`, `bookmarked`, `database`, `table`, `using_model`, `using_segment`, and\n `archived`. See corresponding implementation functions above for the specific behavior of each filter\n option. :card_index:", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query` using dashboard-template `dashboard-template`; compared with entity\n `comparison-entity` with id `comparison-entity-id-or-query.`.", "parameters" : [ { - "in" : "query", - "name" : "f", + "in" : "path", + "name" : "entity", "required" : true, "schema" : { - "default" : "all", "type" : "string", - "enum" : [ "archived", "table", "using_model", "bookmarked", "using_segment", "all", "mine", "database" ] + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { - "in" : "query", - "name" : "model_id", - "required" : false, + "in" : "path", + "name" : "entity-id-or-query", + "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - }, - "post" : { - "summary" : "POST /api/card/", - "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "visualization_settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "dashboard_tab_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "entity_id" : { - "type" : "string", - "minLength" : 1 - }, - "dataset_query" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter-mapping" - } - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "result_metadata" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultsMetadata" - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "$ref" : "#/components/schemas/metabase.queries.schema.card-type" - }, - "display" : { - "type" : "string", - "minLength" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "dashboard_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "name", "dataset_query", "display", "visualization_settings" ] - } - } - } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/collections" : { - "post" : { - "summary" : "POST /api/card/collections", - "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "card_ids" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "card_ids" ] - } - } - } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/embeddable" : { - "get" : { - "summary" : "GET /api/card/embeddable", - "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", - "parameters" : [ ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/pivot/{card-id}/query" : { - "post" : { - "summary" : "POST /api/card/pivot/{card-id}/query", - "description" : "Run the query associated with a Card.", - "parameters" : [ { + "description" : "value must be a non-blank string." + }, { "in" : "path", - "name" : "card-id", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", + "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "path", + "name" : "cell-query", + "required" : true, + "schema" : { }, + "description" : "form-encoded base-64-encoded JSON" + }, { + "in" : "path", + "name" : "comparison-entity", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "string", + "enum" : [ "segment", "adhoc", "table" ] + }, + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + }, { + "in" : "query", + "name" : "show", + "required" : false, + "schema" : { + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] }, - "description" : "value must be an integer greater than zero." + "description" : "invalid show value" } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "ignore_cache" : { - "type" : "boolean" - } - } - } - } - } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/public" : { - "get" : { - "summary" : "GET /api/card/public", - "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", - "parameters" : [ ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/params/{param-key}/search/{query}" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { "get" : { - "summary" : "GET /api/card/{card-id}/params/{param-key}/search/{query}", - "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`.\n\n ;; fetch values for Card 1 parameter 'abc' that contain 'Orange';\n GET /api/card/1/params/abc/search/Orange\n\n Currently limited to first 1000 results.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` compared with entity `comparison-entity`\n with id `comparison-entity-id-or-query.`", "parameters" : [ { "in" : "path", - "name" : "card-id", + "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." }, { "in" : "path", - "name" : "param-key", + "name" : "entity", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { "in" : "path", - "name" : "query", + "name" : "comparison-entity", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 - } + "enum" : [ "segment", "adhoc", "table" ] + }, + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + }, { + "in" : "query", + "name" : "show", + "required" : false, + "schema" : { + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] + }, + "description" : "invalid show value" } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/params/{param-key}/values" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata" : { "get" : { - "summary" : "GET /api/card/{card-id}/params/{param-key}/values", - "description" : "Fetch possible values of the parameter whose ID is `:param-key`.\n\n ;; fetch values for Card 1 parameter 'abc' that are possible\n GET /api/card/1/params/abc/values", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata", + "description" : "Return all metadata for an automagic dashboard for entity `entity` with id `id`.", "parameters" : [ { "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "param-key", + "name" : "entity", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/public_link" : { - "post" : { - "summary" : "POST /api/card/{card-id}/public_link", - "description" : "Generate publicly-accessible links for this Card. Returns UUID to be used in public links. (If this Card has\n already been shared, it will return the existing public link rather than creating a new one.) Public sharing must\n be enabled.", + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}", + "description" : "Return an automagic dashboard for entity `entity` with id `id` using dashboard-template `dashboard-template`.", "parameters" : [ { "in" : "path", - "name" : "card-id", + "name" : "entity", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "string", + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] + } + }, { + "in" : "path", + "name" : "entity-id-or-query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - }, - "delete" : { - "summary" : "DELETE /api/card/{card-id}/public_link", - "description" : "Delete the publicly-accessible link to this Card.", - "parameters" : [ { + "description" : "value must be a non-blank string." + }, { "in" : "path", - "name" : "card-id", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "query", + "name" : "show", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] }, - "description" : "value must be an integer greater than zero." + "description" : "invalid show value" } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/query" : { - "post" : { - "summary" : "POST /api/card/{card-id}/query", - "description" : "Run the query associated with a Card.", + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` using dashboard-template\n `dashboard-template`; compared with entity `comparison-entity` with id `comparison-entity-id-or-query.`.", "parameters" : [ { "in" : "path", - "name" : "card-id", + "name" : "entity", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "collection_preview" : { - "type" : "boolean" - }, - "dashboard_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "ignore_cache" : { - "default" : false, - "type" : "boolean" - } - }, - "required" : [ "ignore_cache" ] - } - } + "type" : "string", + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/{card-id}/query/{export-format}" : { - "post" : { - "summary" : "POST /api/card/{card-id}/query/{export-format}", - "description" : "Run the query associated with a Card, and return its results as a file in the specified format.\n\n `parameters`, `pivot-results?` and `format-rows?` should be passed as application/x-www-form-urlencoded form content\n or json in the body. This is because this endpoint is normally used to power 'Download Results' buttons that use\n HTML `form` actions).", - "parameters" : [ { + }, { "in" : "path", - "name" : "card-id", + "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." }, { "in" : "path", - "name" : "export-format", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", + "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "path", + "name" : "comparison-entity", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" - } + "type" : "string", + "enum" : [ "segment", "adhoc", "table" ] + }, + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + }, { + "in" : "query", + "name" : "show", + "required" : false, + "schema" : { + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] + }, + "description" : "invalid show value" } ], + "tags" : [ "/api/automagic-dashboards" ] + } + }, + "/api/bookmark/" : { + "get" : { + "summary" : "GET /api/bookmark/", + "description" : "Fetch all bookmarks for the user", + "parameters" : [ ], + "tags" : [ "/api/bookmark" ] + } + }, + "/api/bookmark/ordering" : { + "put" : { + "summary" : "PUT /api/bookmark/ordering", + "description" : "Sets the order of bookmarks for user.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "format_rows" : { - "default" : false, - "type" : "boolean" - }, - "parameters" : { + "orderings" : { "type" : "array", "items" : { "type" : "object", - "additionalProperties" : { } + "properties" : { + "item_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "type" : "string", + "enum" : [ "card", "dashboard", "collection" ] + } + }, + "required" : [ "type", "item_id" ] } - }, - "pivot_results" : { - "default" : false, - "type" : "boolean" } }, - "required" : [ "format_rows", "pivot_results" ] + "required" : [ "orderings" ] } } } }, - "tags" : [ "/api/card" ] + "tags" : [ "/api/bookmark" ] } }, - "/api/card/{id}" : { - "get" : { - "summary" : "GET /api/card/{id}", - "description" : "Get `Card` with ID.", + "/api/bookmark/{model}/{id}" : { + "post" : { + "summary" : "POST /api/bookmark/{model}/{id}", + "description" : "Create a new bookmark for user.", "parameters" : [ { + "in" : "path", + "name" : "model", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "card", "dashboard", "collection" ] + } + }, { "in" : "path", "name" : "id", "required" : true, @@ -3618,28 +2125,21 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "ignore_view", - "required" : false, - "schema" : { - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "context", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "collection" ] - } } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/bookmark" ] }, - "put" : { - "summary" : "PUT /api/card/{id}", - "description" : "Update a `Card`.", + "delete" : { + "summary" : "DELETE /api/bookmark/{model}/{id}", + "description" : "Delete a bookmark. Will delete a bookmark assigned to the user making the request by model and id.", "parameters" : [ { + "in" : "path", + "name" : "model", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "card", "dashboard", "collection" ] + } + }, { "in" : "path", "name" : "id", "required" : true, @@ -3648,269 +2148,192 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/bookmark" ] + } + }, + "/api/cache/" : { + "get" : { + "summary" : "GET /api/cache/", + "description" : "Return cache configuration.", + "parameters" : [ { + "in" : "query", + "name" : "model", + "required" : true, + "schema" : { + "default" : [ "root" ], + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "root", "database", "dashboard", "question" ] + } + }, + "description" : "Type of model" }, { "in" : "query", - "name" : "delete_old_dashcards", + "name" : "collection", "required" : false, "schema" : { - "type" : "boolean" - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "Collection id to filter results. Returns everything if not supplied." + }, { + "in" : "query", + "name" : "id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "Model id to get configuration for." } ], + "tags" : [ "/api/cache" ] + }, + "put" : { + "summary" : "PUT /api/cache/", + "description" : "Store cache configuration.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "enable_embedding" : { - "type" : "boolean" - }, - "visualization_settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "dashboard_tab_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "collection_preview" : { - "type" : "boolean" - }, - "dataset_query" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "name" : { + "model" : { "type" : "string", - "minLength" : 1 - }, - "archived" : { - "type" : "boolean" - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "embedding_params" : { - "type" : "object", - "additionalProperties" : { - "type" : "string", - "enum" : [ "disabled", "enabled", "locked" ] - }, - "description" : "value must be a valid embedding params map." - }, - "result_metadata" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultsMetadata" - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "enum" : [ "root", "database", "dashboard", "question" ] }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", + "model_id" : { + "description" : "value must be an integer greater or equal to than zero.", "type" : "integer", - "minimum" : 1 - }, - "type" : { - "$ref" : "#/components/schemas/metabase.queries.schema.card-type" + "minimum" : 0 }, - "display" : { + "strategy" : { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy" + } + }, + "required" : [ "model", "model_id", "strategy" ] + } + } + } + }, + "tags" : [ "/api/cache" ] + }, + "delete" : { + "summary" : "DELETE /api/cache/", + "description" : "Delete cache configurations.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "model" : { "type" : "string", - "minLength" : 1 + "enum" : [ "root", "database", "dashboard", "question" ] }, - "parameters" : { + "model_id" : { "type" : "array", "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 } - }, - "description" : { - "type" : "string" - }, - "dashboard_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 } - } + }, + "required" : [ "model", "model_id" ] } } } }, - "tags" : [ "/api/card" ] - }, - "delete" : { - "summary" : "DELETE /api/card/{id}", - "description" : "Hard delete a Card. To soft delete, use `PUT /api/card/:id`", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/cache" ] } }, - "/api/card/{id}/copy" : { + "/api/cache/invalidate" : { "post" : { - "summary" : "POST /api/card/{id}/copy", - "description" : "Copy a `Card`, with the new name 'Copy of _name_'", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/{id}/dashboards" : { - "get" : { - "summary" : "GET /api/card/{id}/dashboards", - "description" : "Get a list of `{:name ... :id ...}` pairs for all the dashboards this card appears in.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/{id}/params/{param-key}/remapping" : { - "get" : { - "summary" : "GET /api/card/{id}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for a given value of the parameter with ID `:param-key`.\n\n ;; fetch the remapped value for Card 1 parameter 'abc' for value 100\n GET /api/card/1/params/abc/remapping?value=100", + "summary" : "POST /api/cache/invalidate", + "description" : "Invalidate cache entries.\n\n Use it like `/api/cache/invalidate?database=1&dashboard=15` (any number of database/dashboard/question can be\n supplied).\n\n `&include=overrides` controls whenever you want to invalidate cache for a specific cache configuration without\n touching all nested configurations, or you want your invalidation to trickle down to every card.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "include", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "const" : "overrides" }, - "description" : "value must be an integer greater than zero." + "description" : "All cache configuration overrides should invalidate cache too" }, { - "in" : "path", - "name" : "param-key", - "required" : true, + "in" : "query", + "name" : "database", + "required" : false, "schema" : { - "type" : "string" - } + "type" : "array", + "items" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + } + }, + "description" : "A list of database ids" }, { "in" : "query", - "name" : "value", - "required" : true, + "name" : "dashboard", + "required" : false, "schema" : { - "type" : "string" - } - } ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/{id}/query_metadata" : { - "get" : { - "summary" : "GET /api/card/{id}/query_metadata", - "description" : "Get all of the required query metadata for a card.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "type" : "array", + "items" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + } + }, + "description" : "A list of dashboard ids" + }, { + "in" : "query", + "name" : "question", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "array", + "items" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + } }, - "description" : "value must be an integer greater than zero." + "description" : "A list of question ids" } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/cache" ] } }, - "/api/card/{id}/series" : { + "/api/card/" : { "get" : { - "summary" : "GET /api/card/{id}/series", - "description" : "Fetches a list of compatible series with the card with id `card_id`.\n\n - `last_cursor` with value is the id of the last card from the previous page to fetch the next page.\n - `query` to search card by name.\n - `exclude_ids` to filter out a list of card ids", + "summary" : "GET /api/card/", + "description" : "Get all the Cards. Option filter param `f` can be used to change the set of Cards that are returned; default is\n `all`, but other options include `mine`, `bookmarked`, `database`, `table`, `using_model`, `using_metric`,\n `using_segment`, and `archived`. See corresponding implementation functions above for the specific behavior\n of each filter option. :card_index:", "parameters" : [ { - "in" : "path", - "name" : "id", + "in" : "query", + "name" : "f", "required" : true, "schema" : { - "type" : "integer" + "default" : "all", + "type" : "string", + "enum" : [ "archived", "table", "using_model", "bookmarked", "using_segment", "all", "mine", "using_metric", "database" ] } }, { "in" : "query", - "name" : "last_cursor", + "name" : "model_id", "required" : false, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "query", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "exclude_ids", - "required" : false, - "schema" : { } } ], "tags" : [ "/api/card" ] - } - }, - "/api/cards/dashboards" : { - "post" : { - "summary" : "POST /api/cards/dashboards", - "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "card_ids" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - }, - "required" : [ "card_ids" ] - } - } - } - }, - "tags" : [ "/api/cards" ] - } - }, - "/api/cards/move" : { + }, "post" : { - "summary" : "POST /api/cards/move", - "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", + "summary" : "POST /api/card/", + "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", "parameters" : [ ], "requestBody" : { "content" : { @@ -3918,142 +2341,229 @@ "schema" : { "type" : "object", "properties" : { - "card_ids" : { + "visualization_settings" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "dashboard_tab_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "entity_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "dataset_query" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "parameter_mappings" : { "type" : "array", "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "description" : "parameter_mapping must be a map with :parameter_id and :target keys", + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] } }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "result_metadata" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultsMetadata" + }, "collection_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "$ref" : "#/components/schemas/metabase.api.card~1card-type" + }, + "display" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, "dashboard_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 } }, - "required" : [ "card_ids" ] + "required" : [ "name", "dataset_query", "display", "visualization_settings" ] } } } }, - "tags" : [ "/api/cards" ] + "tags" : [ "/api/card" ] } }, - "/api/channel/" : { - "get" : { - "summary" : "GET /api/channel/", - "description" : "Get all channels", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "include_inactive" : { - "type" : "boolean", - "default" : false - } - } - } - } - } - }, - "tags" : [ "/api/channel" ] - }, + "/api/card/collections" : { "post" : { - "summary" : "POST /api/channel/", - "description" : "Create a channel", + "summary" : "POST /api/card/collections", + "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean", - "default" : true - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "details" : { - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 + "type" : "object", + "properties" : { + "card_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } }, - "type" : { - "description" : "Must be a namespaced channel. E.g: channel/http" + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } }, - "required" : [ "name", "type", "details" ] + "required" : [ "card_ids" ] } } } }, - "tags" : [ "/api/channel" ] + "tags" : [ "/api/card" ] } }, - "/api/channel/test" : { + "/api/card/embeddable" : { + "get" : { + "summary" : "GET /api/card/embeddable", + "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", + "parameters" : [ ], + "tags" : [ "/api/card" ] + } + }, + "/api/card/from-csv" : { "post" : { - "summary" : "POST /api/channel/test", - "description" : "Test a channel connection", + "summary" : "POST /api/card/from-csv", + "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", "parameters" : [ ], "requestBody" : { "content" : { - "application/json" : { + "multipart/form-data" : { "schema" : { "type" : "object", "properties" : { - "details" : { - "type" : "object", - "properties" : { } + "collection_id" : { + "type" : "integer", + "minimum" : 1 }, - "type" : { - "description" : "Must be a namespaced channel. E.g: channel/http" + "file" : { + "type" : "object", + "properties" : { + "filename" : { + "type" : "string" + }, + "tempfile" : { } + }, + "required" : [ "filename", "tempfile" ] } }, - "required" : [ "type", "details" ] + "required" : [ "file" ] } } } }, - "tags" : [ "/api/channel" ] + "tags" : [ "/api/card" ] } }, - "/api/channel/{id}" : { - "get" : { - "summary" : "GET /api/channel/{id}", - "description" : "Get a channel", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/channel" ] - }, - "put" : { - "summary" : "PUT /api/channel/{id}", - "description" : "Update a channel", + "/api/card/pivot/{card-id}/query" : { + "post" : { + "summary" : "POST /api/card/pivot/{card-id}/query", + "description" : "Run the query associated with a Card.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "card-id", "required" : true, "schema" : { "type" : "integer", @@ -4067,167 +2577,128 @@ "schema" : { "type" : "object", "properties" : { - "active" : { + "ignore_cache" : { "type" : "boolean" - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "details" : { - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "type" : { - "description" : "Must be a namespaced channel. E.g: channel/http" } } } } } }, - "tags" : [ "/api/channel" ] + "tags" : [ "/api/card" ] } }, - "/api/cloud-migration/" : { - "post" : { - "summary" : "POST /api/cloud-migration/", - "description" : "Initiate a new cloud migration.", - "parameters" : [ ], - "tags" : [ "/api/cloud-migration" ] - }, + "/api/card/public" : { "get" : { - "summary" : "GET /api/cloud-migration/", - "description" : "Get the latest cloud migration, if any.", - "parameters" : [ ], - "tags" : [ "/api/cloud-migration" ] - } - }, - "/api/cloud-migration/cancel" : { - "put" : { - "summary" : "PUT /api/cloud-migration/cancel", - "description" : "Cancel any ongoing cloud migrations, if any.", + "summary" : "GET /api/card/public", + "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], - "tags" : [ "/api/cloud-migration" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/" : { + "/api/card/{card-id}/params/{param-key}/search/{query}" : { "get" : { - "summary" : "GET /api/collection/", - "description" : "Fetch a list of all Collections that the current user has read permissions for (`:can_write` is returned as an\n additional property of each Collection so you can tell which of these you have write permissions for.)\n\n By default, this returns non-archived Collections, but instead you can show archived ones by passing\n `?archived=true`.\n\n By default, admin users will see all collections. To hide other user's collections pass in\n `?exclude-other-user-collections=true`.\n\n If personal-only is `true`, then return only personal collections where `personal_owner_id` is not `nil`.", + "summary" : "GET /api/card/{card-id}/params/{param-key}/search/{query}", + "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`.\n\n ;; fetch values for Card 1 parameter 'abc' that contain 'Orange';\n GET /api/card/1/params/abc/search/Orange\n\n Currently limited to first 1000 results.", "parameters" : [ { - "in" : "query", - "name" : "archived", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "exclude-other-user-collections", - "required" : false, + "in" : "path", + "name" : "param-key", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { - "in" : "query", - "name" : "namespace", - "required" : false, + "in" : "path", + "name" : "query", + "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/card" ] + } + }, + "/api/card/{card-id}/params/{param-key}/values" : { + "get" : { + "summary" : "GET /api/card/{card-id}/params/{param-key}/values", + "description" : "Fetch possible values of the parameter whose ID is `:param-key`.\n\n ;; fetch values for Card 1 parameter 'abc' that are possible\n GET /api/card/1/params/abc/values", + "parameters" : [ { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "personal-only", - "required" : false, + "in" : "path", + "name" : "param-key", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], - "tags" : [ "/api/collection" ] - }, - "post" : { - "summary" : "POST /api/collection/", - "description" : "Create a new Collection.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "authority_level" : { - "type" : "string", - "enum" : [ "official" ] - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "namespace" : { - "type" : "string", - "minLength" : 1 - }, - "parent_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "name" ] - } - } - } - }, - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/graph" : { - "get" : { - "summary" : "GET /api/collection/graph", - "description" : "Fetch a graph of all Collection Permissions.", + "/api/card/{card-id}/public_link" : { + "post" : { + "summary" : "POST /api/card/{card-id}/public_link", + "description" : "Generate publicly-accessible links for this Card. Returns UUID to be used in public links. (If this Card has\n already been shared, it will return the existing public link rather than creating a new one.) Public sharing must\n be enabled.", "parameters" : [ { - "in" : "query", - "name" : "namespace", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/card" ] + }, + "delete" : { + "summary" : "DELETE /api/card/{card-id}/public_link", + "description" : "Delete the publicly-accessible link to this Card.", + "parameters" : [ { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/collection" ] - }, - "put" : { - "summary" : "PUT /api/collection/graph", - "description" : "Do a batch update of Collections Permissions by passing in a modified graph. Will overwrite parts of the graph that\n are present in the request, and leave the rest unchanged.\n\n If the `force` query parameter is `true`, a `revision` number is not required. The provided graph will be persisted\n as-is, and has the potential to clobber other writes that happened since the last read.\n\n If the `skip_graph` query parameter is `true`, it will only return the current revision, not the entire permissions\n graph.", + "tags" : [ "/api/card" ] + } + }, + "/api/card/{card-id}/query" : { + "post" : { + "summary" : "POST /api/card/{card-id}/query", + "description" : "Run the query associated with a Card.", "parameters" : [ { - "in" : "query", - "name" : "force", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "skip-graph", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "requestBody" : { "content" : { @@ -4235,237 +2706,113 @@ "schema" : { "type" : "object", "properties" : { - "groups" : { - "type" : "object", - "properties" : { } + "collection_preview" : { + "type" : "boolean" }, - "namespace" : { - "type" : "string", - "minLength" : 1 + "dashboard_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "revision" : { - "description" : "value must be an integer.", - "type" : "integer" + "ignore_cache" : { + "default" : false, + "type" : "boolean" } }, - "required" : [ "groups" ] + "required" : [ "ignore_cache" ] } } } }, - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/root" : { - "get" : { - "summary" : "GET /api/collection/root", - "description" : "Return the 'Root' Collection object with standard details added", - "parameters" : [ { - "in" : "query", - "name" : "namespace", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/root/dashboard-question-candidates" : { - "get" : { - "summary" : "GET /api/collection/root/dashboard-question-candidates", - "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", - "parameters" : [ ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/root/items" : { - "get" : { - "summary" : "GET /api/collection/root/items", - "description" : "Fetch objects that the current user should see at their root level. As mentioned elsewhere, the 'Root' Collection\n doesn't actually exist as a row in the application DB: it's simply a virtual Collection where things with no\n `collection_id` exist. It does, however, have its own set of Permissions.\n\n This endpoint will actually show objects with no `collection_id` for Users that have Root Collection\n permissions, but for people without Root Collection perms, we'll just show the objects that have an effective\n location of `/`.\n\n This endpoint is intended to power a 'Root Folder View' for the Current User, so regardless you'll see all the\n top-level objects you're allowed to access.\n\n By default, this will show the 'normal' Collections namespace; to view a different Collections namespace, such as\n `snippets`, you can pass the `?namespace=` parameter.\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", + "/api/card/{card-id}/query/{export-format}" : { + "post" : { + "summary" : "POST /api/card/{card-id}/query/{export-format}", + "description" : "Run the query associated with a Card, and return its results as a file in the specified format.\n\n `parameters`, `pivot-results?` and `format-rows?` should be passed as application/x-www-form-urlencoded form content\n or json in the body. This is because this endpoint is normally used to power 'Download Results' buttons that use\n HTML `form` actions).", "parameters" : [ { - "in" : "query", - "name" : "models", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] - } - } - }, { - "in" : "query", - "name" : "include_can_run_adhoc_query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "namespace", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "pinned_state", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "is_not_pinned", "is_pinned", "all" ] - } - }, { - "in" : "query", - "name" : "sort_column", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "string", - "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "sort_direction", - "required" : false, + "in" : "path", + "name" : "export-format", + "required" : true, "schema" : { "type" : "string", - "enum" : [ "desc", "asc" ] - } - }, { - "in" : "query", - "name" : "official_collections_first", - "required" : false, - "schema" : { - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "show_dashboard_questions", - "required" : false, - "schema" : { - "type" : "boolean" + "enum" : [ "csv", "api", "xlsx", "json" ] } } ], - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/root/move-dashboard-question-candidates" : { - "post" : { - "summary" : "POST /api/collection/root/move-dashboard-question-candidates", - "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", - "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "card_ids" : { + "format_rows" : { + "default" : false, + "type" : "boolean" + }, + "parameters" : { "type" : "array", "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "uniqueItems" : true + "type" : "object", + "additionalProperties" : { } + } + }, + "pivot_results" : { + "default" : false, + "type" : "boolean" } }, - "optional" : true + "required" : [ "format_rows", "pivot_results" ] } } } }, - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/trash" : { - "get" : { - "summary" : "GET /api/collection/trash", - "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", - "parameters" : [ ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/tree" : { + "/api/card/{id}" : { "get" : { - "summary" : "GET /api/collection/tree", - "description" : "Similar to `GET /`, but returns Collections in a tree structure, e.g.\n\n ```\n [{:name \"A\"\n :below #{:card :dataset}\n :children [{:name \"B\"}\n {:name \"C\"\n :here #{:dataset :card}\n :below #{:dataset :card}\n :children [{:name \"D\"\n :here #{:dataset}\n :children [{:name \"E\"}]}\n {:name \"F\"\n :here #{:card}\n :children [{:name \"G\"}]}]}]}\n {:name \"H\"}]\n ```\n\n The here and below keys indicate the types of items at this particular level of the tree (here) and in its\n subtree (below).\n\n TODO: for historical reasons this returns Saved Questions AS 'card' AND Models as 'dataset'; we should fix this at\n some point in the future.", + "summary" : "GET /api/card/{id}", + "description" : "Get `Card` with ID.", "parameters" : [ { - "in" : "query", - "name" : "exclude-archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "exclude-other-user-collections", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "namespace", - "required" : false, + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", - "name" : "shallow", + "name" : "ignore_view", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "boolean" } }, { "in" : "query", - "name" : "collection-id", + "name" : "context", "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/{id}" : { - "get" : { - "summary" : "GET /api/collection/{id}", - "description" : "Fetch a specific Collection with standard details added", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "string", + "enum" : [ "collection" ] + } } ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] }, "put" : { - "summary" : "PUT /api/collection/{id}", - "description" : "Modify an existing Collection, including archiving or unarchiving it, or moving it.", + "summary" : "PUT /api/card/{id}", + "description" : "Update a `Card`.", "parameters" : [ { "in" : "path", "name" : "id", @@ -4475,6 +2822,13 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "delete_old_dashcards", + "required" : false, + "schema" : { + "type" : "boolean" + } } ], "requestBody" : { "content" : { @@ -4482,40 +2836,157 @@ "schema" : { "type" : "object", "properties" : { - "archived" : { - "type" : "boolean", - "default" : false + "enable_embedding" : { + "type" : "boolean" }, - "authority_level" : { - "type" : "string", - "enum" : [ "official" ] + "visualization_settings" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } }, - "description" : { - "type" : "string", - "minLength" : 1 + "dashboard_tab_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_preview" : { + "type" : "boolean" + }, + "dataset_query" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "parent_id" : { + "archived" : { + "type" : "boolean" + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "embedding_params" : { + "type" : "object", + "additionalProperties" : { + "type" : "string", + "enum" : [ "disabled", "enabled", "locked" ] + }, + "description" : "value must be a valid embedding params map." + }, + "result_metadata" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultsMetadata" + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "$ref" : "#/components/schemas/metabase.api.card~1card-type" + }, + "display" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + }, + "description" : { + "type" : "string" + }, + "dashboard_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 } - }, - "required" : [ ] + } } } } }, - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] + }, + "delete" : { + "summary" : "DELETE /api/card/{id}", + "description" : "Hard delete a Card. To soft delete, use `PUT /api/card/:id`", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/card" ] } }, - "/api/collection/{id}/dashboard-question-candidates" : { - "get" : { - "summary" : "GET /api/collection/{id}/dashboard-question-candidates", - "description" : "Find cards in this collection that can be moved into dashboards in this collection.\n\n To be eligible, a card must only appear in one dashboard (which is also in this collection), and must not already be a\n dashboard question.", + "/api/card/{id}/copy" : { + "post" : { + "summary" : "POST /api/card/{id}/copy", + "description" : "Copy a `Card`, with the new name 'Copy of _name_'", "parameters" : [ { "in" : "path", "name" : "id", @@ -4526,13 +2997,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/{id}/items" : { + "/api/card/{id}/dashboards" : { "get" : { - "summary" : "GET /api/collection/{id}/items", - "description" : "Fetch a specific Collection's items with the following options:\n\n * `models` - only include objects of a specific set of `models`. If unspecified, returns objects of all models\n * `archived` - when `true`, return archived objects *instead* of unarchived ones. Defaults to `false`.\n * `pinned_state` - when `is_pinned`, return pinned objects only.\n when `is_not_pinned`, return non pinned objects only.\n when `all`, return everything. By default returns everything.\n * `include_can_run_adhoc_query` - when this is true hydrates the `can_run_adhoc_query` flag on card models\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", + "summary" : "GET /api/card/{id}/dashboards", + "description" : "Get a list of `{:name ... :id ...}` pairs for all the dashboards this card appears in.", "parameters" : [ { "in" : "path", "name" : "id", @@ -4542,90 +3013,69 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "models", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] - } - } - }, { - "in" : "query", - "name" : "archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_can_run_adhoc_query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "pinned_state", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "is_not_pinned", "is_pinned", "all" ] - } - }, { - "in" : "query", - "name" : "sort_column", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] - } - }, { - "in" : "query", - "name" : "sort_direction", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "desc", "asc" ] - } - }, { - "in" : "query", - "name" : "official_collections_first", - "required" : false, - "schema" : { - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "show_dashboard_questions", - "required" : false, + } ], + "tags" : [ "/api/card" ] + } + }, + "/api/card/{id}/query_metadata" : { + "get" : { + "summary" : "GET /api/card/{id}/query_metadata", + "description" : "Get all of the required query metadata for a card.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/{id}/move-dashboard-question-candidates" : { - "post" : { - "summary" : "POST /api/collection/{id}/move-dashboard-question-candidates", - "description" : "Move candidate cards to the dashboards they appear in.", + "/api/card/{id}/series" : { + "get" : { + "summary" : "GET /api/card/{id}/series", + "description" : "Fetches a list of compatible series with the card with id `card_id`.\n\n - `last_cursor` with value is the id of the last card from the previous page to fetch the next page.\n - `query` to search card by name.\n - `exclude_ids` to filter out a list of card ids", "parameters" : [ { "in" : "path", "name" : "id", "required" : true, + "schema" : { + "type" : "integer" + } + }, { + "in" : "query", + "name" : "last_cursor", + "required" : false, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "query", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "exclude_ids", + "required" : false, + "schema" : { } } ], + "tags" : [ "/api/card" ] + } + }, + "/api/cards/dashboards" : { + "post" : { + "summary" : "POST /api/cards/dashboards", + "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { @@ -4638,36 +3088,21 @@ "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 - }, - "uniqueItems" : true + } } }, - "optional" : true + "required" : [ "card_ids" ] } } } }, - "tags" : [ "/api/collection" ] + "tags" : [ "/api/cards" ] } }, - "/api/dashboard/" : { - "get" : { - "summary" : "GET /api/dashboard/", - "description" : "This endpoint is currently unused by the Metabase frontend and may be out of date with the rest of the application.\n It only exists for backwards compatibility and may be removed in the future.\n\n Get `Dashboards`. With filter option `f` (default `all`), restrict results as follows:\n * `all` - Return all Dashboards.\n * `mine` - Return Dashboards created by the current user.\n * `archived` - Return Dashboards that have been archived. (By default, these are *excluded*.)", - "parameters" : [ { - "in" : "query", - "name" : "f", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "all", "mine", "archived" ] - } - } ], - "tags" : [ "/api/dashboard" ] - }, + "/api/cards/move" : { "post" : { - "summary" : "POST /api/dashboard/", - "description" : "Create a new Dashboard.", + "summary" : "POST /api/cards/move", + "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", "parameters" : [ ], "requestBody" : { "content" : { @@ -4675,384 +3110,142 @@ "schema" : { "type" : "object", "properties" : { - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "card_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } }, "collection_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, - "collection_position" : { + "dashboard_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 - }, - "description" : { - "type" : "string" - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } } }, - "required" : [ "name" ] + "required" : [ "card_ids" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/cards" ] } }, - "/api/dashboard/embeddable" : { + "/api/channel/" : { "get" : { - "summary" : "GET /api/dashboard/embeddable", - "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", + "summary" : "GET /api/channel/", + "description" : "Get all channels", "parameters" : [ ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/params/valid-filter-fields" : { - "get" : { - "summary" : "GET /api/dashboard/params/valid-filter-fields", - "description" : "Utility endpoint for powering Dashboard UI. Given some set of `filtered` Field IDs (presumably Fields used in\n parameters) and a set of `filtering` Field IDs that will be used to restrict values of `filtered` Fields, for each\n `filtered` Field ID return the subset of `filtering` Field IDs that would actually be used in a chain filter query\n with these Fields.\n\n e.g. in a chain filter query like\n\n GET /api/dashboard/10/params/PARAM_1/values?PARAM_2=100\n\n Assume `PARAM_1` maps to Field 1 and `PARAM_2` maps to Fields 2 and 3. The underlying MBQL query may or may not\n filter against Fields 2 and 3, depending on whether an FK relationship that lets us create a join against Field 1\n can be found. You can use this endpoint to determine which of those Fields is actually used:\n\n GET /api/dashboard/params/valid-filter-fields?filtered=1&filtering=2&filtering=3\n ;; ->\n {1 [2 3]}\n\n Results are returned as a map of\n\n `filtered` Field ID -> subset of `filtering` Field IDs that would be used in chain filter query", - "parameters" : [ { - "in" : "query", - "name" : "filtered", - "required" : true, - "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - }, { - "in" : "query", - "name" : "filtering", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { - "post" : { - "summary" : "POST /api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", - "description" : "Run a pivot table query for a specific DashCard.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "parameters" : { - "type" : "array", - "items" : { - "description" : "value must be a parameter map with an 'id' key", - "allOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id" ] - }, { - "type" : "object", - "additionalProperties" : { } - } ] - } + "include_inactive" : { + "type" : "boolean", + "default" : false } } } } } }, - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/public" : { - "get" : { - "summary" : "GET /api/dashboard/public", - "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", - "parameters" : [ ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/save" : { + "tags" : [ "/api/channel" ] + }, "post" : { - "summary" : "POST /api/dashboard/save", - "description" : "Save a denormalized description of dashboard.", + "summary" : "POST /api/channel/", + "description" : "Create a channel", "parameters" : [ ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/save/collection/{parent-collection-id}" : { - "post" : { - "summary" : "POST /api/dashboard/save/collection/{parent-collection-id}", - "description" : "Save a denormalized description of dashboard into collection with ID `:parent-collection-id`.", - "parameters" : [ { - "in" : "path", - "name" : "parent-collection-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { - "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", - "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "dashboard_load_id" : { - "type" : "string", - "minLength" : 1 + "active" : { + "type" : "boolean", + "default" : true }, - "parameters" : { - "type" : "array", - "items" : { - "description" : "value must be a parameter map with an 'id' key", - "allOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id" ] - }, { - "type" : "object", - "additionalProperties" : { } - } ] - } + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { + "type" : "object", + "properties" : { } + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "type" : { + "description" : "Must be a namespaced channel. E.g: channel/http" } - } + }, + "required" : [ "name", "type", "details" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] } }, - "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}" : { + "/api/channel/test" : { "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}", - "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it, and return\n its results as a file in the specified format.\n\n `parameters` should be passed as query parameter encoded as a serialized JSON string (this is because this endpoint\n is normally used to power 'Download Results' buttons that use HTML `form` actions).", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "export-format", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" - } - } ], + "summary" : "POST /api/channel/test", + "description" : "Test a channel connection", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "format_rows" : { - "default" : false, - "type" : "boolean" - }, - "parameters" : { - "anyOf" : [ { - "type" : "array", - "items" : { - "description" : "value must be a parameter map with an 'id' key", - "allOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id" ] - }, { - "type" : "object", - "additionalProperties" : { } - } ] - } - }, { - "description" : "value must be a valid JSON string.", - "type" : "string" - } ] + "details" : { + "type" : "object", + "properties" : { } }, - "pivot_results" : { - "default" : false, - "type" : "boolean" + "type" : { + "description" : "Must be a namespaced channel. E.g: channel/http" } }, - "required" : [ "format_rows", "pivot_results" ] + "required" : [ "type", "details" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] } }, - "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute" : { + "/api/channel/{id}" : { "get" : { - "summary" : "GET /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", - "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", + "summary" : "GET /api/channel/{id}", + "description" : "Get a channel", "parameters" : [ { "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", + "name" : "id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "parameters", - "required" : false, - "schema" : { - "type" : "string" - }, - "description" : "value must be a valid JSON string." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] }, - "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", - "description" : "Execute the associated Action in the context of a `Dashboard` and `DashboardCard` that includes it.\n\n `parameters` should be the mapped dashboard parameters with values.\n `extra_parameters` should be the extra, user entered parameter values.", + "put" : { + "summary" : "PUT /api/channel/{id}", + "description" : "Update a channel", "parameters" : [ { "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", + "name" : "id", "required" : true, "schema" : { "type" : "integer", @@ -5066,143 +3259,167 @@ "schema" : { "type" : "object", "properties" : { - "parameters" : { + "active" : { + "type" : "boolean" + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { "type" : "object", - "additionalProperties" : { } + "properties" : { } + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "type" : { + "description" : "Must be a namespaced channel. E.g: channel/http" } } } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] } }, - "/api/dashboard/{dashboard-id}/public_link" : { + "/api/cloud-migration/" : { "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/public_link", - "description" : "Generate publicly-accessible links for this Dashboard. Returns UUID to be used in public links. (If this\n Dashboard has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] + "summary" : "POST /api/cloud-migration/", + "description" : "Initiate a new cloud migration.", + "parameters" : [ ], + "tags" : [ "/api/cloud-migration" ] }, - "delete" : { - "summary" : "DELETE /api/dashboard/{dashboard-id}/public_link", - "description" : "Delete the publicly-accessible link to this Dashboard.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] + "get" : { + "summary" : "GET /api/cloud-migration/", + "description" : "Get the latest cloud migration, if any.", + "parameters" : [ ], + "tags" : [ "/api/cloud-migration" ] } }, - "/api/dashboard/{from-dashboard-id}/copy" : { - "post" : { - "summary" : "POST /api/dashboard/{from-dashboard-id}/copy", - "description" : "Copy a Dashboard.", + "/api/cloud-migration/cancel" : { + "put" : { + "summary" : "PUT /api/cloud-migration/cancel", + "description" : "Cancel any ongoing cloud migrations, if any.", + "parameters" : [ ], + "tags" : [ "/api/cloud-migration" ] + } + }, + "/api/collection/" : { + "get" : { + "summary" : "GET /api/collection/", + "description" : "Fetch a list of all Collections that the current user has read permissions for (`:can_write` is returned as an\n additional property of each Collection so you can tell which of these you have write permissions for.)\n\n By default, this returns non-archived Collections, but instead you can show archived ones by passing\n `?archived=true`.\n\n By default, admin users will see all collections. To hide other user's collections pass in\n `?exclude-other-user-collections=true`.\n\n If personal-only is `true`, then return only personal collections where `personal_owner_id` is not `nil`.", "parameters" : [ { - "in" : "path", - "name" : "from-dashboard-id", - "required" : true, + "in" : "query", + "name" : "archived", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "exclude-other-user-collections", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "namespace", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "personal-only", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } } ], + "tags" : [ "/api/collection" ] + }, + "post" : { + "summary" : "POST /api/collection/", + "description" : "Create a new Collection.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "authority_level" : { + "type" : "string", + "enum" : [ "official" ] }, "description" : { - "type" : "string" - }, - "is_deep_copy" : { - "type" : "boolean", - "default" : false + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "namespace" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parent_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } }, - "required" : [ ] + "required" : [ "name" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}" : { + "/api/collection/graph" : { "get" : { - "summary" : "GET /api/dashboard/{id}", - "description" : "Get Dashboard with ID.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] - }, - "delete" : { - "summary" : "DELETE /api/dashboard/{id}", - "description" : "Hard delete a Dashboard. To soft delete, use `PUT /api/dashboard/:id`\n\n This will remove also any questions/models/segments/metrics that use this database.", + "summary" : "GET /api/collection/graph", + "description" : "Fetch a graph of all Collection Permissions.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "namespace", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] }, "put" : { - "summary" : "PUT /api/dashboard/{id}", - "description" : "Update a Dashboard, and optionally the `dashcards` and `tabs` of a Dashboard. The request body should be a JSON object with the same\n structure as the response from `GET /api/dashboard/:id`.", + "summary" : "PUT /api/collection/graph", + "description" : "Do a batch update of Collections Permissions by passing in a modified graph. Will overwrite parts of the graph that\n are present in the request, and leave the rest unchanged.\n\n If the `force` query parameter is `true`, a `revision` number is not required. The provided graph will be persisted\n as-is, and has the potential to clobber other writes that happened since the last read.\n\n If the `skip_graph` query parameter is `true`, it will only return the current revision, not the entire permissions\n graph.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "force", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "skip-graph", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } } ], "requestBody" : { "content" : { @@ -5210,311 +3427,214 @@ "schema" : { "type" : "object", "properties" : { - "points_of_interest" : { - "type" : "string" - }, - "enable_embedding" : { - "type" : "boolean" - }, - "width" : { - "type" : "string", - "enum" : [ "fixed", "full" ] - }, - "show_in_getting_started" : { - "type" : "boolean" - }, - "position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "archived" : { - "type" : "boolean" - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "embedding_params" : { + "groups" : { "type" : "object", - "additionalProperties" : { - "type" : "string", - "enum" : [ "disabled", "enabled", "locked" ] - }, - "description" : "value must be a valid embedding params map." - }, - "tabs" : { - "description" : "value must be seq of maps in which ids are unique", - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "description" : "value must be an integer.", - "type" : "integer" - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id", "name" ] - } - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "caveats" : { - "type" : "string" - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } + "properties" : { } }, - "dashcards" : { - "description" : "value must be seq of maps in which ids are unique", - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "col" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "id" : { - "type" : "integer" - }, - "inline_parameters" : { - "type" : "array", - "items" : { - "type" : "string", - "minLength" : 1 - } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "parameter_id" : { - "type" : "string", - "minLength" : 1 - }, - "target" : { } - }, - "required" : [ "parameter_id", "target" ] - } - }, - "row" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "series" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "size_x" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "size_y" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "id", "size_x", "size_y", "row", "col" ] - } + "namespace" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : { - "type" : "string" + "revision" : { + "description" : "value must be an integer.", + "type" : "integer" } - } + }, + "required" : [ "groups" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/cards" : { - "put" : { - "summary" : "PUT /api/dashboard/{id}/cards", - "description" : "(DEPRECATED -- Use the `PUT /api/dashboard/:id` endpoint instead.)\n Update `Cards` and `Tabs` on a Dashboard. Request body should have the form:\n\n {:cards [{:id ... ; DashboardCard ID\n :size_x ...\n :size_y ...\n :row ...\n :col ...\n :parameter_mappings ...\n :series [{:id 123\n ...}]}\n ...]\n :tabs [{:id ... ; DashboardTab ID\n :name ...}]}", + "/api/collection/root" : { + "get" : { + "summary" : "GET /api/collection/root", + "description" : "Return the 'Root' Collection object with standard details added", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "namespace", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/root/dashboard-question-candidates" : { + "get" : { + "summary" : "GET /api/collection/root/dashboard-question-candidates", + "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", + "parameters" : [ ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/root/items" : { + "get" : { + "summary" : "GET /api/collection/root/items", + "description" : "Fetch objects that the current user should see at their root level. As mentioned elsewhere, the 'Root' Collection\n doesn't actually exist as a row in the application DB: it's simply a virtual Collection where things with no\n `collection_id` exist. It does, however, have its own set of Permissions.\n\n This endpoint will actually show objects with no `collection_id` for Users that have Root Collection\n permissions, but for people without Root Collection perms, we'll just show the objects that have an effective\n location of `/`.\n\n This endpoint is intended to power a 'Root Folder View' for the Current User, so regardless you'll see all the\n top-level objects you're allowed to access.\n\n By default, this will show the 'normal' Collections namespace; to view a different Collections namespace, such as\n `snippets`, you can pass the `?namespace=` parameter.\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", + "parameters" : [ { + "in" : "query", + "name" : "models", + "required" : false, + "schema" : { + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] + } + } + }, { + "in" : "query", + "name" : "archived", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "namespace", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "pinned_state", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "is_not_pinned", "is_pinned", "all" ] + } + }, { + "in" : "query", + "name" : "sort_column", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] + } + }, { + "in" : "query", + "name" : "sort_direction", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "desc", "asc" ] + } + }, { + "in" : "query", + "name" : "official_collections_first", + "required" : false, + "schema" : { + "type" : "boolean" + } + }, { + "in" : "query", + "name" : "show_dashboard_questions", + "required" : false, + "schema" : { + "type" : "boolean" + } } ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/root/move-dashboard-question-candidates" : { + "post" : { + "summary" : "POST /api/collection/root/move-dashboard-question-candidates", + "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "cards" : { - "description" : "value must be seq of maps in which ids are unique", - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "col" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "id" : { - "type" : "integer" - }, - "inline_parameters" : { - "type" : "array", - "items" : { - "type" : "string", - "minLength" : 1 - } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "parameter_id" : { - "type" : "string", - "minLength" : 1 - }, - "target" : { } - }, - "required" : [ "parameter_id", "target" ] - } - }, - "row" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "series" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "size_x" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "size_y" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "id", "size_x", "size_y", "row", "col" ] - } - }, - "tabs" : { - "description" : "value must be seq of maps in which ids are unique", + "card_ids" : { "type" : "array", "items" : { - "type" : "object", - "properties" : { - "id" : { - "description" : "value must be an integer.", - "type" : "integer" - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id", "name" ] - } + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "uniqueItems" : true } }, - "required" : [ "cards" ] + "optional" : true } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/items" : { + "/api/collection/trash" : { "get" : { - "summary" : "GET /api/dashboard/{id}/items", - "description" : "Get Dashboard with ID.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] + "summary" : "GET /api/collection/trash", + "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", + "parameters" : [ ], + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/params/{param-key}/remapping" : { + "/api/collection/tree" : { "get" : { - "summary" : "GET /api/dashboard/{id}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for a given value of the parameter with ID `:param-key`.\n\n ;; fetch the remapped value for Dashboard 1 parameter 'abc' for value 100\n GET /api/dashboard/1/params/abc/remapping?value=100", + "summary" : "GET /api/collection/tree", + "description" : "Similar to `GET /`, but returns Collections in a tree structure, e.g.\n\n ```\n [{:name \"A\"\n :below #{:card :dataset}\n :children [{:name \"B\"}\n {:name \"C\"\n :here #{:dataset :card}\n :below #{:dataset :card}\n :children [{:name \"D\"\n :here #{:dataset}\n :children [{:name \"E\"}]}\n {:name \"F\"\n :here #{:card}\n :children [{:name \"G\"}]}]}]}\n {:name \"H\"}]\n ```\n\n The here and below keys indicate the types of items at this particular level of the tree (here) and in its\n subtree (below).\n\n TODO: for historical reasons this returns Saved Questions AS 'card' AND Models as 'dataset'; we should fix this at\n some point in the future.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "exclude-archived", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "boolean", + "default" : false + } }, { - "in" : "path", - "name" : "param-key", - "required" : true, + "in" : "query", + "name" : "exclude-other-user-collections", + "required" : false, "schema" : { - "type" : "string" + "type" : "boolean", + "default" : false } }, { "in" : "query", - "name" : "value", - "required" : true, + "name" : "namespace", + "required" : false, "schema" : { - "type" : "string" + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "shallow", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } + }, { + "in" : "query", + "name" : "collection-id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/params/{param-key}/search/{query}" : { + "/api/collection/{id}" : { "get" : { - "summary" : "GET /api/dashboard/{id}/params/{param-key}/search/{query}", - "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`. Optionally restrict\n these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that contain 'Cam' and are possible when parameter 'def' is set\n ;; to 100\n GET /api/dashboard/1/params/abc/search/Cam?def=100\n\n Currently limited to first 1000 results.", + "summary" : "GET /api/collection/{id}", + "description" : "Fetch a specific Collection with standard details added", "parameters" : [ { "in" : "path", "name" : "id", @@ -5524,22 +3644,12 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 - } } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/{id}/params/{param-key}/values" : { - "get" : { - "summary" : "GET /api/dashboard/{id}/params/{param-key}/values", - "description" : "Fetch possible values of the parameter whose ID is `:param-key`. If the values come directly from a query, optionally\n restrict these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that are possible when parameter 'def' is set to 100\n GET /api/dashboard/1/params/abc/values?def=100", + "tags" : [ "/api/collection" ] + }, + "put" : { + "summary" : "PUT /api/collection/{id}", + "description" : "Modify an existing Collection, including archiving or unarchiving it, or moving it.", "parameters" : [ { "in" : "path", "name" : "id", @@ -5550,13 +3660,46 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/dashboard" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "archived" : { + "type" : "boolean", + "default" : false + }, + "authority_level" : { + "type" : "string", + "enum" : [ "official" ] + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parent_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ ] + } + } + } + }, + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/query_metadata" : { + "/api/collection/{id}/dashboard-question-candidates" : { "get" : { - "summary" : "GET /api/dashboard/{id}/query_metadata", - "description" : "Get all of the required query metadata for the cards on dashboard.", + "summary" : "GET /api/collection/{id}/dashboard-question-candidates", + "description" : "Find cards in this collection that can be moved into dashboards in this collection.\n\n To be eligible, a card must only appear in one dashboard (which is also in this collection), and must not already be a\n dashboard question.", "parameters" : [ { "in" : "path", "name" : "id", @@ -5567,13 +3710,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/related" : { + "/api/collection/{id}/items" : { "get" : { - "summary" : "GET /api/dashboard/{id}/related", - "description" : "Return related entities.", + "summary" : "GET /api/collection/{id}/items", + "description" : "Fetch a specific Collection's items with the following options:\n\n * `models` - only include objects of a specific set of `models`. If unspecified, returns objects of all models\n * `archived` - when `true`, return archived objects *instead* of unarchived ones. Defaults to `false`.\n * `pinned_state` - when `is_pinned`, return pinned objects only.\n when `is_not_pinned`, return non pinned objects only.\n when `all`, return everything. By default returns everything.\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", "parameters" : [ { "in" : "path", "name" : "id", @@ -5583,25 +3726,20 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/database/" : { - "get" : { - "summary" : "GET /api/database/", - "description" : "Fetch all `Databases`.\n\n * `include=tables` means we should hydrate the Tables belonging to each DB. Default: `false`.\n\n * `saved` means we should include the saved questions virtual database. Default: `false`.\n\n * `include_editable_data_model` will only include DBs for which the current user has data model editing\n permissions. (If `include=tables`, this also applies to the list of tables in each DB). Should only be used if\n Enterprise Edition code is available the advanced-permissions feature is enabled.\n\n * `exclude_uneditable_details` will only include DBs for which the current user can edit the DB details. Has no\n effect unless Enterprise Edition code is available and the advanced-permissions feature is enabled.\n\n * `include_only_uploadable` will only include DBs into which Metabase can insert new data.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.warehouses.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.warehouses.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", - "parameters" : [ { + }, { "in" : "query", - "name" : "include", + "name" : "models", "required" : false, "schema" : { - "const" : "tables" - }, - "description" : "include must be either empty or the value 'tables'" + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] + } + } }, { "in" : "query", - "name" : "include_analytics", + "name" : "archived", "required" : false, "schema" : { "type" : "boolean", @@ -5609,155 +3747,410 @@ } }, { "in" : "query", - "name" : "saved", + "name" : "pinned_state", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "string", + "enum" : [ "is_not_pinned", "is_pinned", "all" ] } }, { "in" : "query", - "name" : "include_editable_data_model", + "name" : "sort_column", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "string", + "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] } }, { "in" : "query", - "name" : "exclude_uneditable_details", + "name" : "sort_direction", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "string", + "enum" : [ "desc", "asc" ] } }, { "in" : "query", - "name" : "include_only_uploadable", + "name" : "official_collections_first", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "boolean" } }, { "in" : "query", - "name" : "router_database_id", + "name" : "show_dashboard_questions", "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + } ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/{id}/move-dashboard-question-candidates" : { + "post" : { + "summary" : "POST /api/collection/{id}/move-dashboard-question-candidates", + "description" : "Move candidate cards to the dashboards they appear in.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "card_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "uniqueItems" : true + } + }, + "optional" : true + } + } + } + }, + "tags" : [ "/api/collection" ] + } + }, + "/api/dashboard/" : { + "get" : { + "summary" : "GET /api/dashboard/", + "description" : "This endpoint is currently unused by the Metabase frontend and may be out of date with the rest of the application.\n It only exists for backwards compatibility and may be removed in the future.\n\n Get `Dashboards`. With filter option `f` (default `all`), restrict results as follows:\n * `all` - Return all Dashboards.\n * `mine` - Return Dashboards created by the current user.\n * `archived` - Return Dashboards that have been archived. (By default, these are *excluded*.)", + "parameters" : [ { + "in" : "query", + "name" : "f", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "all", "mine", "archived" ] + } + } ], + "tags" : [ "/api/dashboard" ] }, "post" : { - "summary" : "POST /api/database/", - "description" : "Add a new `Database`.", + "summary" : "POST /api/dashboard/", + "description" : "Create a new Dashboard.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "description" : { + "type" : "string" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + } + }, + "required" : [ "name" ] + } + } + } + }, + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/embeddable" : { + "get" : { + "summary" : "GET /api/dashboard/embeddable", + "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", "parameters" : [ ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/params/valid-filter-fields" : { + "get" : { + "summary" : "GET /api/dashboard/params/valid-filter-fields", + "description" : "Utility endpoint for powering Dashboard UI. Given some set of `filtered` Field IDs (presumably Fields used in\n parameters) and a set of `filtering` Field IDs that will be used to restrict values of `filtered` Fields, for each\n `filtered` Field ID return the subset of `filtering` Field IDs that would actually be used in a chain filter query\n with these Fields.\n\n e.g. in a chain filter query like\n\n GET /api/dashboard/10/params/PARAM_1/values?PARAM_2=100\n\n Assume `PARAM_1` maps to Field 1 and `PARAM_2` maps to Fields 2 and 3. The underlying MBQL query may or may not\n filter against Fields 2 and 3, depending on whether an FK relationship that lets us create a join against Field 1\n can be found. You can use this endpoint to determine which of those Fields is actually used:\n\n GET /api/dashboard/params/valid-filter-fields?filtered=1&filtering=2&filtering=3\n ;; ->\n {1 [2 3]}\n\n Results are returned as a map of\n\n `filtered` Field ID -> subset of `filtering` Field IDs that would be used in chain filter query", + "parameters" : [ { + "in" : "query", + "name" : "filtered", + "required" : true, + "schema" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + } + }, { + "in" : "query", + "name" : "filtering", + "required" : false, + "schema" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + } + } ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { + "post" : { + "summary" : "POST /api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", + "description" : "Run a pivot table query for a specific DashCard.", + "parameters" : [ { + "in" : "path", + "name" : "dashboard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "dashcard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "name" : { - "type" : "string", - "minLength" : 1 - }, - "is_on_demand" : { - "type" : "boolean", - "default" : false - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "engine" : { - "description" : "value must be a valid database engine.", - "type" : "string", - "minLength" : 1 - }, - "details" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "is_full_sync" : { - "type" : "boolean", - "default" : true - }, - "connection_source" : { - "type" : "string", - "enum" : [ "admin", "setup" ], - "default" : "admin" - }, - "auto_run_queries" : { - "type" : "boolean" - }, - "schedules" : { - "$ref" : "#/components/schemas/metabase.sync.schedules.ExpandedSchedulesMap" + "parameters" : { + "type" : "array", + "items" : { + "description" : "value must be a parameter map with an 'id' key", + "allOf" : [ { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "type" : "object", + "additionalProperties" : { } + } ] + } } - }, - "required" : [ "name", "engine", "details" ] + } } } } }, - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/sample_database" : { - "post" : { - "summary" : "POST /api/database/sample_database", - "description" : "Add the sample database as a new `Database`.", + "/api/dashboard/public" : { + "get" : { + "summary" : "GET /api/dashboard/public", + "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", "parameters" : [ ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/validate" : { + "/api/dashboard/save" : { "post" : { - "summary" : "POST /api/database/validate", - "description" : "Validate that we can connect to a database given a set of details.", + "summary" : "POST /api/dashboard/save", + "description" : "Save a denormalized description of dashboard.", "parameters" : [ ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/save/collection/{parent-collection-id}" : { + "post" : { + "summary" : "POST /api/dashboard/save/collection/{parent-collection-id}", + "description" : "Save a denormalized description of dashboard into collection with ID `:parent-collection-id`.", + "parameters" : [ { + "in" : "path", + "name" : "parent-collection-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { + "post" : { + "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", + "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it.", + "parameters" : [ { + "in" : "path", + "name" : "dashboard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "dashcard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "details" : { - "type" : "object", - "properties" : { - "details" : { + "dashboard_load_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "value must be a parameter map with an 'id' key", + "allOf" : [ { "type" : "object", - "properties" : { } - }, - "engine" : { - "description" : "value must be a valid database engine.", - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "engine", "details" ] + "properties" : { + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "type" : "object", + "additionalProperties" : { } + } ] + } } - }, - "required" : [ "details" ] + } } } } }, - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}" : { - "get" : { - "summary" : "GET /api/database/{id}", - "description" : "Get a single Database with `id`. Optionally pass `?include=tables` or `?include=tables.fields` to include the Tables\n belonging to this database, or the Tables and Fields, respectively. If the requestor has write permissions for the\n DB\n (i.e. is an admin or has data model permissions), then certain inferred secret values will also be included in the\n returned details (see [[metabase.secrets.models.secret/expand-db-details-inferred-secret-values]] for full details).\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.warehouses.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.warehouses.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", + "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}" : { + "post" : { + "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}", + "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it, and return\n its results as a file in the specified format.\n\n `parameters` should be passed as query parameter encoded as a serialized JSON string (this is because this endpoint\n is normally used to power 'Download Results' buttons that use HTML `form` actions).", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -5765,42 +4158,31 @@ }, "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "include", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "tables", "tables.fields" ] - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, + "in" : "path", + "name" : "dashcard-id", + "required" : true, "schema" : { - "type" : "boolean" - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "exclude_uneditable_details", - "required" : false, - "schema" : { - "type" : "boolean" - } - } ], - "tags" : [ "/api/database" ] - }, - "put" : { - "summary" : "PUT /api/database/{id}", - "description" : "Update a `Database`.", - "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "card-id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "export-format", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] + } } ], "requestBody" : { "content" : { @@ -5808,78 +4190,63 @@ "schema" : { "type" : "object", "properties" : { - "points_of_interest" : { - "type" : "string" - }, - "settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "engine" : { - "description" : "value must be a valid database engine.", - "type" : "string", - "minLength" : 1 - }, - "details" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "auto_run_queries" : { + "format_rows" : { + "default" : false, "type" : "boolean" }, - "caveats" : { - "type" : "string" + "parameters" : { + "anyOf" : [ { + "type" : "array", + "items" : { + "description" : "value must be a parameter map with an 'id' key", + "allOf" : [ { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "type" : "object", + "additionalProperties" : { } + } ] + } + }, { + "description" : "value must be a valid JSON string.", + "type" : "string" + } ] }, - "refingerprint" : { + "pivot_results" : { + "default" : false, "type" : "boolean" - }, - "schedules" : { - "$ref" : "#/components/schemas/metabase.sync.schedules.ExpandedSchedulesMap" - }, - "description" : { - "type" : "string" } - } + }, + "required" : [ "format_rows", "pivot_results" ] } } } }, - "tags" : [ "/api/database" ] - }, - "delete" : { - "summary" : "DELETE /api/database/{id}", - "description" : "Delete a `Database`.", + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute" : { + "get" : { + "summary" : "GET /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", + "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/autocomplete_suggestions" : { - "get" : { - "summary" : "GET /api/database/{id}/autocomplete_suggestions", - "description" : "Return a list of autocomplete suggestions for a given `prefix`, or `substring`. Should only specify one, but\n `substring` will have priority if both are present.\n\n This is intended for use with the ACE Editor when the User is typing raw SQL. Suggestions include matching `Tables`\n and `Fields` in this `Database`.\n\n Tables are returned in the format `[table_name \"Table\"]`;\n When Fields have a semantic_type, they are returned in the format `[field_name \"table_name base_type semantic_type\"]`\n When Fields lack a semantic_type, they are returned in the format `[field_name \"table_name base_type\"]`", - "parameters" : [ { + }, { "in" : "path", - "name" : "id", + "name" : "dashcard-id", "required" : true, "schema" : { "type" : "integer", @@ -5888,31 +4255,21 @@ "description" : "value must be an integer greater than zero." }, { "in" : "query", - "name" : "prefix", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "substring", + "name" : "parameters", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "type" : "string" + }, + "description" : "value must be a valid JSON string." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/card_autocomplete_suggestions" : { - "get" : { - "summary" : "GET /api/database/{id}/card_autocomplete_suggestions", - "description" : "Return a list of `Card` autocomplete suggestions for a given `query` in a given `Database`.\n\n This is intended for use with the ACE Editor when the User is typing in a template tag for a `Card`, e.g. {{#...}}.", + "tags" : [ "/api/dashboard" ] + }, + "post" : { + "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", + "description" : "Execute the associated Action in the context of a `Dashboard` and `DashboardCard` that includes it.\n\n `parameters` should be the mapped dashboard parameters with values.\n `extra_parameters` should be the extra, user entered parameter values.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -5920,31 +4277,40 @@ }, "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "query", + "in" : "path", + "name" : "dashcard-id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "include_dashboard_questions", - "required" : false, - "schema" : { - "type" : "boolean" - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "parameters" : { + "type" : "object", + "additionalProperties" : { } + } + } + } + } + } + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/discard_values" : { + "/api/dashboard/{dashboard-id}/public_link" : { "post" : { - "summary" : "POST /api/database/{id}/discard_values", - "description" : "Discards all saved field values for this `Database`.", + "summary" : "POST /api/dashboard/{dashboard-id}/public_link", + "description" : "Generate publicly-accessible links for this Dashboard. Returns UUID to be used in public links. (If this\n Dashboard has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -5952,16 +4318,14 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/dismiss_spinner" : { - "post" : { - "summary" : "POST /api/database/{id}/dismiss_spinner", - "description" : "Manually set the initial sync status of the `Database` and corresponding\n tables to be `complete` (see #20863)", + "tags" : [ "/api/dashboard" ] + }, + "delete" : { + "summary" : "DELETE /api/dashboard/{dashboard-id}/public_link", + "description" : "Delete the publicly-accessible link to this Dashboard.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -5969,16 +4333,16 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/fields" : { - "get" : { - "summary" : "GET /api/database/{id}/fields", - "description" : "Get a list of all `Fields` in `Database`.", + "/api/dashboard/{from-dashboard-id}/copy" : { + "post" : { + "summary" : "POST /api/dashboard/{from-dashboard-id}/copy", + "description" : "Copy a Dashboard.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "from-dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -5986,13 +4350,46 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "description" : { + "type" : "string" + }, + "is_deep_copy" : { + "type" : "boolean", + "default" : false + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ ] + } + } + } + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/healthcheck" : { + "/api/dashboard/{id}" : { "get" : { - "summary" : "GET /api/database/{id}/healthcheck", - "description" : "Reports whether the database can currently connect", + "summary" : "GET /api/dashboard/{id}", + "description" : "Get Dashboard with ID.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6003,13 +4400,11 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/idfields" : { - "get" : { - "summary" : "GET /api/database/{id}/idfields", - "description" : "Get a list of all primary key `Fields` for `Database`.", + "tags" : [ "/api/dashboard" ] + }, + "delete" : { + "summary" : "DELETE /api/dashboard/{id}", + "description" : "Hard delete a Dashboard. To soft delete, use `PUT /api/dashboard/:id`\n\n This will remove also any questions/models/segments/metrics that use this database.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6020,13 +4415,11 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/metadata" : { - "get" : { - "summary" : "GET /api/database/{id}/metadata", - "description" : "Get metadata about a `Database`, including all of its `Tables` and `Fields`. Returns DB, fields, and field values.\n By default only non-hidden tables and fields are returned. Passing include_hidden=true includes them.\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.", + "tags" : [ "/api/dashboard" ] + }, + "put" : { + "summary" : "PUT /api/dashboard/{id}", + "description" : "Update a Dashboard, and optionally the `dashcards` and `tabs` of a Dashboard. The request body should be a JSON object with the same\n structure as the response from `GET /api/dashboard/:id`.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6036,46 +4429,205 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "remove_inactive", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "skip_fields", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "points_of_interest" : { + "type" : "string" + }, + "enable_embedding" : { + "type" : "boolean" + }, + "width" : { + "type" : "string", + "enum" : [ "fixed", "full" ] + }, + "show_in_getting_started" : { + "type" : "boolean" + }, + "position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "archived" : { + "type" : "boolean" + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "embedding_params" : { + "type" : "object", + "additionalProperties" : { + "type" : "string", + "enum" : [ "disabled", "enabled", "locked" ] + }, + "description" : "value must be a valid embedding params map." + }, + "tabs" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be an integer.", + "type" : "integer" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id", "name" ] + } + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "caveats" : { + "type" : "string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + }, + "dashcards" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "col" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "id" : { + "type" : "integer" + }, + "parameter_mappings" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] + } + }, + "row" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "series" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "size_x" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "size_y" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "id", "size_x", "size_y", "row", "col" ] + } + }, + "description" : { + "type" : "string" + } + } + } + } } - } ], - "tags" : [ "/api/database" ] + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/rescan_values" : { - "post" : { - "summary" : "POST /api/database/{id}/rescan_values", - "description" : "Trigger a manual scan of the field values for this `Database`.", + "/api/dashboard/{id}/cards" : { + "put" : { + "summary" : "PUT /api/dashboard/{id}/cards", + "description" : "(DEPRECATED -- Use the `PUT /api/dashboard/:id` endpoint instead.)\n Update `Cards` and `Tabs` on a Dashboard. Request body should have the form:\n\n {:cards [{:id ... ; DashboardCard ID\n :size_x ...\n :size_y ...\n :row ...\n :col ...\n :parameter_mappings ...\n :series [{:id 123\n ...}]}\n ...]\n :tabs [{:id ... ; DashboardTab ID\n :name ...}]}", "parameters" : [ { "in" : "path", "name" : "id", @@ -6086,46 +4638,96 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/schema/" : { - "get" : { - "summary" : "GET /api/database/{id}/schema/", - "description" : "Return a list of Tables for a Database whose `schema` is `nil` or an empty string.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "cards" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "col" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "id" : { + "type" : "integer" + }, + "parameter_mappings" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] + } + }, + "row" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "series" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "size_x" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "size_y" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "id", "size_x", "size_y", "row", "col" ] + } + }, + "tabs" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be an integer.", + "type" : "integer" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id", "name" ] + } + } + }, + "required" : [ "cards" ] + } + } } - } ], - "tags" : [ "/api/database" ] + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/schema/{schema}" : { + "/api/dashboard/{id}/items" : { "get" : { - "summary" : "GET /api/database/{id}/schema/{schema}", - "description" : "Returns a list of Tables for the given Database `id` and `schema`", + "summary" : "GET /api/dashboard/{id}/items", + "description" : "Get Dashboard with ID.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6135,30 +4737,14 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/schemas" : { + "/api/dashboard/{id}/params/{param-key}/search/{query}" : { "get" : { - "summary" : "GET /api/database/{id}/schemas", - "description" : "Returns a list of all the schemas with tables found for the database `id`. Excludes schemas with no tables.", + "summary" : "GET /api/dashboard/{id}/params/{param-key}/search/{query}", + "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`. Optionally restrict\n these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that contain 'Cam' and are possible when parameter 'def' is set\n ;; to 100\n GET /api/dashboard/1/params/abc/search/Cam?def=100\n\n Currently limited to first 1000 results.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6169,29 +4755,21 @@ }, "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, + "in" : "path", + "name" : "query", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/sync_schema" : { - "post" : { - "summary" : "POST /api/database/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Database`.", + "/api/dashboard/{id}/params/{param-key}/values" : { + "get" : { + "summary" : "GET /api/dashboard/{id}/params/{param-key}/values", + "description" : "Fetch possible values of the parameter whose ID is `:param-key`. If the values come directly from a query, optionally\n restrict these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that are possible when parameter 'def' is set to 100\n GET /api/dashboard/1/params/abc/values?def=100", "parameters" : [ { "in" : "path", "name" : "id", @@ -6202,13 +4780,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/syncable_schemas" : { + "/api/dashboard/{id}/query_metadata" : { "get" : { - "summary" : "GET /api/database/{id}/syncable_schemas", - "description" : "Returns a list of all syncable schemas found for the database `id`.", + "summary" : "GET /api/dashboard/{id}/query_metadata", + "description" : "Get all of the required query metadata for the cards on dashboard.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6219,13 +4797,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/usage_info" : { + "/api/dashboard/{id}/related" : { "get" : { - "summary" : "GET /api/database/{id}/usage_info", - "description" : "Get usage info for a database.\n Returns a map with keys are models and values are the number of entities that use this database.", + "summary" : "GET /api/dashboard/{id}/related", + "description" : "Return related entities.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6236,171 +4814,76 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/datasets" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/datasets", - "description" : "Returns a list of all the datasets found for the saved questions virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/datasets/{schema}" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", - "description" : "Returns a list of Tables for the datasets virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/metadata" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/metadata", - "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/schema/{schema}" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/schema/{schema}", - "description" : "Returns a list of Tables for the saved questions virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{virtual-db}/schemas" : { + "/api/database/" : { "get" : { - "summary" : "GET /api/database/{virtual-db}/schemas", - "description" : "Returns a list of all the schemas found for the saved questions virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/dataset/" : { - "post" : { - "summary" : "POST /api/dataset/", - "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database" : { - "type" : "integer" - } - } - } - } - } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/native" : { - "post" : { - "summary" : "POST /api/dataset/native", - "description" : "Fetch a native version of an MBQL query.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "pretty" : { - "type" : "boolean", - "default" : true - } - }, - "required" : [ "database" ] - } - } + "summary" : "GET /api/database/", + "description" : "Fetch all `Databases`.\n\n * `include=tables` means we should hydrate the Tables belonging to each DB. Default: `false`.\n\n * `saved` means we should include the saved questions virtual database. Default: `false`.\n\n * `include_editable_data_model` will only include DBs for which the current user has data model editing\n permissions. (If `include=tables`, this also applies to the list of tables in each DB). Should only be used if\n Enterprise Edition code is available the advanced-permissions feature is enabled.\n\n * `exclude_uneditable_details` will only include DBs for which the current user can edit the DB details. Has no\n effect unless Enterprise Edition code is available and the advanced-permissions feature is enabled.\n\n * `include_only_uploadable` will only include DBs into which Metabase can insert new data.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", + "parameters" : [ { + "in" : "query", + "name" : "include", + "required" : false, + "schema" : { + "const" : "tables" + }, + "description" : "include must be either empty or the value 'tables'" + }, { + "in" : "query", + "name" : "include_analytics", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/parameter/remapping" : { - "post" : { - "summary" : "POST /api/dataset/parameter/remapping", - "description" : "Return the remapped parameter values for cards or dashboards that are being edited.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "field_ids" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - } - }, - "parameter" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - }, - "value" : { } - }, - "required" : [ "parameter", "value" ] - } - } + }, { + "in" : "query", + "name" : "saved", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/parameter/search/{query}" : { - "post" : { - "summary" : "POST /api/dataset/parameter/search/{query}", - "description" : "Return parameter values for cards or dashboards that are being edited. Expects a query string at `?query=foo`.", - "parameters" : [ { - "in" : "path", - "name" : "query", - "required" : true, + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 + "type" : "boolean", + "default" : false } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "field_ids" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - } - }, - "parameter" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } - }, - "required" : [ "parameter" ] - } - } + }, { + "in" : "query", + "name" : "exclude_uneditable_details", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/parameter/values" : { + }, { + "in" : "query", + "name" : "include_only_uploadable", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "router_database_id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] + }, "post" : { - "summary" : "POST /api/dataset/parameter/values", - "description" : "Return parameter values for cards or dashboards that are being edited.", + "summary" : "POST /api/database/", + "description" : "Add a new `Database`.", "parameters" : [ ], "requestBody" : { "content" : { @@ -6408,53 +4891,64 @@ "schema" : { "type" : "object", "properties" : { - "field_ids" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - } + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "parameter" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" + "is_on_demand" : { + "type" : "boolean", + "default" : false + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "engine" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "is_full_sync" : { + "type" : "boolean", + "default" : true + }, + "connection_source" : { + "type" : "string", + "enum" : [ "admin", "setup" ], + "default" : "admin" + }, + "auto_run_queries" : { + "type" : "boolean" + }, + "schedules" : { + "$ref" : "#/components/schemas/metabase.sync.schedules~1ExpandedSchedulesMap" } }, - "required" : [ "parameter" ] + "required" : [ "name", "engine", "details" ] } } } }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] } }, - "/api/dataset/pivot" : { + "/api/database/sample_database" : { "post" : { - "summary" : "POST /api/dataset/pivot", - "description" : "Generate a pivoted dataset for an ad-hoc query", + "summary" : "POST /api/database/sample_database", + "description" : "Add the sample database as a new `Database`.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "database" ] - } - } - } - }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] } }, - "/api/dataset/query_metadata" : { + "/api/database/validate" : { "post" : { - "summary" : "POST /api/dataset/query_metadata", - "description" : "Get all of the required query metadata for an ad-hoc query.", + "summary" : "POST /api/database/validate", + "description" : "Validate that we can connect to a database given a set of details.", "parameters" : [ ], "requestBody" : { "content" : { @@ -6462,112 +4956,191 @@ "schema" : { "type" : "object", "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "details" : { + "type" : "object", + "properties" : { + "details" : { + "type" : "object", + "properties" : { } + }, + "engine" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "engine", "details" ] } }, - "required" : [ "database" ] + "required" : [ "details" ] } } } }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] } }, - "/api/dataset/{export-format}" : { - "post" : { - "summary" : "POST /api/dataset/{export-format}", - "description" : "Execute a query and download the result data as a file in the specified format.", + "/api/database/{id}" : { + "get" : { + "summary" : "GET /api/database/{id}", + "description" : "Get a single Database with `id`. Optionally pass `?include=tables` or `?include=tables.fields` to include the Tables\n belonging to this database, or the Tables and Fields, respectively. If the requestor has write permissions for the DB\n (i.e. is an admin or has data model permissions), then certain inferred secret values will also be included in the\n returned details (see [[metabase.models.secret/expand-db-details-inferred-secret-values]] for full details).\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", "parameters" : [ { "in" : "path", - "name" : "export-format", + "name" : "id", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "include", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "tables", "tables.fields" ] + } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean" + } + }, { + "in" : "query", + "name" : "exclude_uneditable_details", + "required" : false, + "schema" : { + "type" : "boolean" } } ], + "tags" : [ "/api/database" ] + }, + "put" : { + "summary" : "PUT /api/database/{id}", + "description" : "Update a `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "format_rows" : { - "default" : false, - "type" : "boolean" - }, - "pivot_results" : { - "default" : false, - "type" : "boolean" + "points_of_interest" : { + "type" : "string" }, - "query" : { + "settings" : { + "description" : "Value must be a map.", "type" : "object", "properties" : { } }, - "visualization_settings" : { - "default" : { }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "engine" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { + "description" : "Value must be a map.", "type" : "object", "properties" : { } + }, + "auto_run_queries" : { + "type" : "boolean" + }, + "caveats" : { + "type" : "string" + }, + "refingerprint" : { + "type" : "boolean" + }, + "schedules" : { + "$ref" : "#/components/schemas/metabase.sync.schedules~1ExpandedSchedulesMap" + }, + "description" : { + "type" : "string" } - }, - "required" : [ "query", "visualization_settings", "format_rows", "pivot_results" ] + } } } } }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] + }, + "delete" : { + "summary" : "DELETE /api/database/{id}", + "description" : "Delete a `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/advanced-permissions/application/graph" : { + "/api/database/{id}/autocomplete_suggestions" : { "get" : { - "summary" : "GET /api/ee/advanced-permissions/application/graph", - "description" : "Fetch a graph of Application Permissions.", - "parameters" : [ ], - "tags" : [ "/api/ee/advanced-permissions/application" ] - }, - "put" : { - "summary" : "PUT /api/ee/advanced-permissions/application/graph", - "description" : "Do a batch update of Application Permissions by passing a modified graph.", + "summary" : "GET /api/database/{id}/autocomplete_suggestions", + "description" : "Return a list of autocomplete suggestions for a given `prefix`, or `substring`. Should only specify one, but\n `substring` will have priority if both are present.\n\n This is intended for use with the ACE Editor when the User is typing raw SQL. Suggestions include matching `Tables`\n and `Fields` in this `Database`.\n\n Tables are returned in the format `[table_name \"Table\"]`;\n When Fields have a semantic_type, they are returned in the format `[field_name \"table_name base_type semantic_type\"]`\n When Fields lack a semantic_type, they are returned in the format `[field_name \"table_name base_type\"]`", "parameters" : [ { - "in" : "query", - "name" : "skip-graph", - "required" : false, + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "prefix", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", - "name" : "force", + "name" : "substring", "required" : false, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { } - } - } - } - }, - "tags" : [ "/api/ee/advanced-permissions/application" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/advanced-permissions/impersonation/" : { + "/api/database/{id}/card_autocomplete_suggestions" : { "get" : { - "summary" : "GET /api/ee/advanced-permissions/impersonation/", - "description" : "Fetch a list of all Impersonation policies currently in effect, or a single policy if both `group_id` and `db_id`\n are provided.", + "summary" : "GET /api/database/{id}/card_autocomplete_suggestions", + "description" : "Return a list of `Card` autocomplete suggestions for a given `query` in a given `Database`.\n\n This is intended for use with the ACE Editor when the User is typing in a template tag for a `Card`, e.g. {{#...}}.", "parameters" : [ { - "in" : "query", - "name" : "group_id", - "required" : false, + "in" : "path", + "name" : "id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 @@ -6575,21 +5148,44 @@ "description" : "value must be an integer greater than zero." }, { "in" : "query", - "name" : "db_id", + "name" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "include_dashboard_questions", "required" : false, + "schema" : { + "type" : "boolean" + } + } ], + "tags" : [ "/api/database" ] + } + }, + "/api/database/{id}/discard_values" : { + "post" : { + "summary" : "POST /api/database/{id}/discard_values", + "description" : "Discards all saved field values for this `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/advanced-permissions/impersonation" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/advanced-permissions/impersonation/{id}" : { - "delete" : { - "summary" : "DELETE /api/ee/advanced-permissions/impersonation/{id}", - "description" : "Delete a Connection Impersonation entry.", + "/api/database/{id}/dismiss_spinner" : { + "post" : { + "summary" : "POST /api/database/{id}/dismiss_spinner", + "description" : "Manually set the initial sync status of the `Database` and corresponding\n tables to be `complete` (see #20863)", "parameters" : [ { "in" : "path", "name" : "id", @@ -6600,131 +5196,30 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/advanced-permissions/impersonation" ] - } - }, - "/api/ee/ai-entity-analysis/analyze-chart" : { - "post" : { - "summary" : "POST /api/ee/ai-entity-analysis/analyze-chart", - "description" : "Analyze a chart image using an AI vision model. This function sends the image data to a separate external AI service for analysis.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "image_base64" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "timeline_events" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "timestamp" : { - "type" : "string" - } - }, - "required" : [ "name", "timestamp" ] - } - } - }, - "required" : [ "image_base64" ] - } - } - } - }, - "tags" : [ "/api/ee/ai-entity-analysis" ] - } - }, - "/api/ee/ai-sql-fixer/fix" : { - "post" : { - "summary" : "POST /api/ee/ai-sql-fixer/fix", - "description" : "Suggest fixes for a SQL query.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "error_message" : { - "type" : "string" - }, - "query" : { - "type" : "object", - "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "database" ] - } - }, - "required" : [ "query", "error_message" ] - } - } - } - }, - "tags" : [ "/api/ee/ai-sql-fixer" ] - } - }, - "/api/ee/ai-sql-generation/generate" : { - "post" : { - "summary" : "POST /api/ee/ai-sql-generation/generate", - "description" : "Generate a SQL query.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "prompt" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "prompt", "database_id" ] - } - } - } - }, - "tags" : [ "/api/ee/ai-sql-generation" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/audit-app/user/audit-info" : { + "/api/database/{id}/fields" : { "get" : { - "summary" : "GET /api/ee/audit-app/user/audit-info", - "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", - "parameters" : [ ], - "tags" : [ "/api/ee/audit-app/user" ] + "summary" : "GET /api/database/{id}/fields", + "description" : "Get a list of all `Fields` in `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/audit-app/user/{id}/subscriptions" : { - "delete" : { - "summary" : "DELETE /api/ee/audit-app/user/{id}/subscriptions", - "description" : "Delete all Alert and DashboardSubscription subscriptions for a User (i.e., so they will no longer receive them).\n Archive all Alerts and DashboardSubscriptions created by the User. Only allowed for admins or for the current user.", + "/api/database/{id}/healthcheck" : { + "get" : { + "summary" : "GET /api/database/{id}/healthcheck", + "description" : "Reports whether the database can currently connect", "parameters" : [ { "in" : "path", "name" : "id", @@ -6735,84 +5230,30 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/audit-app/user" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/autodescribe/card/summarize" : { - "post" : { - "summary" : "POST /api/ee/autodescribe/card/summarize", - "description" : "Summarize a question.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "visualization_settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "dataset" : { - "type" : "boolean" - }, - "dataset_query" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter-mapping" - } - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "result_metadata" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultsMetadata" - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "display" : { - "type" : "string", - "minLength" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } - }, - "description" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "dataset_query", "display", "visualization_settings" ] - } - } - } - }, - "tags" : [ "/api/ee/autodescribe" ] + "/api/database/{id}/idfields" : { + "get" : { + "summary" : "GET /api/database/{id}/idfields", + "description" : "Get a list of all primary key `Fields` for `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/autodescribe/dashboard/summarize/{id}" : { - "post" : { - "summary" : "POST /api/ee/autodescribe/dashboard/summarize/{id}", - "description" : "Provide a summary of a dashboard.", + "/api/database/{id}/metadata" : { + "get" : { + "summary" : "GET /api/database/{id}/metadata", + "description" : "Get metadata about a `Database`, including all of its `Tables` and `Fields`. Returns DB, fields, and field values.\n By default only non-hidden tables and fields are returned. Passing include_hidden=true includes them.\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6822,125 +5263,129 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "include_hidden", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "remove_inactive", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "skip_fields", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } } ], - "tags" : [ "/api/ee/autodescribe" ] - } - }, - "/api/ee/billing/" : { - "get" : { - "summary" : "GET /api/ee/billing/", - "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", - "parameters" : [ ], - "tags" : [ "/api/ee/billing" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/content-translation/csv" : { - "get" : { - "summary" : "GET /api/ee/content-translation/csv", - "description" : "Provides content translation dictionary in CSV", - "parameters" : [ ], - "tags" : [ "/api/ee/content-translation" ] + "/api/database/{id}/rescan_values" : { + "post" : { + "summary" : "POST /api/database/{id}/rescan_values", + "description" : "Trigger a manual scan of the field values for this `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/content-translation/dictionary/{token}" : { + "/api/database/{id}/schema/" : { "get" : { - "summary" : "GET /api/ee/content-translation/dictionary/{token}", - "description" : "Fetch the content translation dictionary via a JSON Web Token signed with the `embedding-secret-key`.", + "summary" : "GET /api/database/{id}/schema/", + "description" : "Return a list of Tables for a Database whose `schema` is `nil` or an empty string.", "parameters" : [ { "in" : "path", - "name" : "token", + "name" : "id", "required" : true, "schema" : { - "type" : "string" + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "include_hidden", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - } ], - "tags" : [ "/api/ee/content-translation" ] - } - }, - "/api/ee/content-translation/upload-dictionary" : { - "post" : { - "summary" : "POST /api/ee/content-translation/upload-dictionary", - "description" : "Upload a CSV of content translations", - "parameters" : [ ], - "requestBody" : { - "content" : { - "multipart/form-data" : { - "schema" : { - "type" : "object", - "properties" : { - "file" : { - "type" : "object", - "properties" : { - "filename" : { - "type" : "string" - }, - "tempfile" : { } - }, - "required" : [ "filename", "tempfile" ] - } - }, - "required" : [ "file" ] - } - } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/content-translation" ] + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/database-routing/destination-database" : { - "post" : { - "summary" : "POST /api/ee/database-routing/destination-database", - "description" : "Create new Destination Databases.\n\n Note that unlike the normal `POST /api/database` endpoint, does NOT check the details before adding the Database.\n\n This is OK, it's not an invariant that all database details are always valid, but it's something to note.", + "/api/database/{id}/schema/{schema}" : { + "get" : { + "summary" : "GET /api/database/{id}/schema/{schema}", + "description" : "Returns a list of Tables for the given Database `id` and `schema`", "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { "in" : "query", - "name" : "check_connection_details", + "name" : "include_hidden", "required" : false, "schema" : { - "type" : "boolean" + "type" : "boolean", + "default" : false } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "destinations" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "details" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "name", "details" ] - } - }, - "router_database_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "router_database_id", "destinations" ] - } - } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/database-routing" ] + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/database-routing/router-database/{id}" : { - "put" : { - "summary" : "PUT /api/ee/database-routing/router-database/{id}", - "description" : "Updates an existing Database with the `user_attribute` to route on. Will either:\n - turn an existing Database into a Router database\n - change the `user_attribute` used to route for an existing Router database, or\n - turn a Router database into a regular Database\n depending on the value of `user_attribute`", + "/api/database/{id}/schemas" : { + "get" : { + "summary" : "GET /api/database/{id}/schemas", + "description" : "Returns a list of all the schemas with tables found for the database `id`. Excludes schemas with no tables.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6950,244 +5395,121 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "user_attribute" : { - "type" : "string", - "minLength" : 1 - } - } - } - } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/database-routing" ] - } - }, - "/api/ee/gsheets/connection" : { - "post" : { - "summary" : "POST /api/ee/gsheets/connection", - "description" : "Hook up a new google drive folder or sheet that will be watched and have its content ETL'd into Metabase.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url" ] - } - } + }, { + "in" : "query", + "name" : "include_hidden", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/gsheets" ] - }, - "get" : { - "summary" : "GET /api/ee/gsheets/connection", - "description" : "Check the status of a connection. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/gsheets/connection", - "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/gsheets/connection/sync" : { + "/api/database/{id}/sync_schema" : { "post" : { - "summary" : "POST /api/ee/gsheets/connection/sync", - "description" : "Force a sync of the connection now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] + "summary" : "POST /api/database/{id}/sync_schema", + "description" : "Trigger a manual update of the schema metadata for this `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/gsheets/service-account" : { + "/api/database/{id}/syncable_schemas" : { "get" : { - "summary" : "GET /api/ee/gsheets/service-account", - "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] + "summary" : "GET /api/database/{id}/syncable_schemas", + "description" : "Returns a list of all syncable schemas found for the database `id`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/logs/query_execution/{yyyy-mm}" : { + "/api/database/{id}/usage_info" : { "get" : { - "summary" : "GET /api/ee/logs/query_execution/{yyyy-mm}", - "description" : "Fetch rows for the month specified by `:yyyy-mm` from the query_execution logs table.\n Must be a superuser.", + "summary" : "GET /api/database/{id}/usage_info", + "description" : "Get usage info for a database.\n Returns a map with keys are models and values are the number of entities that use this database.", "parameters" : [ { "in" : "path", - "name" : "yyyy-mm", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "pattern" : "\\d{4}-\\d{2}" + "type" : "integer", + "minimum" : 1 }, - "description" : "Must be a string like 2020-04 or 2222-11." + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/logs" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/answer-sources" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/answer-sources", - "description" : "Return top level meta information about available information sources.", + "/api/database/{virtual-db}/datasets" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/datasets", + "description" : "Returns a list of all the datasets found for the saved questions virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.answer-sources-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/create-dashboard-subscription" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/create-dashboard-subscription", - "description" : "Create a dashboard subscription.", + "/api/database/{virtual-db}/datasets/{schema}" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", + "description" : "Returns a list of Tables for the datasets virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/field-values" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/field-values", - "description" : "Return statistics and/or values for a given field of a given entity.", + "/api/database/{virtual-db}/metadata" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/metadata", + "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/filter-records" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/filter-records", - "description" : "Construct a query from a metric.", + "/api/database/{virtual-db}/schema/{schema}" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/schema/{schema}", + "description" : "Returns a list of Tables for the saved questions virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter-records-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/find-metric" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/find-metric", - "description" : "Find a metric matching a description.", + "/api/database/{virtual-db}/schemas" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/schemas", + "description" : "Returns a list of all the schemas found for the saved questions virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "type" : "object", - "properties" : { - "message" : { - "type" : "string" - } - }, - "required" : [ "message" ] - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/find-outliers" : { + "/api/dataset/" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/find-outliers", - "description" : "Find outliers in the values provided by a data source for a given column.", + "summary" : "POST /api/dataset/", + "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7195,27 +5517,21 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "database" : { + "type" : "integer" } - }, - "required" : [ "arguments", "conversation_id" ] + } } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/generate-insights" : { + "/api/dataset/native" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/generate-insights", - "description" : "Generate insights.", + "summary" : "POST /api/dataset/native", + "description" : "Fetch a native version of an MBQL query.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7223,106 +5539,116 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" + "database" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "pretty" : { + "type" : "boolean", + "default" : true } }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-tools/get-current-user" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/get-current-user", - "description" : "Get information about user that started the conversation.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.tool-request" + "required" : [ "database" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-dashboard-details" : { + "/api/dataset/parameter/search/{query}" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-dashboard-details", - "description" : "Get information about a given dashboard.", - "parameters" : [ ], + "summary" : "POST /api/dataset/parameter/search/{query}", + "description" : "Return parameter values for cards or dashboards that are being edited. Expects a query string at `?query=foo`.", + "parameters" : [ { + "in" : "path", + "name" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "arguments" : { + "field_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "parameter" : { + "description" : "parameter must be a map with :id and :type keys", "type" : "object", "properties" : { - "dashboard_id" : { - "type" : "integer" - } + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } }, - "required" : [ "dashboard_id" ] - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-tools/get-metric-details" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/get-metric-details", - "description" : "Get information about a given metric.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "required" : [ "id", "type" ] } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "parameter" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-query-details" : { + "/api/dataset/parameter/values" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-query-details", - "description" : "Get information about a given query.", + "summary" : "POST /api/dataset/parameter/values", + "description" : "Return parameter values for cards or dashboards that are being edited.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7330,34 +5656,79 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { + "field_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "parameter" : { + "description" : "parameter must be a map with :id and :type keys", "type" : "object", "properties" : { - "query" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { "type" : "object", - "properties" : { } - } + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } }, - "required" : [ "query" ] - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "required" : [ "id", "type" ] } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "parameter" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-report-details" : { + "/api/dataset/pivot" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-report-details", - "description" : "Get information about a given report.", + "summary" : "POST /api/dataset/pivot", + "description" : "Generate a pivoted dataset for an ad-hoc query", "parameters" : [ ], "requestBody" : { "content" : { @@ -7365,27 +5736,23 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "database" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } - }, - "required" : [ "arguments", "conversation_id" ] + } } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-table-details" : { + "/api/dataset/query_metadata" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-table-details", - "description" : "Get information about a given table or model.", + "summary" : "POST /api/dataset/query_metadata", + "description" : "Get all of the required query metadata for an ad-hoc query.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7393,107 +5760,135 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "database" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "database" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/query-metric" : { + "/api/dataset/{export-format}" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/query-metric", - "description" : "Construct a query from a metric.", - "parameters" : [ ], + "summary" : "POST /api/dataset/{export-format}", + "description" : "Execute a query and download the result data as a file in the specified format.", + "parameters" : [ { + "in" : "path", + "name" : "export-format", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] + } + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" + "format_rows" : { + "default" : false, + "type" : "boolean" }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "pivot_results" : { + "default" : false, + "type" : "boolean" + }, + "query" : { + "type" : "object", + "properties" : { } + }, + "visualization_settings" : { + "default" : { }, + "type" : "object", + "properties" : { } } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "query", "visualization_settings", "format_rows", "pivot_results" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/query-model" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/query-model", - "description" : "Construct a query from a model.", + "/api/ee/advanced-permissions/application/graph" : { + "get" : { + "summary" : "GET /api/ee/advanced-permissions/application/graph", + "description" : "Fetch a graph of Application Permissions.", "parameters" : [ ], + "tags" : [ "/api/ee/advanced-permissions/application" ] + }, + "put" : { + "summary" : "PUT /api/ee/advanced-permissions/application/graph", + "description" : "Do a batch update of Application Permissions by passing a modified graph.", + "parameters" : [ { + "in" : "query", + "name" : "skip-graph", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "force", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.query-model-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] + "properties" : { } } } } }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-v3/metabot/" : { - "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/", - "description" : "List configured metabot instances", - "parameters" : [ ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/advanced-permissions/application" ] } }, - "/api/ee/metabot-v3/metabot/{id}" : { + "/api/ee/advanced-permissions/impersonation/" : { "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/{id}", - "description" : "Retrieve one metabot instance", + "summary" : "GET /api/ee/advanced-permissions/impersonation/", + "description" : "Fetch a list of all Impersonation policies currently in effect, or a single policy if both `group_id` and `db_id`\n are provided.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "group_id", + "required" : false, "schema" : { "type" : "integer", "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "db_id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, - "/api/ee/metabot-v3/metabot/{id}/entities" : { - "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/{id}/entities", - "description" : "List the entities this metabot has access to", + "/api/ee/advanced-permissions/impersonation/{id}" : { + "delete" : { + "summary" : "DELETE /api/ee/advanced-permissions/impersonation/{id}", + "description" : "Delete a Connection Impersonation entry.", "parameters" : [ { "in" : "path", "name" : "id", @@ -7501,13 +5896,24 @@ "schema" : { "type" : "integer", "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - }, - "put" : { - "summary" : "PUT /api/ee/metabot-v3/metabot/{id}/entities", - "description" : "Update the entities this metabot has access to", + "tags" : [ "/api/ee/advanced-permissions/impersonation" ] + } + }, + "/api/ee/audit-app/user/audit-info" : { + "get" : { + "summary" : "GET /api/ee/audit-app/user/audit-info", + "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", + "parameters" : [ ], + "tags" : [ "/api/ee/audit-app/user" ] + } + }, + "/api/ee/audit-app/user/{id}/subscriptions" : { + "delete" : { + "summary" : "DELETE /api/ee/audit-app/user/{id}/subscriptions", + "description" : "Delete all Alert and DashboardSubscription subscriptions for a User (i.e., so they will no longer receive them).\n Archive all Alerts and DashboardSubscriptions created by the User. Only allowed for admins or for the current user.", "parameters" : [ { "in" : "path", "name" : "id", @@ -7515,44 +5921,150 @@ "schema" : { "type" : "integer", "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], + "tags" : [ "/api/ee/audit-app/user" ] + } + }, + "/api/ee/autodescribe/card/summarize" : { + "post" : { + "summary" : "POST /api/ee/autodescribe/card/summarize", + "description" : "Summarize a question.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "items" : { + "visualization_settings" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "dataset" : { + "type" : "boolean" + }, + "dataset_query" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "parameter_mappings" : { "type" : "array", "items" : { + "description" : "parameter_mapping must be a map with :parameter_id and :target keys", "type" : "object", "properties" : { - "id" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, - "model" : { - "type" : "string", - "enum" : [ "dataset", "metric", "collection" ] - } + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] + } + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "result_metadata" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultsMetadata" + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "display" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } }, - "required" : [ "id", "model" ] + "required" : [ "id", "type" ] } + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, - "required" : [ "items" ] + "required" : [ "dataset_query", "display", "visualization_settings" ] } } } }, - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/autodescribe" ] } }, - "/api/ee/metabot-v3/metabot/{id}/entities/{model}/{model-id}" : { - "delete" : { - "summary" : "DELETE /api/ee/metabot-v3/metabot/{id}/entities/{model}/{model-id}", - "description" : "Remove an entity from this metabot's access list", + "/api/ee/autodescribe/dashboard/summarize/{id}" : { + "post" : { + "summary" : "POST /api/ee/autodescribe/dashboard/summarize/{id}", + "description" : "Provide a summary of a dashboard.", "parameters" : [ { "in" : "path", "name" : "id", @@ -7560,100 +6072,74 @@ "schema" : { "type" : "integer", "minimum" : 1 - } - }, { - "in" : "path", - "name" : "model", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "dataset", "metric", "collection" ] - } - }, { - "in" : "path", - "name" : "model-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/autodescribe" ] } }, - "/api/ee/metabot-v3/metabot/{id}/prompt-suggestions" : { + "/api/ee/billing/" : { "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/{id}/prompt-suggestions", - "description" : "Return the prompt suggestions for the metabot instance with `id`.", + "summary" : "GET /api/ee/billing/", + "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", + "parameters" : [ ], + "tags" : [ "/api/ee/billing" ] + } + }, + "/api/ee/database-routing/destination-database" : { + "post" : { + "summary" : "POST /api/ee/database-routing/destination-database", + "description" : "Create new destination Databases.\n\n Note that unlike the normal `POST /api/database` endpoint, does NOT check the details before adding the Database.\n\n This is OK, it's not an invariant that all database details are always valid, but it's something to note.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } - }, { "in" : "query", - "name" : "sample", + "name" : "check_connection_details", "required" : false, "schema" : { "type" : "boolean" } - }, { - "in" : "query", - "name" : "model", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "metric", "model" ] - } - }, { - "in" : "query", - "name" : "model_id", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - } - } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/metabot-v3/metabot/{id}/prompt-suggestions", - "description" : "Delete all prompt suggestions for the metabot instance with `id`.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - } - }, - "/api/ee/metabot-v3/metabot/{id}/prompt-suggestions/regenerate" : { - "post" : { - "summary" : "POST /api/ee/metabot-v3/metabot/{id}/prompt-suggestions/regenerate", - "description" : "Remove any existing prompt suggestions for the Metabot instance with `id` and generate new ones.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "destinations" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "details" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "name", "details" ] + } + }, + "router_database_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "router_database_id", "destinations" ] + } + } } - } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + }, + "tags" : [ "/api/ee/database-routing" ] } }, - "/api/ee/metabot-v3/metabot/{id}/prompt-suggestions/{prompt-id}" : { - "delete" : { - "summary" : "DELETE /api/ee/metabot-v3/metabot/{id}/prompt-suggestions/{prompt-id}", - "description" : "Delete the prompt suggestion with ID `prompt-id` for the metabot instance with `id`.", + "/api/ee/database-routing/router-database/{id}" : { + "put" : { + "summary" : "PUT /api/ee/database-routing/router-database/{id}", + "description" : "Updates an existing Database with the `user_attribute` to route on. Will either:\n - turn an existing Database into a Router database\n - change the `user_attribute` used to route for an existing Router database, or\n - turn a Router database into a regular Database\n depending on the value of `user_attribute`", "parameters" : [ { "in" : "path", "name" : "id", @@ -7661,65 +6147,31 @@ "schema" : { "type" : "integer", "minimum" : 1 - } - }, { - "in" : "path", - "name" : "prompt-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - } - }, - "/api/ee/metabot-v3/v2/agent" : { - "post" : { - "summary" : "POST /api/ee/metabot-v3/v2/agent", - "description" : "Send a chat message to the LLM via the AI Service.", - "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "context" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.context.context" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "history" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.messages" - }, - "message" : { - "type" : "string", - "minLength" : 1 - }, - "metabot_id" : { - "type" : "string" - }, - "state" : { - "type" : "object", - "properties" : { } + "user_attribute" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } - }, - "required" : [ "message", "context", "conversation_id", "state" ] + } } } } }, - "tags" : [ "/api/ee/metabot-v3" ] + "tags" : [ "/api/ee/database-routing" ] } }, - "/api/ee/metabot-v3/v2/agent-streaming" : { + "/api/ee/gsheets/connection" : { "post" : { - "summary" : "POST /api/ee/metabot-v3/v2/agent-streaming", - "description" : "Send a chat message to the LLM via the AI Proxy.", + "summary" : "POST /api/ee/gsheets/connection", + "description" : "Hook up a new google drive folder that will be watched and have its content ETL'd into Metabase.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7727,66 +6179,95 @@ "schema" : { "type" : "object", "properties" : { - "context" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.context.context" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "history" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.messages" - }, - "message" : { - "type" : "string", - "minLength" : 1 - }, - "metabot_id" : { - "type" : "string" - }, - "state" : { - "type" : "object", - "properties" : { } + "url" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, - "required" : [ "message", "context", "conversation_id", "state" ] + "required" : [ "url" ] } } } }, - "tags" : [ "/api/ee/metabot-v3" ] + "tags" : [ "/api/ee/gsheets" ] + }, + "get" : { + "summary" : "GET /api/ee/gsheets/connection", + "description" : "Check the status of a newly created gsheets folder creation. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] + }, + "delete" : { + "summary" : "DELETE /api/ee/gsheets/connection", + "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] + } + }, + "/api/ee/gsheets/folder/sync" : { + "post" : { + "summary" : "POST /api/ee/gsheets/folder/sync", + "description" : "Force a sync of the folder now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] + } + }, + "/api/ee/gsheets/service-account" : { + "get" : { + "summary" : "GET /api/ee/gsheets/service-account", + "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] } }, - "/api/ee/permission_debug/" : { + "/api/ee/logs/query_execution/{yyyy-mm}" : { "get" : { - "summary" : "GET /api/ee/permission_debug/", - "description" : "This endpoint expects a `user_id`, a `model_id` to debug permissions against, and `action_type`.\n The type of model we are debugging against is inferred by the `action_type`.\n\n It will return:\n - `decision`: The overall permission decision (\"allow\", \"denied\", or \"limited\")\n - `model-type`: The type of model being checked (e.g., \"question\")\n - `model-id`: The ID of the model being checked\n - `segment`: A set of segmentation types applied (e.g., \"sandboxed\", \"impersonated\", \"routed\")\n - `message`: A sequence of strings explaining the decision\n - `data`: A map containing details about permissions (table or collection names to group names)\n - `suggestions`: A map of group IDs to group names that could provide access\n\n Example requests:\n - Check if user can read a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/read`\n - Check if user can query a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/query`\n - Check if user can download data: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/download-data`\n\n Example responses:\n - Allowed access:\n ```json\n {\n \"decision\": \"allow\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to read this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```\n - Denied access with blocked table:\n ```json\n {\n \"decision\": \"denied\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User does not have permission to query this card\"],\n \"data\": {\"sample-db.PUBLIC.ORDERS\": [\"All Users\"]},\n \"suggestions\": {}\n }\n ```\n - Limited access:\n ```json\n {\n \"decision\": \"limited\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to download some data from this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```", + "summary" : "GET /api/ee/logs/query_execution/{yyyy-mm}", + "description" : "Fetch rows for the month specified by `:yyyy-mm` from the query_execution logs table.\n Must be a superuser.", "parameters" : [ { - "in" : "query", - "name" : "user_id", + "in" : "path", + "name" : "yyyy-mm", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - } - }, { + "type" : "string", + "pattern" : "\\d{4}-\\d{2}" + }, + "description" : "Must be a string like 2020-04 or 2222-11." + } ], + "tags" : [ "/api/ee/logs" ] + } + }, + "/api/ee/query-reference-validation/invalid-cards" : { + "get" : { + "summary" : "GET /api/ee/query-reference-validation/invalid-cards", + "description" : "List of cards that have an invalid reference in their query. Shape of each card is standard, with the addition of an\n `errors` key. Supports pagination (`offset` and `limit`), so it returns something in the shape:\n\n ```\n {:total 200\n :data [card1, card2, ...]\n :limit 50\n :offset 100\n ```", + "parameters" : [ { "in" : "query", - "name" : "model_id", - "required" : true, + "name" : "sort_column", + "required" : false, "schema" : { - "type" : "string" + "type" : "string", + "enum" : [ "collection", "created_by", "name", "last_edited_at" ] } }, { "in" : "query", - "name" : "action_type", - "required" : true, + "name" : "sort_direction", + "required" : false, "schema" : { "type" : "string", - "enum" : [ "card/read", "card/query", "card/download-data" ] + "enum" : [ "desc", "asc" ] } + }, { + "in" : "query", + "name" : "collection_id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/permission_debug" ] + "tags" : [ "/api/ee/query-reference-validation" ] } }, "/api/ee/scim/api_key" : { @@ -7830,9 +6311,9 @@ "name" : "filter", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -7847,12 +6328,12 @@ "type" : "object", "properties" : { "displayName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "members" : { "type" : "array", @@ -7860,12 +6341,12 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -7874,8 +6355,8 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -7896,9 +6377,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -7913,12 +6394,12 @@ "type" : "object", "properties" : { "displayName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "members" : { "type" : "array", @@ -7926,12 +6407,12 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -7940,8 +6421,8 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -7960,9 +6441,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] } @@ -7994,9 +6475,9 @@ "name" : "filter", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -8022,12 +6503,12 @@ "type" : "boolean" }, "type" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -8039,28 +6520,28 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "display" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value", "display" ] } }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "locale" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "name" : { "type" : "object", @@ -8077,13 +6558,13 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "userName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "schemas", "userName", "name", "emails" ] @@ -8103,9 +6584,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -8131,12 +6612,12 @@ "type" : "boolean" }, "type" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -8148,28 +6629,28 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "display" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value", "display" ] } }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "locale" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "name" : { "type" : "object", @@ -8186,13 +6667,13 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "userName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "schemas", "userName", "name", "emails" ] @@ -8210,9 +6691,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "requestBody" : { "content" : { @@ -8226,13 +6707,13 @@ "type" : "object", "properties" : { "op" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { "anyOf" : [ { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, { "type" : "boolean" } ] @@ -8244,8 +6725,8 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -8491,30 +6972,6 @@ "tags" : [ "/api/ee/upload-management" ] } }, - "/api/eid-translation/translate" : { - "post" : { - "summary" : "POST /api/eid-translation/translate", - "description" : "Translate entity IDs to model IDs.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "entity_ids" : { - "type" : "object", - "properties" : { } - } - }, - "required" : [ "entity_ids" ] - } - } - } - }, - "tags" : [ "/api/eid-translation" ] - } - }, "/api/email/" : { "put" : { "summary" : "PUT /api/email/", @@ -8562,10 +7019,10 @@ "tags" : [ "/api/embed" ] } }, - "/api/embed/card/{token}/params/{param-key}/remapping" : { + "/api/embed/card/{token}/field/{field-id}/remapping/{remapped-id}" : { "get" : { - "summary" : "GET /api/embed/card/{token}/params/{param-key}/remapping", - "description" : "Embedded version of api.card filter values endpoint.", + "summary" : "GET /api/embed/card/{token}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with\n embedded Cards.", "parameters" : [ { "in" : "path", "name" : "token", @@ -8575,18 +7032,104 @@ } }, { "in" : "path", - "name" : "param-key", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/card/{token}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/embed/card/{token}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by an embedded Card.", + "parameters" : [ { + "in" : "path", + "name" : "token", "required" : true, "schema" : { "type" : "string" } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "value", "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/card/{token}/field/{field-id}/values" : { + "get" : { + "summary" : "GET /api/embed/card/{token}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is referenced by an embedded Card.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, "schema" : { "type" : "string" } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/embed" ] } @@ -8652,7 +7195,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } }, { "in" : "query", @@ -8749,7 +7293,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } }, { "in" : "query", @@ -8771,11 +7316,118 @@ "tags" : [ "/api/embed" ] } }, - "/api/embed/dashboard/{token}/params/{param-key}/remapping" : { + "/api/embed/dashboard/{token}/field/{field-id}/remapping/{remapped-id}" : { "get" : { - "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/remapping", - "description" : "Embedded version of the remapped dashboard param value endpoint.", - "parameters" : [ ], + "summary" : "GET /api/embed/dashboard/{token}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with\n embedded Dashboards.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/dashboard/{token}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/embed/dashboard/{token}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by a Card in an embedded Dashboard.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/dashboard/{token}/field/{field-id}/values" : { + "get" : { + "summary" : "GET /api/embed/dashboard/{token}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is used as a param in an embedded Dashboard.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/embed" ] } }, @@ -9041,8 +7693,8 @@ "type" : "object", "properties" : { "points_of_interest" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "settings" : { "description" : "Value must be a map.", @@ -9063,26 +7715,26 @@ "description" : "value must be a valid field semantic or relation type (keyword or string)." }, "has_field_values" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" + "$ref" : "#/components/schemas/metabase.lib.schema.metadata~1column.has-field-values" }, "display_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "nfc_path" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "caveats" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "description" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "fk_target_field_id" : { "description" : "value must be an integer greater than zero.", @@ -9123,8 +7775,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "type" : { "type" : "string", @@ -9215,9 +7867,9 @@ "name" : "value", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/field" ] } @@ -9242,7 +7894,7 @@ "/api/field/{id}/search/{search-id}" : { "get" : { "summary" : "GET /api/field/{id}/search/{search-id}", - "description" : "Search for values of a Field with `search-id` that start with `value`. See docstring for\n [[metabase.parameters.field/search-values]] for a more detailed explanation.", + "description" : "Search for values of a Field with `search-id` that start with `value`. See docstring for\n `metabase.api.field/search-values` for a more detailed explanation.", "parameters" : [ { "in" : "path", "name" : "id", @@ -9266,9 +7918,9 @@ "name" : "value", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/field" ] } @@ -9330,13 +7982,15 @@ "items" : { "anyOf" : [ { "type" : "array", - "prefixItems" : [ { } ] + "items" : [ { } ], + "additionalItems" : false }, { "type" : "array", - "prefixItems" : [ { }, { - "type" : "string", - "minLength" : 1 - } ] + "items" : [ { }, { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } ], + "additionalItems" : false } ] } } @@ -9358,9 +8012,9 @@ "name" : "url", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/geojson" ] } @@ -9368,15 +8022,15 @@ "/api/geojson/{key}" : { "get" : { "summary" : "GET /api/geojson/{key}", - "description" : "Fetch a custom GeoJSON file as defined in the [[metabase.geojson.settings/custom-geojson]] setting. (This just acts\n as a simple proxy for the file specified for `key`).", + "description" : "Fetch a custom GeoJSON file as defined in the `custom-geojson` setting. (This just acts as a simple proxy for the\n file specified for `key`).", "parameters" : [ { "in" : "path", "name" : "key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/geojson" ] } @@ -9456,9 +8110,14 @@ "type" : "integer" }, "duration_unit" : { - "$ref" : "#/components/schemas/metabase.logger.api.time-unit" + "$ref" : "#/components/schemas/metabase.api.logger~1time-unit" }, - "log_levels" : { } + "log_levels" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/metabase.api.logger~1log-level" + } + } }, "required" : [ "duration", "duration_unit", "log_levels" ] } @@ -9474,14 +8133,6 @@ "tags" : [ "/api/logger" ] } }, - "/api/logger/logs" : { - "get" : { - "summary" : "GET /api/logger/logs", - "description" : "Logs.", - "parameters" : [ ], - "tags" : [ "/api/logger" ] - } - }, "/api/logger/presets" : { "get" : { "summary" : "GET /api/logger/presets", @@ -9976,7 +8627,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.models.FullyHydratedNotification" + "$ref" : "#/components/schemas/metabase.notification.models~1FullyHydratedNotification" } } } @@ -9993,7 +8644,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.models.FullyHydratedNotification" + "$ref" : "#/components/schemas/metabase.notification.models~1FullyHydratedNotification" } } } @@ -10096,7 +8747,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.models.FullyHydratedNotification" + "$ref" : "#/components/schemas/metabase.notification.models~1FullyHydratedNotification" } } } @@ -10176,8 +8827,8 @@ "default" : false }, "table_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ ] @@ -10218,8 +8869,8 @@ "minimum" : 1 }, "table_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } } @@ -10250,12 +8901,12 @@ "type" : "object", "properties" : { "schema_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "table_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "schema_name", "table_name" ] @@ -10358,8 +9009,8 @@ "type" : "object", "properties" : { "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "name" ] @@ -10391,8 +9042,8 @@ "type" : "object", "properties" : { "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "name" ] @@ -10677,9 +9328,8 @@ "type" : "object", "properties" : { "cron" : { - "description" : "Value must be a string representing a cron schedule of format ", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "cron" ] @@ -10724,38 +9374,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "tags" : [ "/api/preview_embed" ] - } - }, - "/api/preview_embed/card/{token}/params/{param-key}/remapping" : { - "get" : { - "summary" : "GET /api/preview_embed/card/{token}/params/{param-key}/remapping", - "description" : "Embedded version of api.card filter values endpoint.", - "parameters" : [ { - "in" : "path", - "name" : "token", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "path", - "name" : "param-key", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "value", - "required" : true, - "schema" : { - "type" : "string" - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10769,9 +9390,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10785,9 +9406,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10801,9 +9422,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "dashcard-id", @@ -10826,14 +9447,6 @@ "tags" : [ "/api/preview_embed" ] } }, - "/api/preview_embed/dashboard/{token}/params/{param-key}/remapping" : { - "get" : { - "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/remapping", - "description" : "Embedded version of the remapped dashboard param value endpoint.", - "parameters" : [ ], - "tags" : [ "/api/preview_embed" ] - } - }, "/api/preview_embed/dashboard/{token}/params/{param-key}/values" : { "get" : { "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/values", @@ -10851,9 +9464,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10867,9 +9480,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "dashcard-id", @@ -10892,38 +9505,6 @@ "tags" : [ "/api/preview_embed" ] } }, - "/api/product-feedback/" : { - "post" : { - "summary" : "POST /api/product-feedback/", - "description" : "Endpoint to provide feedback from the product", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "comments" : { - "type" : "string", - "minLength" : 1 - }, - "email" : { - "type" : "string", - "minLength" : 1 - }, - "source" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "source" ] - } - } - } - }, - "tags" : [ "/api/product-feedback" ] - } - }, "/api/public/action/{uuid}" : { "get" : { "summary" : "GET /api/public/action/{uuid}", @@ -10990,10 +9571,10 @@ "tags" : [ "/api/public" ] } }, - "/api/public/card/{uuid}/params/{param-key}/remapping" : { + "/api/public/card/{uuid}/field/{field-id}/remapping/{remapped-id}" : { "get" : { - "summary" : "GET /api/public/card/{uuid}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for the given `value` of parameter with ID `:param-key` of card with UUID `uuid`.", + "summary" : "GET /api/public/card/{uuid}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with public\n Cards.", "parameters" : [ { "in" : "path", "name" : "uuid", @@ -11005,17 +9586,108 @@ "description" : "value must be a valid UUID." }, { "in" : "path", - "name" : "param-key", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/card/{uuid}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/public/card/{uuid}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by a public Card.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 - } + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "value", "required" : true, - "schema" : { } + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/card/{uuid}/field/{field-id}/values" : { + "get" : { + "summary" : "GET /api/public/card/{uuid}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is referenced by a public Card.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", + "required" : true, + "schema" : { + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/public" ] } @@ -11038,17 +9710,17 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "query", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11071,9 +9743,9 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11121,7 +9793,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } }, { "in" : "query", @@ -11247,7 +9920,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } } ], "requestBody" : { @@ -11353,10 +10027,105 @@ "tags" : [ "/api/public" ] } }, - "/api/public/dashboard/{uuid}/params/{param-key}/remapping" : { + "/api/public/dashboard/{uuid}/field/{field-id}/remapping/{remapped-id}" : { + "get" : { + "summary" : "GET /api/public/dashboard/{uuid}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with public\n Dashboards.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", + "required" : true, + "schema" : { + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/dashboard/{uuid}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/public/dashboard/{uuid}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by a Card in a public Dashboard.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", + "required" : true, + "schema" : { + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/dashboard/{uuid}/field/{field-id}/values" : { "get" : { - "summary" : "GET /api/public/dashboard/{uuid}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for the given `value` of parameter with ID `:param-key` of dashboard with UUID `uuid`.", + "summary" : "GET /api/public/dashboard/{uuid}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is referenced by a Card in a public Dashboard.", "parameters" : [ { "in" : "path", "name" : "uuid", @@ -11368,17 +10137,13 @@ "description" : "value must be a valid UUID." }, { "in" : "path", - "name" : "param-key", + "name" : "field-id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "value", - "required" : true, - "schema" : { } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/public" ] } @@ -11401,17 +10166,17 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "query", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11434,9 +10199,9 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11450,9 +10215,9 @@ "name" : "url", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "format", @@ -11756,8 +10521,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "parameters" : { "type" : "array", @@ -11884,8 +10649,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "skip_if_empty" : { "type" : "boolean", @@ -12009,8 +10774,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "parameters" : { "type" : "array", @@ -12143,9 +10908,9 @@ "name" : "q", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "context", @@ -12194,9 +10959,9 @@ "name" : "created_at", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "created_by", @@ -12214,9 +10979,9 @@ "name" : "last_edited_at", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "last_edited_by", @@ -12373,8 +11138,8 @@ "type" : "string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "table_id" : { "description" : "value must be an integer greater than zero.", @@ -12445,15 +11210,15 @@ "type" : "string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "points_of_interest" : { "type" : "string" }, "revision_message" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "show_in_getting_started" : { "type" : "boolean" @@ -12483,9 +11248,9 @@ "name" : "revision_message", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/segment" ] } @@ -12519,12 +11284,12 @@ "type" : "object", "properties" : { "password" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "username" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "username", "password" ] @@ -12577,8 +11342,8 @@ "type" : "object", "properties" : { "token" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "token" ] @@ -12589,30 +11354,6 @@ "tags" : [ "/api/session" ] } }, - "/api/session/password-check" : { - "post" : { - "summary" : "POST /api/session/password-check", - "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "password" : { - "description" : "password is too common.", - "type" : "string" - } - }, - "required" : [ "password" ] - } - } - } - }, - "tags" : [ "/api/session" ] - } - }, "/api/session/password_reset_token_valid" : { "get" : { "summary" : "GET /api/session/password_reset_token_valid", @@ -12622,9 +11363,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/session" ] } @@ -12653,8 +11394,8 @@ "type" : "string" }, "token" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "token", "password" ] @@ -12736,12 +11477,12 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -12749,21 +11490,19 @@ "type" : "object", "properties" : { "site_locale" : { - "description" : "String must be a valid two-letter ISO language or language-country code e.g. 'en' or 'en_US'.", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "site_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "site_name" ] }, "token" : { - "description" : "Token does not match the setup token.", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "user" : { "type" : "object", @@ -12773,12 +11512,12 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "password" : { "description" : "password is too common.", @@ -12847,8 +11586,8 @@ "type" : "object", "properties" : { "slack-app-token" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "slack-bug-report-channel" : { "type" : "string" @@ -12885,8 +11624,8 @@ "type" : "string" }, "display_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "entity_type" : { "description" : "value must be a valid entity type (keyword or string)." @@ -13001,8 +11740,8 @@ "type" : "string" }, "display_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "entity_type" : { "description" : "value must be a valid entity type (keyword or string)." @@ -13247,23 +11986,6 @@ "tags" : [ "/api/table" ] } }, - "/api/table/{id}/sync_schema" : { - "post" : { - "summary" : "POST /api/table/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Table`.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/table" ] - } - }, "/api/table/{table-id}/data" : { "get" : { "summary" : "GET /api/table/{table-id}/data", @@ -13506,8 +12228,8 @@ "type" : "string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "archived" : { "type" : "boolean" @@ -13586,8 +12308,8 @@ "enum" : [ "star", "cake", "mail", "warning", "bell", "cloud" ] }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "time_matters" : { "type" : "boolean" @@ -13657,8 +12379,8 @@ "enum" : [ "star", "cake", "mail", "warning", "bell", "cloud" ] }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "name" ] @@ -13676,7 +12398,7 @@ "name" : "include", "required" : false, "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.include" + "$ref" : "#/components/schemas/metabase.timeline.api.timeline~1include" } }, { "in" : "query", @@ -13763,7 +12485,7 @@ "name" : "include", "required" : false, "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.include" + "$ref" : "#/components/schemas/metabase.timeline.api.timeline~1include" } }, { "in" : "query", @@ -13830,8 +12552,8 @@ "enum" : [ "star", "cake", "mail", "warning", "bell", "cloud" ] }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } } @@ -13856,40 +12578,6 @@ "tags" : [ "/api/timeline" ] } }, - "/api/upload/csv" : { - "post" : { - "summary" : "POST /api/upload/csv", - "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "multipart/form-data" : { - "schema" : { - "type" : "object", - "properties" : { - "collection_id" : { - "type" : "integer", - "minimum" : 1 - }, - "file" : { - "type" : "object", - "properties" : { - "filename" : { - "type" : "string" - }, - "tempfile" : { } - }, - "required" : [ "filename", "tempfile" ] - } - }, - "required" : [ "file" ] - } - } - } - }, - "tags" : [ "/api/upload" ] - } - }, "/api/user-key-value/namespace/{namespace}" : { "get" : { "summary" : "GET /api/user-key-value/namespace/{namespace}", @@ -13899,9 +12587,9 @@ "name" : "namespace", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/user-key-value" ] } @@ -13915,17 +12603,17 @@ "name" : "key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "namespace", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "requestBody" : { "content" : { @@ -13934,7 +12622,7 @@ "type" : "object", "properties" : { "expires_at" : { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.datetime" + "$ref" : "#/components/schemas/metabase.lib.schema.literal~1string.datetime" }, "value" : { } } @@ -13952,17 +12640,17 @@ "name" : "key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "namespace", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/user-key-value" ] }, @@ -14026,12 +12714,12 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "login_attributes" : { "description" : "login attribute keys must be a keyword or string", @@ -14041,7 +12729,7 @@ "user_group_memberships" : { "type" : "array", "items" : { - "$ref" : "#/components/schemas/metabase.users.api.user-group-membership" + "$ref" : "#/components/schemas/metabase.api.user~1user-group-membership" } } }, @@ -14109,8 +12797,8 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "is_group_manager" : { "type" : "boolean" @@ -14119,13 +12807,12 @@ "type" : "boolean" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "locale" : { - "description" : "String must be a valid two-letter ISO language or language-country code e.g. 'en' or 'en_US'.", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "login_attributes" : { "description" : "login attribute keys must be a keyword or string", @@ -14135,7 +12822,7 @@ "user_group_memberships" : { "type" : "array", "items" : { - "$ref" : "#/components/schemas/metabase.users.api.user-group-membership" + "$ref" : "#/components/schemas/metabase.api.user~1user-group-membership" } } } @@ -14228,6 +12915,110 @@ "tags" : [ "/api/user" ] } }, + "/api/util/bug_report_details" : { + "get" : { + "summary" : "GET /api/util/bug_report_details", + "description" : "Returns version and system information relevant to filing a bug report against Metabase.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } + }, + "/api/util/diagnostic_info/connection_pool_info" : { + "get" : { + "summary" : "GET /api/util/diagnostic_info/connection_pool_info", + "description" : "Returns database connection pool info for the current Metabase instance.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } + }, + "/api/util/entity_id" : { + "post" : { + "summary" : "POST /api/util/entity_id", + "description" : "Translate entity IDs to model IDs.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "entity_ids" : { + "type" : "object", + "properties" : { } + } + }, + "required" : [ "entity_ids" ] + } + } + } + }, + "tags" : [ "/api/util" ] + } + }, + "/api/util/logs" : { + "get" : { + "summary" : "GET /api/util/logs", + "description" : "Logs.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } + }, + "/api/util/password_check" : { + "post" : { + "summary" : "POST /api/util/password_check", + "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "password" : { + "description" : "password is too common.", + "type" : "string" + } + }, + "required" : [ "password" ] + } + } + } + }, + "tags" : [ "/api/util" ] + } + }, + "/api/util/product-feedback" : { + "post" : { + "summary" : "POST /api/util/product-feedback", + "description" : "Endpoint to provide feedback from the product", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "comments" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "email" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "source" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "source" ] + } + } + } + }, + "tags" : [ "/api/util" ] + } + }, "/api/util/random_token" : { "get" : { "summary" : "GET /api/util/random_token", @@ -14235,6 +13026,14 @@ "parameters" : [ ], "tags" : [ "/api/util" ] } + }, + "/api/util/stats" : { + "get" : { + "summary" : "GET /api/util/stats", + "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } } }, "servers" : [ { diff --git a/_docs/master/configuring-metabase/config-template.md b/_docs/master/configuring-metabase/config-template.md index c604d0caef..96bcaa90c4 100644 --- a/_docs/master/configuring-metabase/config-template.md +++ b/_docs/master/configuring-metabase/config-template.md @@ -19,7 +19,6 @@ clojure -M:doc:ee config-template The template lists example `database`, `user`, and `settings` sections for the [config file](./config-file). - ```yaml # A config file template for Metabase. # You'll need to update (or remove) the `users` and `databases` sections. @@ -34,49 +33,48 @@ The template lists example `database`, `user`, and `settings` sections for the [ version: 1 config: users: - - first_name: First - last_name: Person - password: metabot1 - email: first@example.com - - first_name: Normal - last_name: Person - password: metabot1 - email: normal@example.com - - first_name: Admin - last_name: Person - password: metabot1 - is_superuser: true - email: admin@example.com + - first_name: First + last_name: Person + password: metabot1 + email: first@example.com + - first_name: Normal + last_name: Person + password: metabot1 + email: normal@example.com + - first_name: Admin + last_name: Person + password: metabot1 + is_superuser: true + email: admin@example.com databases: - - name: Sample PostgreSQL - engine: postgres - details: - host: postgres-data - port: 5432 - user: metabase - password: metasample123 - dbname: sample - - name: Sample MySQL - engine: mysql - details: - host: mysql-data - port: 3306 - user: metabase - password: metasample123 - dbname: sample + - name: Sample PostgreSQL + engine: postgres + details: + host: postgres-data + port: 5432 + user: metabase + password: metasample123 + dbname: sample + - name: Sample MySQL + engine: mysql + details: + host: mysql-data + port: 3306 + user: metabase + password: metasample123 + dbname: sample api-keys: - - name: Admin API key - group: admin - creator: first@example.com - key: mb_firsttestapikey123 - - name: All Users API key - group: all-users - creator: first@example.com - key: mb_secondtestapikey456 + - name: Admin API key + group: admin + creator: first@example.com + key: mb_firsttestapikey123 + - name: All Users API key + group: all-users + creator: first@example.com + key: mb_secondtestapikey456 settings: admin-email: null aggregated-query-row-limit: null - ai-service-base-url: http://localhost:8000 allowed-iframe-hosts: |- youtube.com, youtu.be, @@ -110,6 +108,7 @@ config: application-name: Metabase attachment-row-limit: null attachment-table-row-limit: 20 + backfill-entity-ids-repeat-ms: 3000 bcc-enabled: true breakout-bin-width: 10.0 breakout-bins-num: 8 @@ -120,7 +119,6 @@ config: custom-geojson-enabled: true custom-homepage: false custom-homepage-dashboard: null - dashboards-save-last-used-parameters: true db-connection-timeout-ms: 10000 db-query-timeout-minutes: 20 default-maps-enabled: true @@ -156,7 +154,7 @@ config: gsheets: null health-check-logging-enabled: true help-link: metabase - help-link-custom-destination: https://www.metabase.com/help/premium + help-link-custom-destination: https://www.metabase.com/help-premium humanization-strategy: simple jdbc-data-warehouse-max-connection-pool-size: 15 jwt-attribute-email: email @@ -169,7 +167,7 @@ config: jwt-identity-provider-uri: null jwt-shared-secret: null jwt-user-provisioning-enabled: true - landing-page: '' + landing-page: "" landing-page-illustration: default landing-page-illustration-custom: null ldap-attribute-email: mail @@ -190,7 +188,6 @@ config: ldap-user-base: null ldap-user-filter: (&(objectClass=inetOrgPerson)(|(uid={login})(mail={login}))) ldap-user-provisioning-enabled: true - license-token-missing-banner-dismissal-timestamp: [] loading-message: doing-science login-page-illustration: default login-page-illustration-custom: null @@ -201,10 +198,8 @@ config: no-data-illustration-custom: null no-object-illustration: default no-object-illustration-custom: null - non-table-chart-generated: false not-behind-proxy: false notification-link-base-url: null - notification-system-event-thread-pool-size: 5 notification-thread-pool-size: 3 persisted-model-refresh-cron-schedule: 0 0 0/6 * * ? * persisted-models-enabled: false @@ -222,7 +217,7 @@ config: saml-application-name: Metabase saml-attribute-email: null saml-attribute-firstname: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname - saml-attribute-group: null + saml-attribute-group: member_of saml-attribute-lastname: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname saml-enabled: false saml-group-mappings: {} @@ -231,15 +226,13 @@ config: saml-identity-provider-issuer: null saml-identity-provider-slo-uri: null saml-identity-provider-uri: null - saml-keystore-alias: null + saml-keystore-alias: metabase saml-keystore-password: changeit saml-keystore-path: null saml-slo-enabled: false saml-user-provisioning-enabled: true scim-enabled: null - sdk-encryption-validation-key: null - search-engine: appdb - search-language: null + search-engine: in-place search-typeahead-enabled: true send-new-sso-user-admin-email: null session-cookie-samesite: lax @@ -268,6 +261,5 @@ config: unaggregated-query-row-limit: null update-channel: latest uploads-settings: null - use-tenants: false user-visibility: all ``` diff --git a/_docs/master/configuring-metabase/environment-variables.md b/_docs/master/configuring-metabase/environment-variables.md index ab56163aa4..6d73033670 100644 --- a/_docs/master/configuring-metabase/environment-variables.md +++ b/_docs/master/configuring-metabase/environment-variables.md @@ -78,12 +78,12 @@ Maximum number of rows to return for aggregated queries via the API. Must be less than 1048575. See also MB_UNAGGREGATED_QUERY_ROW_LIMIT. -### `MB_AI_SERVICE_BASE_URL` +### `MB_AI_PROXY_BASE_URL` - Type: string - Default: `http://localhost:8000` -URL for the a AI Service. +URL for the a AI Proxy service. ### `MB_ALLOWED_IFRAME_HOSTS` @@ -264,7 +264,7 @@ Row limit in file attachments excluding the header. Maximum number of rows to render in an alert or subscription image. Range: 1-100. To limit the total number of rows included in the file attachment - for an email dashboard subscription, use MB_ATTACHMENT_ROW_LIMIT. + for an email dashboard subscription, use MB_UNAGGREGATED_QUERY_ROW_LIMIT. ### `MB_BCC_ENABLED` diff --git a/_docs/master/configuring-metabase/images/AccountSetup.png b/_docs/master/configuring-metabase/images/AccountSetup.png index e19016a0b9..86661ac449 100644 Binary files a/_docs/master/configuring-metabase/images/AccountSetup.png and b/_docs/master/configuring-metabase/images/AccountSetup.png differ diff --git a/_docs/master/configuring-metabase/images/AddDatabaseInfo.png b/_docs/master/configuring-metabase/images/AddDatabaseInfo.png index 6d40cb6224..e0df8533be 100644 Binary files a/_docs/master/configuring-metabase/images/AddDatabaseInfo.png and b/_docs/master/configuring-metabase/images/AddDatabaseInfo.png differ diff --git a/_docs/master/configuring-metabase/images/EmailCredentials.png b/_docs/master/configuring-metabase/images/EmailCredentials.png index 7d04032cd8..78f461c2d0 100644 Binary files a/_docs/master/configuring-metabase/images/EmailCredentials.png and b/_docs/master/configuring-metabase/images/EmailCredentials.png differ diff --git a/_docs/master/configuring-metabase/images/MapSettings.png b/_docs/master/configuring-metabase/images/MapSettings.png index 7e273a757c..2b61578817 100644 Binary files a/_docs/master/configuring-metabase/images/MapSettings.png and b/_docs/master/configuring-metabase/images/MapSettings.png differ diff --git a/_docs/master/configuring-metabase/images/NewsletterSignup.png b/_docs/master/configuring-metabase/images/NewsletterSignup.png index eeca7fc863..f5e74b7f26 100644 Binary files a/_docs/master/configuring-metabase/images/NewsletterSignup.png and b/_docs/master/configuring-metabase/images/NewsletterSignup.png differ diff --git a/_docs/master/configuring-metabase/images/UsageData.png b/_docs/master/configuring-metabase/images/UsageData.png index 93b43a8e37..194506cf28 100644 Binary files a/_docs/master/configuring-metabase/images/UsageData.png and b/_docs/master/configuring-metabase/images/UsageData.png differ diff --git a/_docs/master/configuring-metabase/images/WelcomeScreen.png b/_docs/master/configuring-metabase/images/WelcomeScreen.png index 22e218cfac..a269a92f91 100644 Binary files a/_docs/master/configuring-metabase/images/WelcomeScreen.png and b/_docs/master/configuring-metabase/images/WelcomeScreen.png differ diff --git a/_docs/master/configuring-metabase/images/chart-colors.png b/_docs/master/configuring-metabase/images/chart-colors.png index e19016a0b9..bf7b6f6c04 100644 Binary files a/_docs/master/configuring-metabase/images/chart-colors.png and b/_docs/master/configuring-metabase/images/chart-colors.png differ diff --git a/_docs/master/configuring-metabase/images/custom-geojson.png b/_docs/master/configuring-metabase/images/custom-geojson.png index 95623cc67b..4e040c6df0 100644 Binary files a/_docs/master/configuring-metabase/images/custom-geojson.png and b/_docs/master/configuring-metabase/images/custom-geojson.png differ diff --git a/_docs/master/configuring-metabase/images/data-caching-settings.png b/_docs/master/configuring-metabase/images/data-caching-settings.png index 177b5b507a..720d686922 100644 Binary files a/_docs/master/configuring-metabase/images/data-caching-settings.png and b/_docs/master/configuring-metabase/images/data-caching-settings.png differ diff --git a/_docs/master/configuring-metabase/images/lighthouse-illustration.png b/_docs/master/configuring-metabase/images/lighthouse-illustration.png index ad72b1455e..f95b559b42 100644 Binary files a/_docs/master/configuring-metabase/images/lighthouse-illustration.png and b/_docs/master/configuring-metabase/images/lighthouse-illustration.png differ diff --git a/_docs/master/configuring-metabase/images/login-page.png b/_docs/master/configuring-metabase/images/login-page.png index 2ba44304a2..ae39c1a100 100644 Binary files a/_docs/master/configuring-metabase/images/login-page.png and b/_docs/master/configuring-metabase/images/login-page.png differ diff --git a/_docs/master/configuring-metabase/images/metabot-greeting.png b/_docs/master/configuring-metabase/images/metabot-greeting.png index 348792767f..d8834ac09d 100644 Binary files a/_docs/master/configuring-metabase/images/metabot-greeting.png and b/_docs/master/configuring-metabase/images/metabot-greeting.png differ diff --git a/_docs/master/configuring-metabase/images/payload-chart.png b/_docs/master/configuring-metabase/images/payload-chart.png index ebbb4566bc..46788b3751 100644 Binary files a/_docs/master/configuring-metabase/images/payload-chart.png and b/_docs/master/configuring-metabase/images/payload-chart.png differ diff --git a/_docs/master/configuring-metabase/images/sailboat.png b/_docs/master/configuring-metabase/images/sailboat.png index 0691c9c0de..eae49d0b1a 100644 Binary files a/_docs/master/configuring-metabase/images/sailboat.png and b/_docs/master/configuring-metabase/images/sailboat.png differ diff --git a/_docs/master/configuring-metabase/images/table-view.png b/_docs/master/configuring-metabase/images/table-view.png index b561a8dc44..77fa59c8f7 100644 Binary files a/_docs/master/configuring-metabase/images/table-view.png and b/_docs/master/configuring-metabase/images/table-view.png differ diff --git a/_docs/master/configuring-metabase/images/user-interface-colors.png b/_docs/master/configuring-metabase/images/user-interface-colors.png index fbe8bd3c54..f6dddca805 100644 Binary files a/_docs/master/configuring-metabase/images/user-interface-colors.png and b/_docs/master/configuring-metabase/images/user-interface-colors.png differ diff --git a/_docs/master/configuring-metabase/images/what-will-you-use-metabase-for.png b/_docs/master/configuring-metabase/images/what-will-you-use-metabase-for.png index de22ca6322..a37d5ab867 100644 Binary files a/_docs/master/configuring-metabase/images/what-will-you-use-metabase-for.png and b/_docs/master/configuring-metabase/images/what-will-you-use-metabase-for.png differ diff --git a/_docs/master/dashboards/images/add-data.png b/_docs/master/dashboards/images/add-data.png index aa0bc0cad4..952451191b 100644 Binary files a/_docs/master/dashboards/images/add-data.png and b/_docs/master/dashboards/images/add-data.png differ diff --git a/_docs/master/dashboards/images/add-filter.png b/_docs/master/dashboards/images/add-filter.png index 7206824958..581e8df531 100644 Binary files a/_docs/master/dashboards/images/add-filter.png and b/_docs/master/dashboards/images/add-filter.png differ diff --git a/_docs/master/dashboards/images/add-section.png b/_docs/master/dashboards/images/add-section.png index 8b9b966c19..c367bdf42c 100644 Binary files a/_docs/master/dashboards/images/add-section.png and b/_docs/master/dashboards/images/add-section.png differ diff --git a/_docs/master/dashboards/images/add_series.png b/_docs/master/dashboards/images/add_series.png index 23fae3c80c..166c70fe6c 100644 Binary files a/_docs/master/dashboards/images/add_series.png and b/_docs/master/dashboards/images/add_series.png differ diff --git a/_docs/master/dashboards/images/add_values.png b/_docs/master/dashboards/images/add_values.png index b87ce9fe01..97fc035266 100644 Binary files a/_docs/master/dashboards/images/add_values.png and b/_docs/master/dashboards/images/add_values.png differ diff --git a/_docs/master/dashboards/images/apply-button.png b/_docs/master/dashboards/images/apply-button.png index a1c1f9a61a..22f3845c5a 100644 Binary files a/_docs/master/dashboards/images/apply-button.png and b/_docs/master/dashboards/images/apply-button.png differ diff --git a/_docs/master/dashboards/images/autorefresh.png b/_docs/master/dashboards/images/autorefresh.png index a1c1f9a61a..e4f29cfba6 100644 Binary files a/_docs/master/dashboards/images/autorefresh.png and b/_docs/master/dashboards/images/autorefresh.png differ diff --git a/_docs/master/dashboards/images/button-form.png b/_docs/master/dashboards/images/button-form.png index ee763c576e..17e4568c92 100644 Binary files a/_docs/master/dashboards/images/button-form.png and b/_docs/master/dashboards/images/button-form.png differ diff --git a/_docs/master/dashboards/images/buttons.png b/_docs/master/dashboards/images/buttons.png index 788eacb6ec..11063d6fe0 100644 Binary files a/_docs/master/dashboards/images/buttons.png and b/_docs/master/dashboards/images/buttons.png differ diff --git a/_docs/master/dashboards/images/click-behavior-icon.png b/_docs/master/dashboards/images/click-behavior-icon.png index 2a41076032..99118023a6 100644 Binary files a/_docs/master/dashboards/images/click-behavior-icon.png and b/_docs/master/dashboards/images/click-behavior-icon.png differ diff --git a/_docs/master/dashboards/images/click-behavior-menu.png b/_docs/master/dashboards/images/click-behavior-menu.png index 66fc9a7da6..e49783f172 100644 Binary files a/_docs/master/dashboards/images/click-behavior-menu.png and b/_docs/master/dashboards/images/click-behavior-menu.png differ diff --git a/_docs/master/dashboards/images/cross-filter.png b/_docs/master/dashboards/images/cross-filter.png index ee763c576e..90638ae6eb 100644 Binary files a/_docs/master/dashboards/images/cross-filter.png and b/_docs/master/dashboards/images/cross-filter.png differ diff --git a/_docs/master/dashboards/images/custom-destination.png b/_docs/master/dashboards/images/custom-destination.png index 76c2b7c0aa..0a6fb882a1 100644 Binary files a/_docs/master/dashboards/images/custom-destination.png and b/_docs/master/dashboards/images/custom-destination.png differ diff --git a/_docs/master/dashboards/images/dark-mode.png b/_docs/master/dashboards/images/dark-mode.png index 68dc71e1a9..9a8b84c91e 100644 Binary files a/_docs/master/dashboards/images/dark-mode.png and b/_docs/master/dashboards/images/dark-mode.png differ diff --git a/_docs/master/dashboards/images/dashboard-filter-action.png b/_docs/master/dashboards/images/dashboard-filter-action.png index 3c1075bed2..50110212ca 100644 Binary files a/_docs/master/dashboards/images/dashboard-filter-action.png and b/_docs/master/dashboards/images/dashboard-filter-action.png differ diff --git a/_docs/master/dashboards/images/dashboard-tabs.png b/_docs/master/dashboards/images/dashboard-tabs.png index 6c5da866d8..f97de27a6d 100644 Binary files a/_docs/master/dashboards/images/dashboard-tabs.png and b/_docs/master/dashboards/images/dashboard-tabs.png differ diff --git a/_docs/master/dashboards/images/dashboard-with-iframe.png b/_docs/master/dashboards/images/dashboard-with-iframe.png index 9ed742ab32..1876950bac 100644 Binary files a/_docs/master/dashboards/images/dashboard-with-iframe.png and b/_docs/master/dashboards/images/dashboard-with-iframe.png differ diff --git a/_docs/master/dashboards/images/dashboard-with-link-cards.png b/_docs/master/dashboards/images/dashboard-with-link-cards.png index 7206824958..60270102d4 100644 Binary files a/_docs/master/dashboards/images/dashboard-with-link-cards.png and b/_docs/master/dashboards/images/dashboard-with-link-cards.png differ diff --git a/_docs/master/dashboards/images/dashboard.png b/_docs/master/dashboards/images/dashboard.png index 155d34f84e..fd1679f956 100644 Binary files a/_docs/master/dashboards/images/dashboard.png and b/_docs/master/dashboards/images/dashboard.png differ diff --git a/_docs/master/dashboards/images/drill-through-menu.png b/_docs/master/dashboards/images/drill-through-menu.png index cc2c707278..178d1d119a 100644 Binary files a/_docs/master/dashboards/images/drill-through-menu.png and b/_docs/master/dashboards/images/drill-through-menu.png differ diff --git a/_docs/master/dashboards/images/duplicate-card.png b/_docs/master/dashboards/images/duplicate-card.png index fb905f601f..ccb0d71721 100644 Binary files a/_docs/master/dashboards/images/duplicate-card.png and b/_docs/master/dashboards/images/duplicate-card.png differ diff --git a/_docs/master/dashboards/images/edit-visualization.png b/_docs/master/dashboards/images/edit-visualization.png index af42908e7f..49c42227f4 100644 Binary files a/_docs/master/dashboards/images/edit-visualization.png and b/_docs/master/dashboards/images/edit-visualization.png differ diff --git a/_docs/master/dashboards/images/editor-orders-by-product-category.png b/_docs/master/dashboards/images/editor-orders-by-product-category.png index cc9a3ead6b..3091dbb271 100644 Binary files a/_docs/master/dashboards/images/editor-orders-by-product-category.png and b/_docs/master/dashboards/images/editor-orders-by-product-category.png differ diff --git a/_docs/master/dashboards/images/email-options.png b/_docs/master/dashboards/images/email-options.png index 3c1075bed2..cd8ba153ae 100644 Binary files a/_docs/master/dashboards/images/email-options.png and b/_docs/master/dashboards/images/email-options.png differ diff --git a/_docs/master/dashboards/images/email-or-slack.png b/_docs/master/dashboards/images/email-or-slack.png index 468112f5a1..9c83461030 100644 Binary files a/_docs/master/dashboards/images/email-or-slack.png and b/_docs/master/dashboards/images/email-or-slack.png differ diff --git a/_docs/master/dashboards/images/enter-a-url.png b/_docs/master/dashboards/images/enter-a-url.png index 650c2ab595..68fe5a2398 100644 Binary files a/_docs/master/dashboards/images/enter-a-url.png and b/_docs/master/dashboards/images/enter-a-url.png differ diff --git a/_docs/master/dashboards/images/field-values-linked-filters.png b/_docs/master/dashboards/images/field-values-linked-filters.png index 06c46d75be..7121af8bb2 100644 Binary files a/_docs/master/dashboards/images/field-values-linked-filters.png and b/_docs/master/dashboards/images/field-values-linked-filters.png differ diff --git a/_docs/master/dashboards/images/filters.png b/_docs/master/dashboards/images/filters.png index c95f02b4aa..fb727587db 100644 Binary files a/_docs/master/dashboards/images/filters.png and b/_docs/master/dashboards/images/filters.png differ diff --git a/_docs/master/dashboards/images/foreign-key-linked-filters.png b/_docs/master/dashboards/images/foreign-key-linked-filters.png index b060334122..686671f73e 100644 Binary files a/_docs/master/dashboards/images/foreign-key-linked-filters.png and b/_docs/master/dashboards/images/foreign-key-linked-filters.png differ diff --git a/_docs/master/dashboards/images/id-value.png b/_docs/master/dashboards/images/id-value.png index 83c56aae0e..67933de6df 100644 Binary files a/_docs/master/dashboards/images/id-value.png and b/_docs/master/dashboards/images/id-value.png differ diff --git a/_docs/master/dashboards/images/interactive-dashboard.png b/_docs/master/dashboards/images/interactive-dashboard.png index 2f0cd35fc8..2ea88ff047 100644 Binary files a/_docs/master/dashboards/images/interactive-dashboard.png and b/_docs/master/dashboards/images/interactive-dashboard.png differ diff --git a/_docs/master/dashboards/images/kpi-grid.png b/_docs/master/dashboards/images/kpi-grid.png index 0c040e3b33..f5d97658fe 100644 Binary files a/_docs/master/dashboards/images/kpi-grid.png and b/_docs/master/dashboards/images/kpi-grid.png differ diff --git a/_docs/master/dashboards/images/kpis-with-large-chart-below.png b/_docs/master/dashboards/images/kpis-with-large-chart-below.png index f726f75618..25dba58f76 100644 Binary files a/_docs/master/dashboards/images/kpis-with-large-chart-below.png and b/_docs/master/dashboards/images/kpis-with-large-chart-below.png differ diff --git a/_docs/master/dashboards/images/large-chart-with-kpis-to-the-right.png b/_docs/master/dashboards/images/large-chart-with-kpis-to-the-right.png index 73d4f52b36..272901fc12 100644 Binary files a/_docs/master/dashboards/images/large-chart-with-kpis-to-the-right.png and b/_docs/master/dashboards/images/large-chart-with-kpis-to-the-right.png differ diff --git a/_docs/master/dashboards/images/linked-filter.png b/_docs/master/dashboards/images/linked-filter.png index 4fcbddf7a4..20e2d67052 100644 Binary files a/_docs/master/dashboards/images/linked-filter.png and b/_docs/master/dashboards/images/linked-filter.png differ diff --git a/_docs/master/dashboards/images/markdown.png b/_docs/master/dashboards/images/markdown.png index c9c10c5129..7e00495001 100644 Binary files a/_docs/master/dashboards/images/markdown.png and b/_docs/master/dashboards/images/markdown.png differ diff --git a/_docs/master/dashboards/images/multi-series_query_builder.png b/_docs/master/dashboards/images/multi-series_query_builder.png index 95239ce0db..8b0e0053a1 100644 Binary files a/_docs/master/dashboards/images/multi-series_query_builder.png and b/_docs/master/dashboards/images/multi-series_query_builder.png differ diff --git a/_docs/master/dashboards/images/pass-category-to-filter.png b/_docs/master/dashboards/images/pass-category-to-filter.png index 7954b8beb8..7bd2b90434 100644 Binary files a/_docs/master/dashboards/images/pass-category-to-filter.png and b/_docs/master/dashboards/images/pass-category-to-filter.png differ diff --git a/_docs/master/dashboards/images/pass-value.png b/_docs/master/dashboards/images/pass-value.png index 55fb78de5a..19d1856c29 100644 Binary files a/_docs/master/dashboards/images/pass-value.png and b/_docs/master/dashboards/images/pass-value.png differ diff --git a/_docs/master/dashboards/images/result.png b/_docs/master/dashboards/images/result.png index 78a05f90c0..fd34bbc1bb 100644 Binary files a/_docs/master/dashboards/images/result.png and b/_docs/master/dashboards/images/result.png differ diff --git a/_docs/master/dashboards/images/selectable-values.png b/_docs/master/dashboards/images/selectable-values.png index ea42a7b321..b86c3d968f 100644 Binary files a/_docs/master/dashboards/images/selectable-values.png and b/_docs/master/dashboards/images/selectable-values.png differ diff --git a/_docs/master/dashboards/images/set-filter-values.png b/_docs/master/dashboards/images/set-filter-values.png index ebb8c424fa..15e5f14966 100644 Binary files a/_docs/master/dashboards/images/set-filter-values.png and b/_docs/master/dashboards/images/set-filter-values.png differ diff --git a/_docs/master/dashboards/images/set-to-bar-chart.png b/_docs/master/dashboards/images/set-to-bar-chart.png index fb37836150..7915440c4c 100644 Binary files a/_docs/master/dashboards/images/set-to-bar-chart.png and b/_docs/master/dashboards/images/set-to-bar-chart.png differ diff --git a/_docs/master/dashboards/images/settings-sidebar.png b/_docs/master/dashboards/images/settings-sidebar.png index 46c1224ac6..3a55ecf32f 100644 Binary files a/_docs/master/dashboards/images/settings-sidebar.png and b/_docs/master/dashboards/images/settings-sidebar.png differ diff --git a/_docs/master/dashboards/images/share-icon.png b/_docs/master/dashboards/images/share-icon.png index f1fbc51d19..4d350dce92 100644 Binary files a/_docs/master/dashboards/images/share-icon.png and b/_docs/master/dashboards/images/share-icon.png differ diff --git a/_docs/master/dashboards/images/slack-subscription-options.png b/_docs/master/dashboards/images/slack-subscription-options.png index 0cc33062e2..37d3b51d7b 100644 Binary files a/_docs/master/dashboards/images/slack-subscription-options.png and b/_docs/master/dashboards/images/slack-subscription-options.png differ diff --git a/_docs/master/dashboards/images/text-card-button.png b/_docs/master/dashboards/images/text-card-button.png index d30572e041..b1fee3f027 100644 Binary files a/_docs/master/dashboards/images/text-card-button.png and b/_docs/master/dashboards/images/text-card-button.png differ diff --git a/_docs/master/dashboards/images/time-grouping.png b/_docs/master/dashboards/images/time-grouping.png index e05482f4ab..fd74913e11 100644 Binary files a/_docs/master/dashboards/images/time-grouping.png and b/_docs/master/dashboards/images/time-grouping.png differ diff --git a/_docs/master/dashboards/images/toggle-width.png b/_docs/master/dashboards/images/toggle-width.png index 89a4f30cd3..084a9fd34f 100644 Binary files a/_docs/master/dashboards/images/toggle-width.png and b/_docs/master/dashboards/images/toggle-width.png differ diff --git a/_docs/master/dashboards/images/update-a-dashboard-filter.png b/_docs/master/dashboards/images/update-a-dashboard-filter.png index c635cb4322..57dabebe6b 100644 Binary files a/_docs/master/dashboards/images/update-a-dashboard-filter.png and b/_docs/master/dashboards/images/update-a-dashboard-filter.png differ diff --git a/_docs/master/dashboards/images/use-filter.png b/_docs/master/dashboards/images/use-filter.png index ab309f6b6f..e8c930d17a 100644 Binary files a/_docs/master/dashboards/images/use-filter.png and b/_docs/master/dashboards/images/use-filter.png differ diff --git a/_docs/master/dashboards/images/visualization-settings.png b/_docs/master/dashboards/images/visualization-settings.png index a5066926cc..7d8b94ff97 100644 Binary files a/_docs/master/dashboards/images/visualization-settings.png and b/_docs/master/dashboards/images/visualization-settings.png differ diff --git a/_docs/master/dashboards/images/visualize-another-way.png b/_docs/master/dashboards/images/visualize-another-way.png index 4fb822522c..5594a37a56 100644 Binary files a/_docs/master/dashboards/images/visualize-another-way.png and b/_docs/master/dashboards/images/visualize-another-way.png differ diff --git a/_docs/master/dashboards/images/wiring-cards.png b/_docs/master/dashboards/images/wiring-cards.png index e914dcb007..ba0d88446e 100644 Binary files a/_docs/master/dashboards/images/wiring-cards.png and b/_docs/master/dashboards/images/wiring-cards.png differ diff --git a/_docs/master/dashboards/images/wiring-up-filter.png b/_docs/master/dashboards/images/wiring-up-filter.png index a5066926cc..09119cedd1 100644 Binary files a/_docs/master/dashboards/images/wiring-up-filter.png and b/_docs/master/dashboards/images/wiring-up-filter.png differ diff --git a/_docs/master/dashboards/subscriptions.md b/_docs/master/dashboards/subscriptions.md index e6c43ecf74..3c678aad5b 100644 --- a/_docs/master/dashboards/subscriptions.md +++ b/_docs/master/dashboards/subscriptions.md @@ -87,7 +87,7 @@ If you check this box, Metabase will drop any visualization settings applied to Here you can specify which questions Metabase should attach results for. -The attached files will include up to 1 048 575 rows by default. If you're self-hosting Metabase, you can adjust this row limit by setting the environment variable [MB_ATTACHMENT_ROW_LIMIT](../configuring-metabase/environment-variables#mb_attachment_row_limit). To change this row limit on your Metabase Cloud instance, you can [contact us](/help-premium) and request a different row limit. +The attached files will include up to 2000 rows by default. If you're self-hosting Metabase, you can adjust this row limit by setting the environment variable [MB_UNAGGREGATED_QUERY_ROW_LIMIT](../configuring-metabase/environment-variables#mb_unaggregated_query_row_limit). To change this row limit on your Metabase Cloud instance, you can [contact us](/help-premium) and request a different row limit. ## Slack subscription options diff --git a/_docs/master/data-modeling/images/AddSegment.png b/_docs/master/data-modeling/images/AddSegment.png index 93fe3d4995..3c365b635b 100644 Binary files a/_docs/master/data-modeling/images/AddSegment.png and b/_docs/master/data-modeling/images/AddSegment.png differ diff --git a/_docs/master/data-modeling/images/CreateSegment.png b/_docs/master/data-modeling/images/CreateSegment.png index 7993c16136..b7f1ece51f 100644 Binary files a/_docs/master/data-modeling/images/CreateSegment.png and b/_docs/master/data-modeling/images/CreateSegment.png differ diff --git a/_docs/master/data-modeling/images/EditMessage.png b/_docs/master/data-modeling/images/EditMessage.png index 159b805657..d789d4dcc1 100644 Binary files a/_docs/master/data-modeling/images/EditMessage.png and b/_docs/master/data-modeling/images/EditMessage.png differ diff --git a/_docs/master/data-modeling/images/FinishedSegment.png b/_docs/master/data-modeling/images/FinishedSegment.png index 8cd40d5184..3a41612dd6 100644 Binary files a/_docs/master/data-modeling/images/FinishedSegment.png and b/_docs/master/data-modeling/images/FinishedSegment.png differ diff --git a/_docs/master/data-modeling/images/Segment.png b/_docs/master/data-modeling/images/Segment.png index 5fdfdfbd88..7d42b3898d 100644 Binary files a/_docs/master/data-modeling/images/Segment.png and b/_docs/master/data-modeling/images/Segment.png differ diff --git a/_docs/master/data-modeling/images/SegmentActions.png b/_docs/master/data-modeling/images/SegmentActions.png index 5aca302f14..8761b49c76 100644 Binary files a/_docs/master/data-modeling/images/SegmentActions.png and b/_docs/master/data-modeling/images/SegmentActions.png differ diff --git a/_docs/master/data-modeling/images/column-settings.png b/_docs/master/data-modeling/images/column-settings.png index 6a8819a170..53ec2451f6 100644 Binary files a/_docs/master/data-modeling/images/column-settings.png and b/_docs/master/data-modeling/images/column-settings.png differ diff --git a/_docs/master/data-modeling/images/common-metrics.png b/_docs/master/data-modeling/images/common-metrics.png index 00d625eb40..0dd62472dd 100644 Binary files a/_docs/master/data-modeling/images/common-metrics.png and b/_docs/master/data-modeling/images/common-metrics.png differ diff --git a/_docs/master/data-modeling/images/entity-picker-metrics-tab.png b/_docs/master/data-modeling/images/entity-picker-metrics-tab.png index d71e3e03d6..d4fb36f9a8 100644 Binary files a/_docs/master/data-modeling/images/entity-picker-metrics-tab.png and b/_docs/master/data-modeling/images/entity-picker-metrics-tab.png differ diff --git a/_docs/master/data-modeling/images/format-as-url.png b/_docs/master/data-modeling/images/format-as-url.png index 65d35ce0da..31485f816e 100644 Binary files a/_docs/master/data-modeling/images/format-as-url.png and b/_docs/master/data-modeling/images/format-as-url.png differ diff --git a/_docs/master/data-modeling/images/formula.png b/_docs/master/data-modeling/images/formula.png index 8e020111ca..694554b377 100644 Binary files a/_docs/master/data-modeling/images/formula.png and b/_docs/master/data-modeling/images/formula.png differ diff --git a/_docs/master/data-modeling/images/metrics-built-on-other-metrics.png b/_docs/master/data-modeling/images/metrics-built-on-other-metrics.png index 2ef4114f12..70f5fdfcc8 100644 Binary files a/_docs/master/data-modeling/images/metrics-built-on-other-metrics.png and b/_docs/master/data-modeling/images/metrics-built-on-other-metrics.png differ diff --git a/_docs/master/data-modeling/images/original-schema.png b/_docs/master/data-modeling/images/original-schema.png index 6ed4ac9c1c..e9d1d1e78a 100644 Binary files a/_docs/master/data-modeling/images/original-schema.png and b/_docs/master/data-modeling/images/original-schema.png differ diff --git a/_docs/master/data-modeling/images/pinned-metrics.png b/_docs/master/data-modeling/images/pinned-metrics.png index 70b4de7058..83be27c159 100644 Binary files a/_docs/master/data-modeling/images/pinned-metrics.png and b/_docs/master/data-modeling/images/pinned-metrics.png differ diff --git a/_docs/master/data-modeling/images/table-metadata.png b/_docs/master/data-modeling/images/table-metadata.png index d16aabea01..7a04a11fe5 100644 Binary files a/_docs/master/data-modeling/images/table-metadata.png and b/_docs/master/data-modeling/images/table-metadata.png differ diff --git a/_docs/master/data-modeling/images/table-with-json-column.png b/_docs/master/data-modeling/images/table-with-json-column.png index 8e020111ca..3a9e702c12 100644 Binary files a/_docs/master/data-modeling/images/table-with-json-column.png and b/_docs/master/data-modeling/images/table-with-json-column.png differ diff --git a/_docs/master/data-modeling/images/turn-into-a-model.png b/_docs/master/data-modeling/images/turn-into-a-model.png index b561a8dc44..ed5d8438c8 100644 Binary files a/_docs/master/data-modeling/images/turn-into-a-model.png and b/_docs/master/data-modeling/images/turn-into-a-model.png differ diff --git a/_docs/master/data-modeling/images/unfold-json-setting.png b/_docs/master/data-modeling/images/unfold-json-setting.png index f69b404401..8861ac4fe5 100644 Binary files a/_docs/master/data-modeling/images/unfold-json-setting.png and b/_docs/master/data-modeling/images/unfold-json-setting.png differ diff --git a/_docs/master/data-modeling/images/unfolded-fields.png b/_docs/master/data-modeling/images/unfolded-fields.png index 7970c2d720..5b4d6e8600 100644 Binary files a/_docs/master/data-modeling/images/unfolded-fields.png and b/_docs/master/data-modeling/images/unfolded-fields.png differ diff --git a/_docs/master/data-modeling/images/unfolded-values.png b/_docs/master/data-modeling/images/unfolded-values.png index 9a8efb6d70..876501ff02 100644 Binary files a/_docs/master/data-modeling/images/unfolded-values.png and b/_docs/master/data-modeling/images/unfolded-values.png differ diff --git a/_docs/master/databases/images/atlas-connect.png b/_docs/master/databases/images/atlas-connect.png index cda55015c1..93aeb7759a 100644 Binary files a/_docs/master/databases/images/atlas-connect.png and b/_docs/master/databases/images/atlas-connect.png differ diff --git a/_docs/master/databases/images/connection-string.png b/_docs/master/databases/images/connection-string.png index edba66aced..928677d491 100644 Binary files a/_docs/master/databases/images/connection-string.png and b/_docs/master/databases/images/connection-string.png differ diff --git a/_docs/master/databases/images/snowflake-copy-account-url.png b/_docs/master/databases/images/snowflake-copy-account-url.png index cf9a18f67a..f77a9bdc42 100644 Binary files a/_docs/master/databases/images/snowflake-copy-account-url.png and b/_docs/master/databases/images/snowflake-copy-account-url.png differ diff --git a/_docs/master/databases/images/upload-icon.png b/_docs/master/databases/images/upload-icon.png index aef6072f6a..12b3232a46 100644 Binary files a/_docs/master/databases/images/upload-icon.png and b/_docs/master/databases/images/upload-icon.png differ diff --git a/_docs/master/databases/images/upload-to-collection.png b/_docs/master/databases/images/upload-to-collection.png index 8926f599ba..0ba79dde9d 100644 Binary files a/_docs/master/databases/images/upload-to-collection.png and b/_docs/master/databases/images/upload-to-collection.png differ diff --git a/_docs/master/databases/ssh-tunnel.md b/_docs/master/databases/ssh-tunnel.md index 18017a3b90..17b65d853b 100644 --- a/_docs/master/databases/ssh-tunnel.md +++ b/_docs/master/databases/ssh-tunnel.md @@ -67,8 +67,6 @@ If you have problems connecting, verify the SSH host port and password by connec NOTE: the SSH server needs to have "AllowTcpForwarding" configuration set to "yes" for the tunneling to work. -NOTE: the best practice with SSH Tunnel Hosts is to deny all traffic except from approved clients. Metabase lists our Metabase [Cloud IPs to whitelist here](/docs/latest/cloud/ip-addresses-to-whitelist). - ## Disadvantages of indirect connections While using an SSH tunnel makes it possible to use a data warehouse that is otherwise inaccessible, it's almost always preferable to use a direct connection when possible. diff --git a/_docs/master/developers-guide/community-drivers.md b/_docs/master/developers-guide/community-drivers.md index 2b13b29798..813138954b 100644 --- a/_docs/master/developers-guide/community-drivers.md +++ b/_docs/master/developers-guide/community-drivers.md @@ -37,7 +37,7 @@ Anyone can build a community driver. These are the currently known third-party d | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | [CSV](https://github.com/Markenson/csv-metabase-driver) | ![GitHub stars](https://img.shields.io/github/stars/Markenson/csv-metabase-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/Markenson/csv-metabase-driver) | | [Databend](https://github.com/databendcloud/metabase-databend-driver) | ![GitHub stars](https://img.shields.io/github/stars/databendcloud/metabase-databend-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/databendcloud/metabase-databend-driver) | -| [DB2](https://github.com/damienchambe/metabase-db2-driver) | ![GitHub stars](https://img.shields.io/github/stars/damienchambe/metabase-db2-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/damienchambe/metabase-db2-driver) | +| [DB2](https://github.com/damienchambe/metabase-db2-driver) | ![GitHub stars](https://img.shields.io/github/stars/damienchambe/metabase-db2-driver) | ![Github (Pre-)Release Date](https://img.shields.io/github/release-date-pre/damienchambe/metabase-db2-driver) | | [Dremio](https://github.com/Baoqi/metabase-dremio-driver) | ![GitHub stars](https://img.shields.io/github/stars/Baoqi/metabase-dremio-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/Baoqi/metabase-dremio-driver) | | [DuckDB](https://github.com/MotherDuck-Open-Source/metabase_duckdb_driver) | ![GitHub stars](https://img.shields.io/github/stars/MotherDuck-Open-Source/metabase_duckdb_driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/MotherDuck-Open-Source/metabase_duckdb_driver) | | [Firebolt](https://github.com/firebolt-db/metabase-firebolt-driver) | ![GitHub stars](https://img.shields.io/github/stars/firebolt-db/metabase-firebolt-driver) | ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/firebolt-db/metabase-firebolt-driver) | diff --git a/_docs/master/developers-guide/devenv.md b/_docs/master/developers-guide/devenv.md index 14d6002437..b5798dc53c 100644 --- a/_docs/master/developers-guide/devenv.md +++ b/_docs/master/developers-guide/devenv.md @@ -28,8 +28,6 @@ yarn dev This runs both the [frontend](#frontend) and [backend](#backend). Alternatively, you can run them separately in two terminal sessions below. -To use any other database beside the default ones please take a look at [Building Drivers](#building-drivers) further down in this document. - ### Frontend Metabase depends on third-party libraries to run, so you'll need to keep those up to date. The Clojure CLI will automatically fetch the dependencies when needed. With JavaScript dependencies, however, you'll need to kick off the installation process manually. diff --git a/_docs/master/developers-guide/driver-changelog.md b/_docs/master/developers-guide/driver-changelog.md index c33e2b3045..d29eb31afc 100644 --- a/_docs/master/developers-guide/driver-changelog.md +++ b/_docs/master/developers-guide/driver-changelog.md @@ -11,6 +11,16 @@ layout: new-docs # Driver Interface Changelog +## Metabase 0.57.0 + +- Add the feature `:view` for drivers that support views + +- Add the multi-method `metabase.driver/view-name-length-limit`, like `table-name-length-limit` but for views + +- Add the multi-method `metabase.driver/create-view!` that allows the driver to create or replace a view + +- Add the multi-method `metabase.driver/drop-view!` that allows the driver to delete a view + ## Metabase 0.56.0 - Add the testing multi-method `tx/track-dataset` for shared cloud dbs to track loaded datasets for more efficient sharing. @@ -27,10 +37,6 @@ layout: new-docs replace existing keys like `:alias`, `:join-alias`, or `:name`; make sure you use `driver-api/qp.add.alias`, `driver-api/qp.add.source-table`, and `driver-api/qp.add.source-alias` respectively. -- Extend `datetime()` to accept UTF-8 encoded binary and numbers (unix timestamps) in addition to strings. - -- Added a feature `:expressions/today` for drivers that support generating a date for the current day. - ## Metabase 0.55.0 - Add the multi-method `->date` that allows the driver to control how to cast strings and temporal types to dates. diff --git a/_docs/master/developers-guide/frontend.md b/_docs/master/developers-guide/frontend.md index 1e0630eef2..1031ea7210 100644 --- a/_docs/master/developers-guide/frontend.md +++ b/_docs/master/developers-guide/frontend.md @@ -266,7 +266,7 @@ function getFoo(a, b, c) { } ``` -- Be conservative with what comments you add to the codebase. Comments shouldn't be used as reminders or as todos--record those by creating a new issue in GitHub. Ideally, code should be written in such a way that it explains itself clearly. When it does not, you should first try rewriting the code. If for whatever reason you are unable to write something clearly, add a comment to explain the "why". +- Be conservative with what comments you add to the codebase. Comments shouldn't be used as reminders or as todos--record those by creating a new issue in Github. Ideally, code should be written in such a way that it explains itself clearly. When it does not, you should first try rewriting the code. If for whatever reason you are unable to write something clearly, add a comment to explain the "why". ```javascript diff --git a/_docs/master/developers-guide/security-token-scanner.md b/_docs/master/developers-guide/security-token-scanner.md deleted file mode 100644 index 806440e5f1..0000000000 --- a/_docs/master/developers-guide/security-token-scanner.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: 'Developers Guide' -title: 'Security Token Scanner' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/developers-guide/security-token-scanner.md' -layout: new-docs ---- - -# Security Token Scanner - -Security token scanner detects potentially leaked API keys and secrets in the Metabase codebase. Runs automatically as a git precommit hook on staged files. - -## Usage - -```bash -# Scan specific files -./bin/mage -token-scan deps.edn bb.edn - -# Scan all files -./bin/mage -token-scan -a - -# Verbose output -./bin/mage -token-scan -v deps.edn -``` - -## Token Types Detected - -- Airgap tokens (`airgap_`) -- Dev tokens (`mb_dev_`, 64-char hex) -- OpenAI API keys (`sk-`) -- JWT/JWE tokens -- GitHub tokens (`gh[pousr]_`) -- Slack bot tokens (`xoxb-`) -- AWS access keys (`AKIA`) - -The scanner uses `.gitignore` to filter files and will block commits containing detected tokens. - - -## False positives - -If the scanner flags a non-token string, you should **exclude the literal token string** by adding it to: `mage/resources/token_scanner/token_whitelist.txt`. - -``` -echo 'my-token-string' >> mage/resources/token_scanner/token_whitelist.txt && git add mage/resources/token_scanner/token_whitelist.txt -``` - - -## Bypassing (not recommended) - -```bash -git commit --no-verify -m "commit message" -``` diff --git a/_docs/master/developers-guide/versioning.md b/_docs/master/developers-guide/versioning.md index 82e02cc6d8..655d42cd76 100644 --- a/_docs/master/developers-guide/versioning.md +++ b/_docs/master/developers-guide/versioning.md @@ -68,5 +68,5 @@ E.g., ## Further reading -- [Metabase releases on GitHub](https://github.com/metabase/metabase/releases) +- [Metabase releases on Github](https://github.com/metabase/metabase/releases) - [Metabase release blog posts](/releases) diff --git a/_docs/master/embedding/images/04-preview.png b/_docs/master/embedding/images/04-preview.png index 2c094660f3..6a3f0899c3 100644 Binary files a/_docs/master/embedding/images/04-preview.png and b/_docs/master/embedding/images/04-preview.png differ diff --git a/_docs/master/embedding/images/05-code.png b/_docs/master/embedding/images/05-code.png index ad5452e2e6..a5ffd69820 100644 Binary files a/_docs/master/embedding/images/05-code.png and b/_docs/master/embedding/images/05-code.png differ diff --git a/_docs/master/embedding/images/action-buttons.png b/_docs/master/embedding/images/action-buttons.png index 32282cca33..772559e2ed 100644 Binary files a/_docs/master/embedding/images/action-buttons.png and b/_docs/master/embedding/images/action-buttons.png differ diff --git a/_docs/master/embedding/images/additional-info.png b/_docs/master/embedding/images/additional-info.png index 86910c5a20..04b0b02be0 100644 Binary files a/_docs/master/embedding/images/additional-info.png and b/_docs/master/embedding/images/additional-info.png differ diff --git a/_docs/master/embedding/images/all-users.png b/_docs/master/embedding/images/all-users.png index 82b59fed3a..8148f8493b 100644 Binary files a/_docs/master/embedding/images/all-users.png and b/_docs/master/embedding/images/all-users.png differ diff --git a/_docs/master/embedding/images/create-a-public-link.png b/_docs/master/embedding/images/create-a-public-link.png index da4c9844b4..0f4f8e810e 100644 Binary files a/_docs/master/embedding/images/create-a-public-link.png and b/_docs/master/embedding/images/create-a-public-link.png differ diff --git a/_docs/master/embedding/images/dashboard-sharing.png b/_docs/master/embedding/images/dashboard-sharing.png index d4033342d1..488a650988 100644 Binary files a/_docs/master/embedding/images/dashboard-sharing.png and b/_docs/master/embedding/images/dashboard-sharing.png differ diff --git a/_docs/master/embedding/images/data-picker.png b/_docs/master/embedding/images/data-picker.png index 31aa99c04c..c4aabbbf29 100644 Binary files a/_docs/master/embedding/images/data-picker.png and b/_docs/master/embedding/images/data-picker.png differ diff --git a/_docs/master/embedding/images/embedded-example-dashboard.png b/_docs/master/embedding/images/embedded-example-dashboard.png index dda21e391d..65c0fd3984 100644 Binary files a/_docs/master/embedding/images/embedded-example-dashboard.png and b/_docs/master/embedding/images/embedded-example-dashboard.png differ diff --git a/_docs/master/embedding/images/enable-public-sharing.png b/_docs/master/embedding/images/enable-public-sharing.png index d07f32f7bf..13a96abea8 100644 Binary files a/_docs/master/embedding/images/enable-public-sharing.png and b/_docs/master/embedding/images/enable-public-sharing.png differ diff --git a/_docs/master/embedding/images/full-app-embedding-sso.png b/_docs/master/embedding/images/full-app-embedding-sso.png deleted file mode 100644 index 109ff12385..0000000000 Binary files a/_docs/master/embedding/images/full-app-embedding-sso.png and /dev/null differ diff --git a/_docs/master/embedding/images/full-data-picker.png b/_docs/master/embedding/images/full-data-picker.png index 31aa99c04c..11cff5e4df 100644 Binary files a/_docs/master/embedding/images/full-data-picker.png and b/_docs/master/embedding/images/full-data-picker.png differ diff --git a/_docs/master/embedding/images/interactive-question-sample-app.png b/_docs/master/embedding/images/interactive-question-sample-app.png index 82b59fed3a..f492bbcb86 100644 Binary files a/_docs/master/embedding/images/interactive-question-sample-app.png and b/_docs/master/embedding/images/interactive-question-sample-app.png differ diff --git a/_docs/master/embedding/images/interactive-question.png b/_docs/master/embedding/images/interactive-question.png index 2789fb4304..a46e7cae66 100644 Binary files a/_docs/master/embedding/images/interactive-question.png and b/_docs/master/embedding/images/interactive-question.png differ diff --git a/_docs/master/embedding/images/jwt-setup.png b/_docs/master/embedding/images/jwt-setup.png index 0c639d1032..539d36e1d1 100644 Binary files a/_docs/master/embedding/images/jwt-setup.png and b/_docs/master/embedding/images/jwt-setup.png differ diff --git a/_docs/master/embedding/images/map-user-attribute.png b/_docs/master/embedding/images/map-user-attribute.png index d4033342d1..366ac30e9b 100644 Binary files a/_docs/master/embedding/images/map-user-attribute.png and b/_docs/master/embedding/images/map-user-attribute.png differ diff --git a/_docs/master/embedding/images/no-top-no-side.png b/_docs/master/embedding/images/no-top-no-side.png index 2158748cfc..02977f6b73 100644 Binary files a/_docs/master/embedding/images/no-top-no-side.png and b/_docs/master/embedding/images/no-top-no-side.png differ diff --git a/_docs/master/embedding/images/powered-by-metabase.png b/_docs/master/embedding/images/powered-by-metabase.png index 32282cca33..7108cd02c4 100644 Binary files a/_docs/master/embedding/images/powered-by-metabase.png and b/_docs/master/embedding/images/powered-by-metabase.png differ diff --git a/_docs/master/embedding/images/public-embed.png b/_docs/master/embedding/images/public-embed.png index 31aa99c04c..8e87c240c7 100644 Binary files a/_docs/master/embedding/images/public-embed.png and b/_docs/master/embedding/images/public-embed.png differ diff --git a/_docs/master/embedding/images/public-export.png b/_docs/master/embedding/images/public-export.png index 4c1f391d9c..0269f83ca1 100644 Binary files a/_docs/master/embedding/images/public-export.png and b/_docs/master/embedding/images/public-export.png differ diff --git a/_docs/master/embedding/images/public-link-custom-destination.png b/_docs/master/embedding/images/public-link-custom-destination.png index 7e4d253fc1..ee4b0bd8c9 100644 Binary files a/_docs/master/embedding/images/public-link-custom-destination.png and b/_docs/master/embedding/images/public-link-custom-destination.png differ diff --git a/_docs/master/embedding/images/pug-and-play.png b/_docs/master/embedding/images/pug-and-play.png index 20ef8d0f8e..ff0ec4c14b 100644 Binary files a/_docs/master/embedding/images/pug-and-play.png and b/_docs/master/embedding/images/pug-and-play.png differ diff --git a/_docs/master/embedding/images/query-builder.png b/_docs/master/embedding/images/query-builder.png index 2789fb4304..7bc097aa39 100644 Binary files a/_docs/master/embedding/images/query-builder.png and b/_docs/master/embedding/images/query-builder.png differ diff --git a/_docs/master/embedding/images/sandboxed-invoices-table.png b/_docs/master/embedding/images/sandboxed-invoices-table.png index 9c1c729b30..0eaa36d82b 100644 Binary files a/_docs/master/embedding/images/sandboxed-invoices-table.png and b/_docs/master/embedding/images/sandboxed-invoices-table.png differ diff --git a/_docs/master/embedding/images/see-shared-content.png b/_docs/master/embedding/images/see-shared-content.png index 4039f66dd8..351bbca436 100644 Binary files a/_docs/master/embedding/images/see-shared-content.png and b/_docs/master/embedding/images/see-shared-content.png differ diff --git a/_docs/master/embedding/images/sharing-embed.png b/_docs/master/embedding/images/sharing-embed.png index 0c639d1032..06fbdac85d 100644 Binary files a/_docs/master/embedding/images/sharing-embed.png and b/_docs/master/embedding/images/sharing-embed.png differ diff --git a/_docs/master/embedding/images/side-nav.png b/_docs/master/embedding/images/side-nav.png index 7e4d253fc1..c09d33bc38 100644 Binary files a/_docs/master/embedding/images/side-nav.png and b/_docs/master/embedding/images/side-nav.png differ diff --git a/_docs/master/embedding/images/sidebar-without-models.png b/_docs/master/embedding/images/sidebar-without-models.png index 469ecef80f..fb86445b58 100644 Binary files a/_docs/master/embedding/images/sidebar-without-models.png and b/_docs/master/embedding/images/sidebar-without-models.png differ diff --git a/_docs/master/embedding/images/signed-embedding-jwt.png b/_docs/master/embedding/images/signed-embedding-jwt.png deleted file mode 100644 index 4039f66dd8..0000000000 Binary files a/_docs/master/embedding/images/signed-embedding-jwt.png and /dev/null differ diff --git a/_docs/master/embedding/images/static-question.png b/_docs/master/embedding/images/static-question.png index 12252d59fa..0ce9d08c73 100644 Binary files a/_docs/master/embedding/images/static-question.png and b/_docs/master/embedding/images/static-question.png differ diff --git a/_docs/master/embedding/images/sync-groups.png b/_docs/master/embedding/images/sync-groups.png index d4f0298781..8d5e5aa443 100644 Binary files a/_docs/master/embedding/images/sync-groups.png and b/_docs/master/embedding/images/sync-groups.png differ diff --git a/_docs/master/embedding/images/top-nav.png b/_docs/master/embedding/images/top-nav.png index 1db0855e4d..dd9e445a13 100644 Binary files a/_docs/master/embedding/images/top-nav.png and b/_docs/master/embedding/images/top-nav.png differ diff --git a/_docs/master/embedding/interactive-embedding.md b/_docs/master/embedding/interactive-embedding.md index e80ce4741e..f85a97823d 100644 --- a/_docs/master/embedding/interactive-embedding.md +++ b/_docs/master/embedding/interactive-embedding.md @@ -82,7 +82,7 @@ To embed a specific Metabase dashboard, you'll want to use the dashboard's Entit src="http://metabase.yourcompany.com/dashboard/entity/[Entity ID]" ``` -To get a dashboard's Entity ID, visit the dashboard and click on the **info** button. In the **Overview** tab, copy the **Entity ID**. Then in your iframe's `src` attribute to: +To get a dashboard's Entity ID, visit the dashboard and click on the **info** button. In the **Overview** tab, copy the **Entity ID**. Then in your iframe's `src` attribute to: ``` src=http://metabase.yourcompany.com/dashboard/entity/Dc_7X8N7zf4iDK9Ps1M3b @@ -152,7 +152,7 @@ Learn more about [SameSite cookies](https://developer.mozilla.org/en-US/docs/Web ## Securing interactive embeds -Metabase uses HTTP cookies to authenticate people and keep them signed into your embedded Metabase, even when someone closes their browser session. If you enjoy diagrammed auth flows, check out [Interactive embedding with SSO](./securing-embeds). +Metabase uses HTTP cookies to authenticate people and keep them signed into your embedded Metabase, even when someone closes their browser session. If you enjoy diagrammed auth flows, check out [Interactive embedding with SSO](/learn/metabase-basics/embedding/securing-embeds). To limit the amount of time that a person stays logged in, set [`MAX_SESSION_AGE`](../configuring-metabase/environment-variables#max_session_age) to a number in minutes. The default value is 20,160 (two weeks). diff --git a/_docs/master/embedding/introduction.md b/_docs/master/embedding/introduction.md index dbc020d74d..a3f6ffa6fd 100644 --- a/_docs/master/embedding/introduction.md +++ b/_docs/master/embedding/introduction.md @@ -71,4 +71,3 @@ If you'd like to share your data with the good people of the internet, admins ca - [Publishing data visualizations to the web](/learn/metabase-basics/embedding/charts-and-dashboards). - [Multi-tenant self-service analytics](/learn/metabase-basics/embedding/multi-tenant-self-service-analytics). - [Customizing Metabase's appearance](../configuring-metabase/appearance). -- [Securing embedded Metabase](./securing-embeds) diff --git a/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html b/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html index 70e4b609e9..7effd3582a 100644 --- a/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html +++ b/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html @@ -9,7 +9,7 @@ layout: docs-api --- -BaseInteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface BaseInteractiveQuestionProps

interface BaseInteractiveQuestionProps {
    children?: ReactNode;
    entityTypes?: EmbeddingEntityType[];
    initialSqlParameters?: SqlParameterValues;
    isSaveEnabled?: boolean;
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>;
    onRun?: (question: undefined | MetabaseQuestion) => void;
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void;
    plugins?: MetabasePluginsConfig;
    questionId: null | SdkQuestionId;
    targetCollection?: SdkCollectionId;
    withDownloads?: boolean;
}
Index

Properties

children? +BaseInteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface BaseInteractiveQuestionProps

interface BaseInteractiveQuestionProps {
    children?: ReactNode;
    entityTypes?: EmbeddingEntityType[];
    initialSqlParameters?: SqlParameterValues;
    isSaveEnabled?: boolean;
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>;
    onRun?: (question: undefined | MetabaseQuestion) => void;
    onSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => void;
    plugins?: MetabasePluginsConfig;
    questionId: null | SdkQuestionId;
    targetCollection?: SdkCollectionId;
    withDownloads?: boolean;
}
Index

Properties

isSaveEnabled?: boolean

Whether to show the save button.

onBeforeSave?: (
    question: undefined | MetabaseQuestion,
    context: { isNewQuestion: boolean },
) => Promise<void>

A callback function that triggers before saving. Only relevant when isSaveEnabled = true

onRun?: (question: undefined | MetabaseQuestion) => void

A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

-
onSave?: (
    question: MetabaseQuestion,
    context: { dashboardTabId?: number; isNewQuestion: boolean },
) => void

A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

+
onSave?: (
    question: undefined | MetabaseQuestion,
    context: { isNewQuestion: boolean },
) => void

A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

questionId: null | SdkQuestionId

The ID of the question.
This is either: diff --git a/_docs/master/embedding/sdk/api/CreateQuestion.html b/_docs/master/embedding/sdk/api/CreateQuestion.html index dd1d9a4f9b..74327bd7e7 100644 --- a/_docs/master/embedding/sdk/api/CreateQuestion.html +++ b/_docs/master/embedding/sdk/api/CreateQuestion.html @@ -14,7 +14,7 @@

  • OptionalisSaveEnabled?: boolean

    Whether to show the save button.

  • OptionalonBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>

    A callback function that triggers before saving. Only relevant when isSaveEnabled = true

  • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

    A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

    -
  • OptionalonSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    +
  • OptionalonSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

  • Optionalplugins?: MetabasePluginsConfig
  • OptionaltargetCollection?: SdkCollectionId

    The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

  • OptionalwithDownloads?: boolean

    Enables the ability to download results in the interactive question.

  • Returns Element

    Use <InteractiveQuestion questionId="new" /> instead.

    diff --git a/_docs/master/embedding/sdk/api/CreateQuestionProps.html b/_docs/master/embedding/sdk/api/CreateQuestionProps.html index 162264812e..634c78328d 100644 --- a/_docs/master/embedding/sdk/api/CreateQuestionProps.html +++ b/_docs/master/embedding/sdk/api/CreateQuestionProps.html @@ -9,7 +9,7 @@ layout: docs-api --- -CreateQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface CreateQuestionProps

    interface CreateQuestionProps {
        entityTypes?: EmbeddingEntityType[];
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        targetCollection?: SdkCollectionId;
        withDownloads?: boolean;
    }
    Index

    Properties

    entityTypes? +CreateQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface CreateQuestionProps

    interface CreateQuestionProps {
        entityTypes?: EmbeddingEntityType[];
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        targetCollection?: SdkCollectionId;
        withDownloads?: boolean;
    }
    Index

    Properties

    isSaveEnabled?: boolean

    Whether to show the save button.

    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>

    A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    onRun?: (question: undefined | MetabaseQuestion) => void

    A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

    -
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    +
    onSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    targetCollection?: SdkCollectionId

    The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    withDownloads?: boolean

    Enables the ability to download results in the interactive question.

    diff --git a/_docs/master/embedding/sdk/api/DrillThroughQuestionProps.html b/_docs/master/embedding/sdk/api/DrillThroughQuestionProps.html index 4ef29e1abf..1fe84cf504 100644 --- a/_docs/master/embedding/sdk/api/DrillThroughQuestionProps.html +++ b/_docs/master/embedding/sdk/api/DrillThroughQuestionProps.html @@ -10,7 +10,7 @@ --- DrillThroughQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface DrillThroughQuestionProps

    Props for the drill-through question

    -
    interface DrillThroughQuestionProps {
        children?: ReactNode;
        className?: string;
        entityTypes?: EmbeddingEntityType[];
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        style?: CSSProperties;
        targetCollection?: SdkCollectionId;
        title?: SdkQuestionTitleProps;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
        withResetButton?: boolean;
    }
    Index

    Properties

    interface DrillThroughQuestionProps {
        children?: ReactNode;
        className?: string;
        entityTypes?: EmbeddingEntityType[];
        height?: Height<string | number>;
        initialSqlParameters?: SqlParameterValues;
        isSaveEnabled?: boolean;
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>;
        onRun?: (question: undefined | MetabaseQuestion) => void;
        onSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => void;
        plugins?: MetabasePluginsConfig;
        style?: CSSProperties;
        targetCollection?: SdkCollectionId;
        title?: SdkQuestionTitleProps;
        width?: Width<string | number>;
        withChartTypeSelector?: boolean;
        withDownloads?: boolean;
        withResetButton?: boolean;
    }
    Index

    Properties

    isSaveEnabled?: boolean

    Whether to show the save button.

    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>

    A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    onRun?: (question: undefined | MetabaseQuestion) => void

    A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

    -
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    +
    onSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => void

    A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    A custom style object to be added to the root element.

    targetCollection?: SdkCollectionId

    The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

    diff --git a/_docs/master/embedding/sdk/api/EditableDashboard.html b/_docs/master/embedding/sdk/api/EditableDashboard.html index 43f5381000..340dbcd435 100644 --- a/_docs/master/embedding/sdk/api/EditableDashboard.html +++ b/_docs/master/embedding/sdk/api/EditableDashboard.html @@ -9,9 +9,13 @@ layout: docs-api --- -EditableDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function EditableDashboard

    • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

      -

      Parameters

      • props: EditableDashboardProps
        • OptionalclassName?: string

          A custom class name to be added to the root element.

          -
        • dashboardId: SdkDashboardId

          The ID of the dashboard. +EditableDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

          Function EditableDashboard

          • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

            +

            Parameters

            • props: {
                  drillThroughQuestionHeight?: Height<string | number>;
                  drillThroughQuestionProps?: DrillThroughQuestionProps;
                  plugins?: MetabasePluginsConfig;
                  renderDrillThroughQuestion?: () => ReactNode;
              } & {
                  dashboardId: SdkDashboardId;
                  hiddenParameters?: string[];
                  initialParameters?: ParameterValues;
                  withCardTitle?: boolean;
                  withDownloads?: boolean;
                  withTitle?: boolean;
              } & { className?: string; style?: CSSProperties } & {
                  onLoad?: (dashboard: null | MetabaseDashboard) => void;
                  onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
              } & {}
              • OptionaldrillThroughQuestionHeight?: Height<string | number>

                Height of a question component when drilled from the dashboard to a question level.

                +
              • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

                Props of a question component when drilled from the dashboard to a question level.

                +
              • Optionalplugins?: MetabasePluginsConfig

                Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

                +
              • OptionalrenderDrillThroughQuestion?: () => ReactNode

                A custom React component to render the question layout. +Use namespaced InteractiveQuestion components to build the layout.

                +
              • dashboardId: SdkDashboardId

                The ID of the dashboard.
                This is either:

                @@ -20,30 +24,25 @@
              • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
              -
          • OptionaldataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

            Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

            -
          • OptionaldrillThroughQuestionHeight?: Height<string | number>

            Height of a question component when drilled from the dashboard to a question level.

            -
          • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

            Props of a question component when drilled from the dashboard to a question level.

            -
          • OptionalhiddenParameters?: string[]

            A list of parameters to hide. +

          • OptionalhiddenParameters?: string[]

            A list of parameters to hide.

            -
          • OptionalinitialParameters?: ParameterValues

            Query parameters for the dashboard. For a single option, use a string value, and use a list of strings for multiple options. +

          • OptionalinitialParameters?: ParameterValues

            Query parameters for the dashboard. For a single option, use a string value, and use a list of strings for multiple options.

            -
          • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

            Callback that is called when the dashboard is loaded.

            -
          • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

            Callback that is called when the dashboard is loaded without cards.

            -
          • Optionalplugins?: MetabasePluginsConfig

            Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

            -
          • OptionalrenderDrillThroughQuestion?: () => ReactNode

            A custom React component to render the question layout. -Use namespaced InteractiveQuestion components to build the layout.

            -
          • Optionalstyle?: CSSProperties

            A custom style object to be added to the root element.

            -
          • OptionalwithCardTitle?: boolean

            Whether the dashboard cards should display a title.

            -
          • OptionalwithDownloads?: boolean

            Whether to hide the download button.

            -
          • OptionalwithTitle?: boolean

            Whether the dashboard should display a title.

            -

      Returns Element

    +
  • OptionalwithCardTitle?: boolean

    Whether the dashboard cards should display a title.

    +
  • OptionalwithDownloads?: boolean

    Whether to hide the download button.

    +
  • OptionalwithTitle?: boolean

    Whether the dashboard should display a title.

    +
    • OptionalclassName?: string

      A custom class name to be added to the root element.

      +
    • Optionalstyle?: CSSProperties

      A custom style object to be added to the root element.

      +
    • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

      Callback that is called when the dashboard is loaded.

      +
    • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

      Callback that is called when the dashboard is loaded without cards.

      +

      Returns Element

      diff --git a/_docs/master/embedding/sdk/api/EditableDashboardProps.html b/_docs/master/embedding/sdk/api/EditableDashboardProps.html index 624a16cef9..80386abbe9 100644 --- a/_docs/master/embedding/sdk/api/EditableDashboardProps.html +++ b/_docs/master/embedding/sdk/api/EditableDashboardProps.html @@ -9,9 +9,8 @@ layout: docs-api --- -EditableDashboardProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface EditableDashboardProps

      interface EditableDashboardProps {
          className?: string;
          dashboardId: SdkDashboardId;
          dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">;
          drillThroughQuestionHeight?: Height<string | number>;
          drillThroughQuestionProps?: DrillThroughQuestionProps;
          hiddenParameters?: string[];
          initialParameters?: ParameterValues;
          onLoad?: (dashboard: null | MetabaseDashboard) => void;
          onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
          plugins?: MetabasePluginsConfig;
          renderDrillThroughQuestion?: () => ReactNode;
          style?: CSSProperties;
          withCardTitle?: boolean;
          withDownloads?: boolean;
          withTitle?: boolean;
      }
      Index

      Properties

      className? +EditableDashboardProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface EditableDashboardProps

      interface EditableDashboardProps {
          className?: string;
          dashboardId: SdkDashboardId;
          drillThroughQuestionHeight?: Height<string | number>;
          drillThroughQuestionProps?: DrillThroughQuestionProps;
          hiddenParameters?: string[];
          initialParameters?: ParameterValues;
          onLoad?: (dashboard: null | MetabaseDashboard) => void;
          onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
          plugins?: MetabasePluginsConfig;
          renderDrillThroughQuestion?: () => ReactNode;
          style?: CSSProperties;
          withCardTitle?: boolean;
          withDownloads?: boolean;
          withTitle?: boolean;
      }
      Index

      Properties

      className? dashboardId -dataPickerProps? drillThroughQuestionHeight? drillThroughQuestionProps? hiddenParameters? @@ -34,7 +33,6 @@
    • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
    • -
      dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      drillThroughQuestionHeight?: Height<string | number>

      Height of a question component when drilled from the dashboard to a question level.

      drillThroughQuestionProps?: DrillThroughQuestionProps

      Props of a question component when drilled from the dashboard to a question level.

      Type declaration

      Props for the drill-through question

      @@ -46,7 +44,7 @@
    • OptionalisSaveEnabled?: boolean

      Whether to show the save button.

    • OptionalonBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
    • OptionalonSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
    • OptionalonSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    • Optionalplugins?: MetabasePluginsConfig
    • Optionalstyle?: CSSProperties

      A custom style object to be added to the root element.

    • OptionaltargetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    • Optionaltitle?: SdkQuestionTitleProps

      Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

      @@ -77,4 +75,4 @@
    • withCardTitle?: boolean

      Whether the dashboard cards should display a title.

      withDownloads?: boolean

      Whether to hide the download button.

      withTitle?: boolean

      Whether the dashboard should display a title.

      -

      +

      diff --git a/_docs/master/embedding/sdk/api/IconName.html b/_docs/master/embedding/sdk/api/IconName.html index 79e2c3249b..e84f6a6ad2 100644 --- a/_docs/master/embedding/sdk/api/IconName.html +++ b/_docs/master/embedding/sdk/api/IconName.html @@ -9,4 +9,4 @@ layout: docs-api --- -IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Type Alias IconName

      IconName:
          | "string"
          | "number"
          | "function"
          | "model"
          | "table"
          | "question"
          | "collection"
          | "dashboard"
          | "add"
          | "add_column"
          | "add_data"
          | "add_folder"
          | "add_row"
          | "add_to_dash"
          | "ai"
          | "alert"
          | "alert_filled"
          | "alert_confirm"
          | "archive"
          | "area"
          | "attachment"
          | "arrow_up"
          | "arrow_down"
          | "arrow_left"
          | "arrow_left_to_line"
          | "arrow_right"
          | "arrow_split"
          | "audit"
          | "badge"
          | "bar"
          | "bell"
          | "birthday"
          | "bookmark"
          | "bookmark_filled"
          | "bolt"
          | "bolt_filled"
          | "breakout"
          | "bubble"
          | "burger"
          | "calendar"
          | "check"
          | "check_filled"
          | "chevrondown"
          | "chevronleft"
          | "chevronright"
          | "chevronup"
          | "click"
          | "clipboard"
          | "clock"
          | "clone"
          | "close"
          | "cloud"
          | "cloud_filled"
          | "compare"
          | "combine"
          | "connections"
          | "contract"
          | "copy"
          | "curved"
          | "database"
          | "dash"
          | "curve"
          | "document"
          | "download"
          | "dyno"
          | "edit_document"
          | "ellipsis"
          | "embed"
          | "empty"
          | "enter_or_return"
          | "expand"
          | "expand_arrow"
          | "extract"
          | "eye"
          | "eye_crossed_out"
          | "eye_outline"
          | "field"
          | "fields"
          | "filter"
          | "filter_plus"
          | "bug"
          | "format_code"
          | "formula"
          | "funnel"
          | "funnel_outline"
          | "folder"
          | "folder_filled"
          | "gauge"
          | "gear"
          | "gear_settings_filled"
          | "gem"
          | "globe"
          | "grabber"
          | "grid"
          | "group"
          | "google"
          | "google_drive"
          | "google_sheet"
          | "history"
          | "home"
          | "horizontal_bar"
          | "hourglass"
          | "info"
          | "info_filled"
          | "info_outline"
          | "insight"
          | "int"
          | "io"
          | "join_full_outer"
          | "join_inner"
          | "join_left_outer"
          | "join_right_outer"
          | "index"
          | "key"
          | "label"
          | "ldap"
          | "learn"
          | "lightbulb"
          | "link"
          | "line"
          | "lines"
          | "lineandbar"
          | "line_style_dashed"
          | "line_style_dotted"
          | "line_style_solid"
          | "list"
          | "location"
          | "lock"
          | "lock_filled"
          | "mail"
          | "mail_filled"
          | "metabot"
          | "metabot_sad"
          | "metric"
          | "model_with_badge"
          | "moon"
          | "move"
          | "move_card"
          | "new_folder"
          | "notebook"
          | "palette"
          | "pause"
          | "pencil"
          | "pencil_lines"
          | "permissions_limited"
          | "person"
          | "pie"
          | "pin"
          | "pinmap"
          | "pivot_table"
          | "play"
          | "play_outlined"
          | "popover"
          | "popular"
          | "progress"
          | "pulse"
          | "recents"
          | "revert"
          | "sankey"
          | "share"
          | "split"
          | "sql"
          | "subscription"
          | "straight"
          | "stepped"
          | "sort"
          | "sort_arrows"
          | "sum"
          | "sync"
          | "redo"
          | "return"
          | "reference"
          | "refresh"
          | "refresh_downstream"
          | "rocket"
          | "ruler"
          | "schema"
          | "search"
          | "section"
          | "segment"
          | "shield"
          | "sidebar_closed"
          | "sidebar_open"
          | "slack"
          | "slack_colorized"
          | "smartscalar"
          | "snail"
          | "snippet"
          | "sparkles"
          | "star_filled"
          | "star"
          | "stop"
          | "store"
          | "sun"
          | "t-shirt"
          | "tab"
          | "table2"
          | "time_history"
          | "trash"
          | "trash_filled"
          | "triangle_left"
          | "triangle_right"
          | "unarchive"
          | "undo"
          | "unknown"
          | "unpin"
          | "unsubscribe"
          | "upload"
          | "variable"
          | "verified"
          | "official_collection"
          | "verified_filled"
          | "view_archive"
          | "warning"
          | "warning_round_filled"
          | "warning_triangle_filled"
          | "waterfall"
          | "webhook"
          | "10k"
          | "1m"
          | "zoom_in"
          | "zoom_out"
          | "scalar"
          | "cake"
          | "external"
          | "table_spaced"
          | "beaker"
          | "eye_filled"

      +IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Type Alias IconName

      IconName:
          | "string"
          | "number"
          | "function"
          | "model"
          | "table"
          | "question"
          | "collection"
          | "dashboard"
          | "add"
          | "add_column"
          | "add_data"
          | "add_folder"
          | "add_row"
          | "add_to_dash"
          | "ai"
          | "alert"
          | "alert_filled"
          | "alert_confirm"
          | "archive"
          | "area"
          | "attachment"
          | "arrow_up"
          | "arrow_down"
          | "arrow_left"
          | "arrow_left_to_line"
          | "arrow_right"
          | "arrow_split"
          | "audit"
          | "badge"
          | "bar"
          | "bell"
          | "birthday"
          | "bookmark"
          | "bookmark_filled"
          | "bolt"
          | "bolt_filled"
          | "breakout"
          | "bubble"
          | "burger"
          | "calendar"
          | "check"
          | "check_filled"
          | "chevrondown"
          | "chevronleft"
          | "chevronright"
          | "chevronup"
          | "click"
          | "clipboard"
          | "clock"
          | "clone"
          | "close"
          | "cloud"
          | "cloud_filled"
          | "compare"
          | "combine"
          | "connections"
          | "contract"
          | "copy"
          | "curved"
          | "database"
          | "dash"
          | "curve"
          | "document"
          | "download"
          | "dyno"
          | "edit_document"
          | "ellipsis"
          | "embed"
          | "empty"
          | "enter_or_return"
          | "expand"
          | "expand_arrow"
          | "extract"
          | "eye"
          | "eye_crossed_out"
          | "eye_outline"
          | "field"
          | "fields"
          | "filter"
          | "filter_plus"
          | "bug"
          | "format_code"
          | "formula"
          | "funnel"
          | "funnel_outline"
          | "folder"
          | "folder_filled"
          | "gauge"
          | "gear"
          | "gem"
          | "globe"
          | "grabber"
          | "grid"
          | "group"
          | "google"
          | "google_drive"
          | "google_sheet"
          | "history"
          | "home"
          | "horizontal_bar"
          | "hourglass"
          | "info"
          | "info_filled"
          | "info_outline"
          | "insight"
          | "int"
          | "io"
          | "join_full_outer"
          | "join_inner"
          | "join_left_outer"
          | "join_right_outer"
          | "index"
          | "key"
          | "label"
          | "ldap"
          | "learn"
          | "lightbulb"
          | "link"
          | "line"
          | "lines"
          | "lineandbar"
          | "line_style_dashed"
          | "line_style_dotted"
          | "line_style_solid"
          | "list"
          | "location"
          | "lock"
          | "lock_filled"
          | "mail"
          | "mail_filled"
          | "metabot"
          | "metabot_sad"
          | "metric"
          | "model_with_badge"
          | "moon"
          | "move"
          | "move_card"
          | "new_folder"
          | "notebook"
          | "palette"
          | "pause"
          | "pencil"
          | "pencil_lines"
          | "permissions_limited"
          | "person"
          | "pie"
          | "pin"
          | "pinmap"
          | "pivot_table"
          | "play"
          | "play_outlined"
          | "popover"
          | "popular"
          | "progress"
          | "pulse"
          | "recents"
          | "revert"
          | "sankey"
          | "share"
          | "split"
          | "sql"
          | "subscription"
          | "straight"
          | "stepped"
          | "sort"
          | "sort_arrows"
          | "sum"
          | "sync"
          | "redo"
          | "return"
          | "reference"
          | "refresh"
          | "refresh_downstream"
          | "rocket"
          | "ruler"
          | "search"
          | "section"
          | "segment"
          | "shield"
          | "sidebar_closed"
          | "sidebar_open"
          | "slack"
          | "slack_colorized"
          | "smartscalar"
          | "snippet"
          | "sparkles"
          | "star_filled"
          | "star"
          | "stop"
          | "store"
          | "sun"
          | "t-shirt"
          | "tab"
          | "table2"
          | "time_history"
          | "trash"
          | "trash_filled"
          | "triangle_left"
          | "triangle_right"
          | "unarchive"
          | "undo"
          | "unknown"
          | "unpin"
          | "unsubscribe"
          | "upload"
          | "variable"
          | "verified"
          | "official_collection"
          | "verified_filled"
          | "view_archive"
          | "warning"
          | "warning_round_filled"
          | "waterfall"
          | "webhook"
          | "10k"
          | "1m"
          | "zoom_in"
          | "zoom_out"
          | "scalar"
          | "cake"
          | "external"
          | "table_spaced"
          | "beaker"
          | "eye_filled"

      diff --git a/_docs/master/embedding/sdk/api/InteractiveDashboard.html b/_docs/master/embedding/sdk/api/InteractiveDashboard.html index 41e5061096..92561bc263 100644 --- a/_docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -9,8 +9,8 @@ layout: docs-api --- -InteractiveDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Function InteractiveDashboard

      dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      drillThroughQuestionHeight?: Height<string | number>

      Height of a question component when drilled from the dashboard to a question level.

      drillThroughQuestionProps?: DrillThroughQuestionProps

      Props of a question component when drilled from the dashboard to a question level.

      Type declaration

      Props for the drill-through question

      @@ -46,7 +44,7 @@
    • OptionalisSaveEnabled?: boolean

      Whether to show the save button.

    • OptionalonBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
    • OptionalonSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
    • OptionalonSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    • Optionalplugins?: MetabasePluginsConfig
    • Optionalstyle?: CSSProperties

      A custom style object to be added to the root element.

    • OptionaltargetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    • Optionaltitle?: SdkQuestionTitleProps

      Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

      @@ -77,4 +75,4 @@
    • withCardTitle?: boolean

      Whether the dashboard cards should display a title.

      withDownloads?: boolean

      Whether to hide the download button.

      withTitle?: boolean

      Whether the dashboard should display a title.

      -

      +

      diff --git a/_docs/master/embedding/sdk/api/InteractiveQuestion.html b/_docs/master/embedding/sdk/api/InteractiveQuestion.html index dc7989bff8..fc4385cf45 100644 --- a/_docs/master/embedding/sdk/api/InteractiveQuestion.html +++ b/_docs/master/embedding/sdk/api/InteractiveQuestion.html @@ -18,7 +18,7 @@
    • OptionalisSaveEnabled?: boolean

      Whether to show the save button.

    • OptionalonBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
    • OptionalonSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
    • OptionalonSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    • Optionalplugins?: MetabasePluginsConfig
    • questionId: null | SdkQuestionId

      The ID of the question.
      This is either: diff --git a/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html b/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html index ab3d118292..f95a95d61b 100644 --- a/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html +++ b/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html @@ -9,7 +9,7 @@ layout: docs-api --- -InteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface InteractiveQuestionProps

      interface InteractiveQuestionProps {
          children?: ReactNode;
          className?: string;
          entityTypes?: EmbeddingEntityType[];
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          targetCollection?: SdkCollectionId;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
          withResetButton?: boolean;
      }
      Index

      Properties

      children? +InteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface InteractiveQuestionProps

      interface InteractiveQuestionProps {
          children?: ReactNode;
          className?: string;
          entityTypes?: EmbeddingEntityType[];
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          targetCollection?: SdkCollectionId;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
          withResetButton?: boolean;
      }
      Index

      Properties

      isSaveEnabled?: boolean

      Whether to show the save button.

      onBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      onRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
      onSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
      onSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      questionId: null | SdkQuestionId

      The ID of the question.
      This is either: diff --git a/_docs/master/embedding/sdk/api/StaticDashboard.html b/_docs/master/embedding/sdk/api/StaticDashboard.html index 137b9f13ef..b2934e2415 100644 --- a/_docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_docs/master/embedding/sdk/api/StaticDashboard.html @@ -9,8 +9,8 @@ layout: docs-api --- -StaticDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Function StaticDashboard

      dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      drillThroughQuestionHeight?: Height<string | number>

      Height of a question component when drilled from the dashboard to a question level.

      drillThroughQuestionProps?: DrillThroughQuestionProps

      Props of a question component when drilled from the dashboard to a question level.

      Type declaration

      Props for the drill-through question

      @@ -46,7 +44,7 @@
    • OptionalisSaveEnabled?: boolean

      Whether to show the save button.

    • OptionalonBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
    • OptionalonSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
    • OptionalonSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    • Optionalplugins?: MetabasePluginsConfig
    • Optionalstyle?: CSSProperties

      A custom style object to be added to the root element.

    • OptionaltargetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    • Optionaltitle?: SdkQuestionTitleProps

      Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

      @@ -77,4 +75,4 @@
      withCardTitle?: boolean

      Whether the dashboard cards should display a title.

      withDownloads?: boolean

      Whether to hide the download button.

      withTitle?: boolean

      Whether the dashboard should display a title.

      -

      +

      diff --git a/_docs/master/embedding/sdk/api/StaticQuestion.html b/_docs/master/embedding/sdk/api/StaticQuestion.html index 51f2d9ff73..e535dad836 100644 --- a/_docs/master/embedding/sdk/api/StaticQuestion.html +++ b/_docs/master/embedding/sdk/api/StaticQuestion.html @@ -26,5 +26,4 @@
    • Optionalstyle?: CSSProperties

      A custom style object to be added to the root element.

    • Optionalwidth?: Width<string | number>

      A number or string specifying a CSS size value that specifies the width of the component

      -
    • OptionalwithChartTypeSelector?: boolean
    • OptionalwithDownloads?: boolean

      Enables the ability to download results in the interactive question.

      -
    • Returns ReactNode

      +
    • OptionalwithChartTypeSelector?: boolean
    • Returns ReactNode

      diff --git a/_docs/master/embedding/sdk/api/StaticQuestionProps.html b/_docs/master/embedding/sdk/api/StaticQuestionProps.html index 0ddc7ab72b..0cf406ab49 100644 --- a/_docs/master/embedding/sdk/api/StaticQuestionProps.html +++ b/_docs/master/embedding/sdk/api/StaticQuestionProps.html @@ -9,14 +9,13 @@ layout: docs-api --- -StaticQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface StaticQuestionProps

      interface StaticQuestionProps {
          className?: string;
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
      }
      Index

      Properties

      className? +StaticQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface StaticQuestionProps

      interface StaticQuestionProps {
          className?: string;
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
      }
      Index

      Properties

      className?: string

      A custom class name to be added to the root element.

      height?: Height<string | number>

      A number or string specifying a CSS size value that specifies the height of the component

      initialSqlParameters?: SqlParameterValues

      Initial values for the SQL parameters.

      @@ -33,5 +32,4 @@

      A custom style object to be added to the root element.

      width?: Width<string | number>

      A number or string specifying a CSS size value that specifies the width of the component

      -
      withChartTypeSelector?: boolean
      withDownloads?: boolean

      Enables the ability to download results in the interactive question.

      -

      +
      withChartTypeSelector?: boolean

      diff --git a/_docs/master/embedding/sdk/api/assets/search.js b/_docs/master/embedding/sdk/api/assets/search.js index a91212dd5e..5649aeca11 100644 --- a/_docs/master/embedding/sdk/api/assets/search.js +++ b/_docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md index c3205ce9c4..d03dbf391e 100644 --- a/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md @@ -23,7 +23,7 @@ layout: new-docs | `isSaveEnabled?` | `boolean` | Whether to show the save button. | | `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | | `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `onSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | | `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | | `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | The ID of the question.
      This is either:
      - The numerical ID when accessing a question link, e.g., `http://localhost:3000/question/1-my-question` where the ID is `1`
      - The `entity_id` key of the question object. You can find a question's Entity ID in the info panel when viewing a question
      - `new` to show the notebook editor for creating new questions. `isSaveEnabled` must be `true` to allow saving the question | | `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | diff --git a/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md index a5ea63f17b..8f7635b747 100644 --- a/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md @@ -22,7 +22,7 @@ layout: new-docs | `isSaveEnabled?` | `boolean` | Whether to show the save button. | | `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | | `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `onSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | | `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | | `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | | `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | diff --git a/_docs/master/embedding/sdk/api/snippets/DrillThroughQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/DrillThroughQuestionProps.md index 722e953a73..477f88f90c 100644 --- a/_docs/master/embedding/sdk/api/snippets/DrillThroughQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/DrillThroughQuestionProps.md @@ -27,7 +27,7 @@ Props for the drill-through question | `isSaveEnabled?` | `boolean` | Whether to show the save button. | | `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | | `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `onSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | | `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | | `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | | `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | diff --git a/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md b/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md index ac04f5dd59..fc427dcb2a 100644 --- a/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md @@ -10,7 +10,27 @@ layout: new-docs --- ```ts -function EditableDashboard(props: EditableDashboardProps): Element; +function EditableDashboard( + props: { + drillThroughQuestionHeight?: Height; + drillThroughQuestionProps?: DrillThroughQuestionProps; + plugins?: MetabasePluginsConfig; + renderDrillThroughQuestion?: () => ReactNode; + } & { + dashboardId: SdkDashboardId; + hiddenParameters?: string[]; + initialParameters?: ParameterValues; + withCardTitle?: boolean; + withDownloads?: boolean; + withTitle?: boolean; + } & { + className?: string; + style?: CSSProperties; + } & { + onLoad?: (dashboard: null | MetabaseDashboard) => void; + onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void; + } & {}, +): Element; ``` A dashboard component with the features available in the `InteractiveDashboard` component, as well as the ability to add and update questions, layout, and content within your dashboard. @@ -19,9 +39,9 @@ A dashboard component with the features available in the `InteractiveDashboard` -| Parameter | Type | Description | -| :-------- | :---------------------------------------------------------- | :---------- | -| `props` | [`EditableDashboardProps`](./api/EditableDashboardProps) | | +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ \} | | diff --git a/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md index 69186d18d2..70fad729f1 100644 --- a/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md @@ -15,22 +15,21 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/IconName.md b/_docs/master/embedding/sdk/api/snippets/IconName.md index b39c97dd64..e645ecf4c6 100644 --- a/_docs/master/embedding/sdk/api/snippets/IconName.md +++ b/_docs/master/embedding/sdk/api/snippets/IconName.md @@ -100,7 +100,6 @@ type IconName = | "folder_filled" | "gauge" | "gear" - | "gear_settings_filled" | "gem" | "globe" | "grabber" @@ -187,7 +186,6 @@ type IconName = | "refresh_downstream" | "rocket" | "ruler" - | "schema" | "search" | "section" | "segment" @@ -197,7 +195,6 @@ type IconName = | "slack" | "slack_colorized" | "smartscalar" - | "snail" | "snippet" | "sparkles" | "star_filled" @@ -226,7 +223,6 @@ type IconName = | "view_archive" | "warning" | "warning_round_filled" - | "warning_triangle_filled" | "waterfall" | "webhook" | "10k" diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md index 3f026cc008..80ee8b4c82 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md @@ -29,8 +29,6 @@ function InteractiveDashboard( } & { onLoad?: (dashboard: null | MetabaseDashboard) => void; onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void; - } & { - dataPickerProps?: Pick; } & {}, ): Element; ``` @@ -41,9 +39,9 @@ A dashboard component with drill downs, click behaviors, and the ability to view -| Parameter | Type | Description | -| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\>; \} & \{ \} | | +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ \} | | diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md index f479613fcb..5b34cbca34 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md @@ -15,22 +15,21 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md index 58e17b122f..3c2c95efc9 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md @@ -25,7 +25,7 @@ layout: new-docs | `isSaveEnabled?` | `boolean` | Whether to show the save button. | | `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | | `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `onSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | | `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | | `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | The ID of the question.
      This is either:
      - The numerical ID when accessing a question link, e.g., `http://localhost:3000/question/1-my-question` where the ID is `1`
      - The `entity_id` key of the question object. You can find a question's Entity ID in the info panel when viewing a question
      - `new` to show the notebook editor for creating new questions. `isSaveEnabled` must be `true` to allow saving the question | | `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md index 3136fb39f0..69822c2f65 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md @@ -29,8 +29,6 @@ function StaticDashboard( } & { onLoad?: (dashboard: null | MetabaseDashboard) => void; onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void; - } & { - dataPickerProps?: Pick; } & {}, ): Element; ``` @@ -41,9 +39,9 @@ A lightweight dashboard component. -| Parameter | Type | Description | -| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\>; \} & \{ \} | | +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ \} | | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md index 048fcb36ab..973d587f57 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md @@ -15,22 +15,21 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md index b652cbc226..6ddcd0fcd0 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md @@ -24,6 +24,5 @@ layout: new-docs | `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | | `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | | `withChartTypeSelector?` | `boolean` | - | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | diff --git a/_docs/master/embedding/securing-embeds.md b/_docs/master/embedding/securing-embeds.md deleted file mode 100644 index 2345fcd5cf..0000000000 --- a/_docs/master/embedding/securing-embeds.md +++ /dev/null @@ -1,263 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: 'Securing embedded Metabase' -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/securing-embeds.md' -layout: new-docs -summary: 'How to hide and protect sensitive data in different types of embeds.' ---- - -# Securing embedded Metabase - -{% include shared/in-page-promo.html %} - -## Securing embeds with authentication and authorization - -There are two basic ways to secure stuff on the internet: - -1. **Authentication** looks at _who_ someone is (using standards such as [JWT](../people-and-groups/authenticating-with-jwt) or [SAML](../people-and-groups/authenticating-with-saml)). -2. **Authorization** looks at _what_ someone has access to (using standards such as OAuth 2.0). - -In this guide, we'll talk primarily about authentication. - -## Public embedding - -[Public embedding](public-links#public-embeds) doesn't involve any authentication or authorization. A public embed displays a public link with a unique string at the end, like this: - -```plaintext -http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b -``` - -The string (in this example: `184f819c-2c80-4b2d-80f8-26bffaae5d8b`) uniquely identifies your Metabase question or dashboard. Since public embeds don't do any authentication or authorization, anyone with the URL can view the data. - -### Example: filters in public links don't secure data - -So, how could someone exploit a public embed? Say we have a dashboard that displays Accounts data: - -| Account ID | Plan | Status | -| ---------- | ------- | -------- | -| 1 | Basic | Active | -| 2 | Basic | Active | -| 3 | Basic | Inactive | -| 4 | Premium | Inactive | -| 5 | Premium | Active | - -We want to add a "Status = Active" filter and display the dashboard's public link in an embed: - -| Account ID | Plan | Status | -| ---------- | ------- | ------ | -| 1 | Basic | Active | -| 2 | Basic | Active | -| 5 | Premium | Active | - -To apply and hide the "Status = Active" filter, we'll add [query parameters](public-links#public-embed-parameters) to the end of the public link in our embed: - -```plaintext -http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b?status=active#hide_parameters=status -``` - -Even though we've hidden the filter from the embed, someone could take the public link used in the embed, and remove the query parameter `?status=active`: - -```plaintext -http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b -``` - -Loading the public link without the query parameter would remove the "Status = Active" filter from the data. The person would get access to the original Accounts data, including the rows with inactive accounts. - -## Static embeds are authorized with JWT - -Static embedding uses a [JWT authorization flow](#static-embedding-with-jwt-authorization) to do two things: - -- Sign resources (e.g., the URLs of charts or dashboards) to ensure that only your embedding application can ask for data from your Metabase. -- Sign parameters (e.g., dashboard filters) to prevent people from [changing the filters](#example-filters-in-public-links-dont-secure-data) and getting access to other data. - -### Static embeds don't have user sessions - -Static embeds don't authenticate people's identities on the Metabase side, so people can view a static embed without creating a Metabase account. However, without a Metabase account, Metabase won't have a way to remember a user or their session, which means: - -- Metabase [permissions](../permissions/introduction) and [data sandboxes](../permissions/data-sandboxes) won't work --- if you need to lock down sensitive data, you must set up [locked parameters](#example-securing-data-with-locked-parameters-on-a-static-embed) for _each_ of your static embeds. -- Any filter selections in a static embed will reset once the signed JWT expires. -- All Static embed usage will show up in [usage analytics](../usage-and-performance-tools/usage-analytics) under "External user". - -## Static embedding security vs. interactive embedding security - -Static embedding only guarantees authorized access to your Metabase data (you decide _what_ is accessible). - -If you want to secure your static embeds based on someone's identity (you decide _who_ gets access to _what_), you'll need to set up your own authentication flow and manually wire that up to [locked parameters](#example-sending-user-attributes-to-a-locked-parameter) on each of your static embeds. Note that locked parameters are essentially filters, so you can only set up **row-level** restrictions in a static embed. - -If you want an easier way to embed different views of data for different customers (without allowing the customers to see each other’s data), learn how [Interactive embedding authenticates and authorizes people in one flow](#interactive-embedding-authenticates-and-authorizes-people-in-one-flow). - -### Static embedding with JWT authorization - -![Static embedding with JWT authorization.](./images/signed-embedding-jwt.png) - -This diagram illustrates how an embed gets secured by a signed JWT: - -1. **Visitor arrives**: your frontend gets a request to display a Metabase [embedding URL](./static-embedding#adding-the-embedding-url-to-your-website). -2. **Signed request**: your backend generates a Metabase embedding URL with a [signed JWT](./static-embedding#how-static-embedding-works). The signed JWT should encode any query [parameters](./static-embedding-parameters) you're using to filter your data. -3. **Response**: your Metabase backend returns data based on the query parameters encoded in the signed JWT. -4. **Success**: your frontend displays the embedded Metabase page with the correct data. - -### Example: securing data with locked parameters on a static embed - -In the [public embedding example](#example-filters-in-public-links-dont-secure-data), we showed you (perhaps unwisely) how someone could exploit a unique public link by editing its query parameters. - -Let's go back to our Accounts example: - -| Account ID | Plan | Status | -| ---------- | ------- | -------- | -| 1 | Basic | Active | -| 2 | Basic | Active | -| 3 | Basic | Inactive | -| 4 | Premium | Inactive | -| 5 | Premium | Active | - -Remember, we can filter the data in a public embed by including a query parameter at the end of the embedding URL: - -```plaintext -http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b?status=active -``` - -| Account ID | Plan | Status | -| ---------- | ------- | ------ | -| 1 | Basic | Active | -| 2 | Basic | Active | -| 5 | Premium | Active | - -With static embeds, we can "lock" the filter by encoding the query parameter in a signed JWT. For example, say we set up the "Status = Active" filter as a [locked parameter](./static-embedding-parameters). The `?status=active` query parameter will be encoded in the signed JWT, so it won't be visible or editable from the static embedding URL: - -```plaintext -http://my-metabase.com/dashboard/your_signed_jwt -``` - -If someone tries to add an (unsigned) query parameter to the end of the static embedding URL like this: - -```plaintext -http://my-metabase.com/dashboard/your_signed_jwt?status=inactive -``` - -Metabase will reject this unauthorized request for data, so the inactive account rows will remain hidden from the embed. - -### Example: sending user attributes to a locked parameter - -Let's say that we want to expose the Accounts table to our customers, so that customers can look up a row based on an Account ID. - -| Account ID | Plan | Status | -| ---------- | ------- | -------- | -| 1 | Basic | Active | -| 2 | Basic | Active | -| 3 | Basic | Inactive | -| 4 | Premium | Inactive | -| 5 | Premium | Active | - -If we want to avoid creating a Metabase login for each of our customers, we'll need: - -- An [embeddable dashboard](./static-embedding#making-a-question-or-dashboard-embeddable) with the Accounts data. -- A [locked parameter](./static-embedding-parameters) for the Account ID filter. -- A login flow in our embedding application (the web app where we want to embed Metabase). - -The flow might look something like this: - -1. A customer logs into our web app. -2. Our app backend looks up the customer's `account_id` based on the account email used during login. -3. Our app backend uses Metabase's [secret key](./static-embedding#regenerating-the-static-embedding-secret-key) to [generate the embedding URL](./static-embedding#how-static-embedding-works) with a signed JWT. The signed JWT encodes the query parameters to filter the Accounts dashboard on `Account ID = account_id`. -4. Metabase returns the filtered dashboard at the static embedding URL. -5. Our app frontend displays the filtered dashboard in an iframe. - -For code samples, see the [static embedding reference app](https://github.com/metabase/embedding-reference-apps). - -## Interactive embedding authenticates and authorizes people in one flow - -Interactive embedding integrates with SSO ([JWT](/docs/latest/people-and-groups/authenticating-with-jwt) or [SAML](/docs/latest/people-and-groups/authenticating-with-saml)) to authenticate and authorize people in one flow. The auth integration makes it easy to map user attributes (such as a person's role or department) to granular levels of data access, including: - -- [Tables](../permissions/data) -- [Rows](../permissions/data-sandboxes#creating-a-basic-sandbox) -- [Columns](../permissions/data-sandboxes#creating-a-custom-sandbox) -- [Other data permissions](../permissions/data), such as data download permissions or SQL access. - -### Interactive embedding with SSO - -![Interactive embedding with SSO.](./images/full-app-embedding-sso.png) - -This diagram shows you how a interactive embed gets secured with [SSO](../people-and-groups/start#sso-for-metabase-pro-and-enterprise-plans): - -1. **Visitor arrives**: your frontend gets a request to display all content, including a Metabase component (such as a React component). -2. **Load embed**: your frontend component loads the Metabase frontend using your [embedding URL](./interactive-embedding#pointing-an-iframe-to-a-metabase-url). -3. **Check session**: to display data at the embedding URL, your Metabase backend checks for a valid session (a logged-in visitor). -4. **If there's no valid session**: - - **Redirect to SSO**: your Metabase frontend redirects the visitor to your SSO login page. - - **SSO auth**: your SSO flow authenticates the visitor and generates a session based on their identity. The session info should encode user attributes such as group membership and [data sandboxing](../permissions/data-sandboxes) permissions. - - **Redirect to Metabase**: your SSO flow redirects the visitor to your Metabase frontend with the session info. -5. **Request**: your Metabase frontend sends the request for data to the Metabase backend, along with the session info. -6. **Response**: your Metabase backend returns data based on the user attributes encoded in the session info. -7. **Success**: your frontend component displays the embedded Metabase page with the correct data for the logged-in visitor. - -The mechanics of step 4 will vary a bit depending on whether you use [JWT](../people-and-groups/authenticating-with-jwt) or [SAML](../people-and-groups/authenticating-with-saml) for SSO. - -### Example: securing data with SSO and data sandboxing - -In our static embedding example, we used [locked parameters](#example-securing-data-with-locked-parameters-on-a-static-embed) to display secure filtered views of the Accounts table. - -The nice thing about interactive embedding and [SSO](../people-and-groups/start#sso-for-metabase-pro-and-enterprise-plans) integration is that we don't have to manually manage locked parameters for each embed. Instead, we can map user attributes from our identity provider (IdP) to [permissions](../permissions/introduction) and [data sandboxes](../permissions/data-sandboxes) in Metabase. People can get authenticated and authorized to self-serve specific subsets of data from their very first login. - -Let's expand on our Accounts example to include a Tenant ID. The Tenant ID represents the parent org for a group of customers: - -| Tenant ID | Account ID | Plan | Status | -| --------- | ---------- | ------- | -------- | -| 999 | 1 | Basic | Active | -| 999 | 2 | Basic | Active | -| 999 | 3 | Basic | Inactive | -| 777 | 4 | Premium | Inactive | -| 777 | 5 | Premium | Active | - -We still want to expose the Accounts table to our customers, but with a few extra requirements: - -- Individual customers can only view the data for their own Account ID. -- Tenants can view all of their child accounts (but not the data of other tenants). - -To set up these multi-tenant permissions, we'll need to: - -1. Create an `primary_id` attribute in our IdP to uniquely identify all tenants and customers. -2. Create a user attribute in our IdP called `role` and set that to `tenant` or `customer` for each person who will be using Metabase. -3. Create two groups in Metabase: Tenants and Customers. -4. Synchronize group membership between Metabase and our IdP so that: - - People with `role=tenant` are assigned to the Tenant group. - - People with `role=customer` are assigned to the Customers group. -5. Set up a sandboxed view of the Accounts table for each group: - - For the Customers group, the Accounts table will be sandboxed (filtered) to `Account ID = primary_id`. - - For the Tenants group,, the Accounts table will be sandboxed to `Tenant ID = primary_id`. - -When Tenant A logs in with SSO for the first time: - -- Metabase will create an account for them. -- Our IdP will send the `role=tenant` and `primary_id=999` attributes to Metabase. -- Metabase will automatically assign Tenant A to the Tenant group. -- Tenant A will get the Tenant group's permissions (including data sandboxes). -- Tenant A will see a sandboxed view of the Accounts table everywhere in Metabase: - -| Tenant ID | Account ID | Plan | Status | -| --------- | ---------- | ----- | -------- | -| 999 | 1 | Basic | Active | -| 999 | 2 | Basic | Active | -| 999 | 3 | Basic | Inactive | - -When Customer 1 logs in, they'll see a different filtered version of the Accounts table based on their `role` and `primary_id` attributes: - -| Tenant ID | Account ID | Plan | Status | -| --------- | ---------- | ----- | ------ | -| A | 1 | Basic | Active | - -## Sample apps - -- [Interactive embedding demo](https://embedding-demo.metabase.com/) -- [Interactive embedding reference app](https://github.com/metabase/sso-examples/tree/master/app-embed-example) -- [Static embedding reference app](https://github.com/metabase/embedding-reference-apps) - -## Further reading - -- [Configuring permissions for different customer schemas](../permissions/embedding) -- [Why interactive embedding?](/blog/why-full-app-embedding) -- [The five stages of embedding grief](/learn/grow-your-data-skills/analytics/embedding-mistakes) diff --git a/_docs/master/embedding/start.md b/_docs/master/embedding/start.md index a83528b80f..691f693135 100644 --- a/_docs/master/embedding/start.md +++ b/_docs/master/embedding/start.md @@ -48,7 +48,3 @@ You can pass parameters between Metabase and your website via the embedding URL ## [Public embeds](./public-links) Admins can also create unsecured public links or embeds of questions and dashboards. - -## [Securing embedded Metabase](./securing-embeds) - -How to make sure the right people can see the right data in your embedded Metabase. diff --git a/_docs/master/exploration-and-organization/images/DataReference.png b/_docs/master/exploration-and-organization/images/DataReference.png index 1b91e84ebc..9912bd8273 100644 Binary files a/_docs/master/exploration-and-organization/images/DataReference.png and b/_docs/master/exploration-and-organization/images/DataReference.png differ diff --git a/_docs/master/exploration-and-organization/images/append-data.png b/_docs/master/exploration-and-organization/images/append-data.png index a57f583ca0..df5046c6be 100644 Binary files a/_docs/master/exploration-and-organization/images/append-data.png and b/_docs/master/exploration-and-organization/images/append-data.png differ diff --git a/_docs/master/exploration-and-organization/images/automatic-insights.png b/_docs/master/exploration-and-organization/images/automatic-insights.png index 16eef54311..24cb911caa 100644 Binary files a/_docs/master/exploration-and-organization/images/automatic-insights.png and b/_docs/master/exploration-and-organization/images/automatic-insights.png differ diff --git a/_docs/master/exploration-and-organization/images/browse-data-x-ray.png b/_docs/master/exploration-and-organization/images/browse-data-x-ray.png index f6add99b5c..c1c8a8380c 100644 Binary files a/_docs/master/exploration-and-organization/images/browse-data-x-ray.png and b/_docs/master/exploration-and-organization/images/browse-data-x-ray.png differ diff --git a/_docs/master/exploration-and-organization/images/browse-data.png b/_docs/master/exploration-and-organization/images/browse-data.png index 9429442b26..47b9e402e1 100644 Binary files a/_docs/master/exploration-and-organization/images/browse-data.png and b/_docs/master/exploration-and-organization/images/browse-data.png differ diff --git a/_docs/master/exploration-and-organization/images/collection-detail.png b/_docs/master/exploration-and-organization/images/collection-detail.png index 33dc20db46..f54c9f8443 100644 Binary files a/_docs/master/exploration-and-organization/images/collection-detail.png and b/_docs/master/exploration-and-organization/images/collection-detail.png differ diff --git a/_docs/master/exploration-and-organization/images/comparison-operator-filters.png b/_docs/master/exploration-and-organization/images/comparison-operator-filters.png index 94f35c9468..e43d51fe32 100644 Binary files a/_docs/master/exploration-and-organization/images/comparison-operator-filters.png and b/_docs/master/exploration-and-organization/images/comparison-operator-filters.png differ diff --git a/_docs/master/exploration-and-organization/images/create-new-collection.png b/_docs/master/exploration-and-organization/images/create-new-collection.png index d7223ffd0e..af2443f1ce 100644 Binary files a/_docs/master/exploration-and-organization/images/create-new-collection.png and b/_docs/master/exploration-and-organization/images/create-new-collection.png differ diff --git a/_docs/master/exploration-and-organization/images/data-reference.png b/_docs/master/exploration-and-organization/images/data-reference.png index b025c62fbc..cfca7fa3b5 100644 Binary files a/_docs/master/exploration-and-organization/images/data-reference.png and b/_docs/master/exploration-and-organization/images/data-reference.png differ diff --git a/_docs/master/exploration-and-organization/images/detail-view.png b/_docs/master/exploration-and-organization/images/detail-view.png index 4887db0e22..2f5ed3f848 100644 Binary files a/_docs/master/exploration-and-organization/images/detail-view.png and b/_docs/master/exploration-and-organization/images/detail-view.png differ diff --git a/_docs/master/exploration-and-organization/images/edit-an-event.png b/_docs/master/exploration-and-organization/images/edit-an-event.png index 0e42a835c2..5ba8358f3f 100644 Binary files a/_docs/master/exploration-and-organization/images/edit-an-event.png and b/_docs/master/exploration-and-organization/images/edit-an-event.png differ diff --git a/_docs/master/exploration-and-organization/images/event-calendar.png b/_docs/master/exploration-and-organization/images/event-calendar.png index 22ed9b09ad..00659553c1 100644 Binary files a/_docs/master/exploration-and-organization/images/event-calendar.png and b/_docs/master/exploration-and-organization/images/event-calendar.png differ diff --git a/_docs/master/exploration-and-organization/images/event-on-a-time-series.png b/_docs/master/exploration-and-organization/images/event-on-a-time-series.png index 66168ce82a..ba472e3243 100644 Binary files a/_docs/master/exploration-and-organization/images/event-on-a-time-series.png and b/_docs/master/exploration-and-organization/images/event-on-a-time-series.png differ diff --git a/_docs/master/exploration-and-organization/images/example-event.png b/_docs/master/exploration-and-organization/images/example-event.png index 273aba7f06..440199cd8f 100644 Binary files a/_docs/master/exploration-and-organization/images/example-event.png and b/_docs/master/exploration-and-organization/images/example-event.png differ diff --git a/_docs/master/exploration-and-organization/images/move-to-trash.png b/_docs/master/exploration-and-organization/images/move-to-trash.png index 6c83f60030..71f39c2671 100644 Binary files a/_docs/master/exploration-and-organization/images/move-to-trash.png and b/_docs/master/exploration-and-organization/images/move-to-trash.png differ diff --git a/_docs/master/exploration-and-organization/images/official-collection.png b/_docs/master/exploration-and-organization/images/official-collection.png index 35c1c504bb..7be67e86d2 100644 Binary files a/_docs/master/exploration-and-organization/images/official-collection.png and b/_docs/master/exploration-and-organization/images/official-collection.png differ diff --git a/_docs/master/exploration-and-organization/images/our-analytics-page.png b/_docs/master/exploration-and-organization/images/our-analytics-page.png index 37fd6c1fb2..2be512d7e9 100644 Binary files a/_docs/master/exploration-and-organization/images/our-analytics-page.png and b/_docs/master/exploration-and-organization/images/our-analytics-page.png differ diff --git a/_docs/master/exploration-and-organization/images/pinned-items.png b/_docs/master/exploration-and-organization/images/pinned-items.png index 3282925a59..cb03f09dea 100644 Binary files a/_docs/master/exploration-and-organization/images/pinned-items.png and b/_docs/master/exploration-and-organization/images/pinned-items.png differ diff --git a/_docs/master/exploration-and-organization/images/pinned-show-viz.png b/_docs/master/exploration-and-organization/images/pinned-show-viz.png index 6c58b5e734..e6e06dfd63 100644 Binary files a/_docs/master/exploration-and-organization/images/pinned-show-viz.png and b/_docs/master/exploration-and-organization/images/pinned-show-viz.png differ diff --git a/_docs/master/exploration-and-organization/images/question-checkbox.png b/_docs/master/exploration-and-organization/images/question-checkbox.png index 4887db0e22..ad9371b3ab 100644 Binary files a/_docs/master/exploration-and-organization/images/question-checkbox.png and b/_docs/master/exploration-and-organization/images/question-checkbox.png differ diff --git a/_docs/master/exploration-and-organization/images/search-results.png b/_docs/master/exploration-and-organization/images/search-results.png index 177b5b507a..b2efa426d2 100644 Binary files a/_docs/master/exploration-and-organization/images/search-results.png and b/_docs/master/exploration-and-organization/images/search-results.png differ diff --git a/_docs/master/exploration-and-organization/images/timeline-sidebar.png b/_docs/master/exploration-and-organization/images/timeline-sidebar.png index a9f4e9456f..cb96cd016d 100644 Binary files a/_docs/master/exploration-and-organization/images/timeline-sidebar.png and b/_docs/master/exploration-and-organization/images/timeline-sidebar.png differ diff --git a/_docs/master/exploration-and-organization/images/trash.png b/_docs/master/exploration-and-organization/images/trash.png index ae49655505..ceb7fce5c9 100644 Binary files a/_docs/master/exploration-and-organization/images/trash.png and b/_docs/master/exploration-and-organization/images/trash.png differ diff --git a/_docs/master/exploration-and-organization/images/verified-icon.png b/_docs/master/exploration-and-organization/images/verified-icon.png index 4fcbddf7a4..1b6ccf96fc 100644 Binary files a/_docs/master/exploration-and-organization/images/verified-icon.png and b/_docs/master/exploration-and-organization/images/verified-icon.png differ diff --git a/_docs/master/exploration-and-organization/images/verified-only.png b/_docs/master/exploration-and-organization/images/verified-only.png index 3116965e55..d07d696f8c 100644 Binary files a/_docs/master/exploration-and-organization/images/verified-only.png and b/_docs/master/exploration-and-organization/images/verified-only.png differ diff --git a/_docs/master/exploration-and-organization/images/verify-this-dashboard.png b/_docs/master/exploration-and-organization/images/verify-this-dashboard.png index f24e572c1f..a1887a5df3 100644 Binary files a/_docs/master/exploration-and-organization/images/verify-this-dashboard.png and b/_docs/master/exploration-and-organization/images/verify-this-dashboard.png differ diff --git a/_docs/master/exploration-and-organization/images/x-ray-example.png b/_docs/master/exploration-and-organization/images/x-ray-example.png index d62507ba75..393680d0d7 100644 Binary files a/_docs/master/exploration-and-organization/images/x-ray-example.png and b/_docs/master/exploration-and-organization/images/x-ray-example.png differ diff --git a/_docs/master/images/metabase-product-screenshot.png b/_docs/master/images/metabase-product-screenshot.png index cf9a18f67a..9bcea87e22 100644 Binary files a/_docs/master/images/metabase-product-screenshot.png and b/_docs/master/images/metabase-product-screenshot.png differ diff --git a/_docs/master/installation-and-operation/images/AZDatabase.png b/_docs/master/installation-and-operation/images/AZDatabase.png index 416c717076..b2383ac3f5 100644 Binary files a/_docs/master/installation-and-operation/images/AZDatabase.png and b/_docs/master/installation-and-operation/images/AZDatabase.png differ diff --git a/_docs/master/installation-and-operation/images/AZMarketPlaceVnet.png b/_docs/master/installation-and-operation/images/AZMarketPlaceVnet.png index fc28ffd9ba..9fe107d431 100644 Binary files a/_docs/master/installation-and-operation/images/AZMarketPlaceVnet.png and b/_docs/master/installation-and-operation/images/AZMarketPlaceVnet.png differ diff --git a/_docs/master/installation-and-operation/images/AZMarketplaceWebApp.png b/_docs/master/installation-and-operation/images/AZMarketplaceWebApp.png index 1a768c6dd8..ead574eec5 100644 Binary files a/_docs/master/installation-and-operation/images/AZMarketplaceWebApp.png and b/_docs/master/installation-and-operation/images/AZMarketplaceWebApp.png differ diff --git a/_docs/master/installation-and-operation/images/AZNetworks.png b/_docs/master/installation-and-operation/images/AZNetworks.png index 6aaf102c1e..00b9cc802c 100644 Binary files a/_docs/master/installation-and-operation/images/AZNetworks.png and b/_docs/master/installation-and-operation/images/AZNetworks.png differ diff --git a/_docs/master/installation-and-operation/images/AZPostgreSQLMain.png b/_docs/master/installation-and-operation/images/AZPostgreSQLMain.png index 5dd879ab18..fecc71c273 100644 Binary files a/_docs/master/installation-and-operation/images/AZPostgreSQLMain.png and b/_docs/master/installation-and-operation/images/AZPostgreSQLMain.png differ diff --git a/_docs/master/installation-and-operation/images/AZPrivateLink.png b/_docs/master/installation-and-operation/images/AZPrivateLink.png index c520b55bdd..0bc61a67fa 100644 Binary files a/_docs/master/installation-and-operation/images/AZPrivateLink.png and b/_docs/master/installation-and-operation/images/AZPrivateLink.png differ diff --git a/_docs/master/installation-and-operation/images/AZResource_group_Add.png b/_docs/master/installation-and-operation/images/AZResource_group_Add.png index b8126d293c..eaff1c643b 100644 Binary files a/_docs/master/installation-and-operation/images/AZResource_group_Add.png and b/_docs/master/installation-and-operation/images/AZResource_group_Add.png differ diff --git a/_docs/master/installation-and-operation/images/AZVNETPublicSubnet.png b/_docs/master/installation-and-operation/images/AZVNETPublicSubnet.png index bfea01f4c9..44894a4dd6 100644 Binary files a/_docs/master/installation-and-operation/images/AZVNETPublicSubnet.png and b/_docs/master/installation-and-operation/images/AZVNETPublicSubnet.png differ diff --git a/_docs/master/installation-and-operation/images/AZVNETintegration.png b/_docs/master/installation-and-operation/images/AZVNETintegration.png index f69b404401..6479865c85 100644 Binary files a/_docs/master/installation-and-operation/images/AZVNETintegration.png and b/_docs/master/installation-and-operation/images/AZVNETintegration.png differ diff --git a/_docs/master/installation-and-operation/images/AZVnet.png b/_docs/master/installation-and-operation/images/AZVnet.png index 01a3af1330..6a9e971823 100644 Binary files a/_docs/master/installation-and-operation/images/AZVnet.png and b/_docs/master/installation-and-operation/images/AZVnet.png differ diff --git a/_docs/master/installation-and-operation/images/AddRemoteHost.png b/_docs/master/installation-and-operation/images/AddRemoteHost.png index a3bdb2b9c8..3d03da05e8 100644 Binary files a/_docs/master/installation-and-operation/images/AddRemoteHost.png and b/_docs/master/installation-and-operation/images/AddRemoteHost.png differ diff --git a/_docs/master/installation-and-operation/images/ClickAddJMXHost.png b/_docs/master/installation-and-operation/images/ClickAddJMXHost.png index 9403e7a805..7c27863866 100644 Binary files a/_docs/master/installation-and-operation/images/ClickAddJMXHost.png and b/_docs/master/installation-and-operation/images/ClickAddJMXHost.png differ diff --git a/_docs/master/installation-and-operation/images/EBDatabaseEndpoint.png b/_docs/master/installation-and-operation/images/EBDatabaseEndpoint.png index 87307a9704..231a2313d5 100644 Binary files a/_docs/master/installation-and-operation/images/EBDatabaseEndpoint.png and b/_docs/master/installation-and-operation/images/EBDatabaseEndpoint.png differ diff --git a/_docs/master/installation-and-operation/images/EBTerminateEnvironment.png b/_docs/master/installation-and-operation/images/EBTerminateEnvironment.png index 6a49e9a6dc..5d6655afef 100644 Binary files a/_docs/master/installation-and-operation/images/EBTerminateEnvironment.png and b/_docs/master/installation-and-operation/images/EBTerminateEnvironment.png differ diff --git a/_docs/master/installation-and-operation/images/EnterJMXPort.png b/_docs/master/installation-and-operation/images/EnterJMXPort.png index 6861e85809..7fbf02add2 100644 Binary files a/_docs/master/installation-and-operation/images/EnterJMXPort.png and b/_docs/master/installation-and-operation/images/EnterJMXPort.png differ diff --git a/_docs/master/installation-and-operation/images/HeapDump.png b/_docs/master/installation-and-operation/images/HeapDump.png index d93ee778cb..0fa623ed6f 100644 Binary files a/_docs/master/installation-and-operation/images/HeapDump.png and b/_docs/master/installation-and-operation/images/HeapDump.png differ diff --git a/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png b/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png index d71e3e03d6..f2bee0d072 100644 Binary files a/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png and b/_docs/master/installation-and-operation/images/LocalProcessVisualVM.png differ diff --git a/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png b/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png index 6a49e9a6dc..94faf3ba67 100644 Binary files a/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png and b/_docs/master/installation-and-operation/images/Metabase-AWS-SI.png differ diff --git a/_docs/master/installation-and-operation/images/OpenRemoteInstance.png b/_docs/master/installation-and-operation/images/OpenRemoteInstance.png index fa97c0e30a..a35bccaa8b 100644 Binary files a/_docs/master/installation-and-operation/images/OpenRemoteInstance.png and b/_docs/master/installation-and-operation/images/OpenRemoteInstance.png differ diff --git a/_docs/master/installation-and-operation/images/RDSConnectionData.png b/_docs/master/installation-and-operation/images/RDSConnectionData.png index 8812b4e945..9c94871b3c 100644 Binary files a/_docs/master/installation-and-operation/images/RDSConnectionData.png and b/_docs/master/installation-and-operation/images/RDSConnectionData.png differ diff --git a/_docs/master/installation-and-operation/images/RDSDBIdentifier.png b/_docs/master/installation-and-operation/images/RDSDBIdentifier.png index 410592dd81..bf9886e6fa 100644 Binary files a/_docs/master/installation-and-operation/images/RDSDBIdentifier.png and b/_docs/master/installation-and-operation/images/RDSDBIdentifier.png differ diff --git a/_docs/master/installation-and-operation/images/RDSEditInboundRule.png b/_docs/master/installation-and-operation/images/RDSEditInboundRule.png index 839d8d1fc9..e53f86468b 100644 Binary files a/_docs/master/installation-and-operation/images/RDSEditInboundRule.png and b/_docs/master/installation-and-operation/images/RDSEditInboundRule.png differ diff --git a/_docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png b/_docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png index 9506c91cd2..a4956deaae 100644 Binary files a/_docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png and b/_docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png differ diff --git a/_docs/master/installation-and-operation/images/RDSInboundRule.png b/_docs/master/installation-and-operation/images/RDSInboundRule.png index 2bd6a50036..3b0516c438 100644 Binary files a/_docs/master/installation-and-operation/images/RDSInboundRule.png and b/_docs/master/installation-and-operation/images/RDSInboundRule.png differ diff --git a/_docs/master/installation-and-operation/images/RDSInitialDatabase.png b/_docs/master/installation-and-operation/images/RDSInitialDatabase.png index a8220d0f99..98384786d3 100644 Binary files a/_docs/master/installation-and-operation/images/RDSInitialDatabase.png and b/_docs/master/installation-and-operation/images/RDSInitialDatabase.png differ diff --git a/_docs/master/installation-and-operation/images/RDSInstanceSize.png b/_docs/master/installation-and-operation/images/RDSInstanceSize.png index 40bb7bd491..d924d2355e 100644 Binary files a/_docs/master/installation-and-operation/images/RDSInstanceSize.png and b/_docs/master/installation-and-operation/images/RDSInstanceSize.png differ diff --git a/_docs/master/installation-and-operation/images/RDSMultiAZ.png b/_docs/master/installation-and-operation/images/RDSMultiAZ.png index 2b252dff15..88f5775a90 100644 Binary files a/_docs/master/installation-and-operation/images/RDSMultiAZ.png and b/_docs/master/installation-and-operation/images/RDSMultiAZ.png differ diff --git a/_docs/master/installation-and-operation/images/RDSPostgresSettings.png b/_docs/master/installation-and-operation/images/RDSPostgresSettings.png index c520b55bdd..35b346e1ea 100644 Binary files a/_docs/master/installation-and-operation/images/RDSPostgresSettings.png and b/_docs/master/installation-and-operation/images/RDSPostgresSettings.png differ diff --git a/_docs/master/installation-and-operation/images/RDSSecurityGroupRules.png b/_docs/master/installation-and-operation/images/RDSSecurityGroupRules.png index 976ab6b0df..55ecc7f1d3 100644 Binary files a/_docs/master/installation-and-operation/images/RDSSecurityGroupRules.png and b/_docs/master/installation-and-operation/images/RDSSecurityGroupRules.png differ diff --git a/_docs/master/installation-and-operation/images/RDSSnapshotsMenu.png b/_docs/master/installation-and-operation/images/RDSSnapshotsMenu.png index e50d51b46a..262dc05e21 100644 Binary files a/_docs/master/installation-and-operation/images/RDSSnapshotsMenu.png and b/_docs/master/installation-and-operation/images/RDSSnapshotsMenu.png differ diff --git a/_docs/master/installation-and-operation/images/RDSTakeSnapshot.png b/_docs/master/installation-and-operation/images/RDSTakeSnapshot.png index d16aabea01..03e61b3437 100644 Binary files a/_docs/master/installation-and-operation/images/RDSTakeSnapshot.png and b/_docs/master/installation-and-operation/images/RDSTakeSnapshot.png differ diff --git a/_docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png b/_docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png index 39ecb30b5e..3326f4f576 100644 Binary files a/_docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png and b/_docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png differ diff --git a/_docs/master/installation-and-operation/images/SetRemoteHostName.png b/_docs/master/installation-and-operation/images/SetRemoteHostName.png index bb2af91d51..82b43dacb2 100644 Binary files a/_docs/master/installation-and-operation/images/SetRemoteHostName.png and b/_docs/master/installation-and-operation/images/SetRemoteHostName.png differ diff --git a/_docs/master/installation-and-operation/images/ThreadDump.png b/_docs/master/installation-and-operation/images/ThreadDump.png index fa97c0e30a..f88a97ac63 100644 Binary files a/_docs/master/installation-and-operation/images/ThreadDump.png and b/_docs/master/installation-and-operation/images/ThreadDump.png differ diff --git a/_docs/master/installation-and-operation/images/create-development-instance.png b/_docs/master/installation-and-operation/images/create-development-instance.png index 430b88877a..43fa50c0d5 100644 Binary files a/_docs/master/installation-and-operation/images/create-development-instance.png and b/_docs/master/installation-and-operation/images/create-development-instance.png differ diff --git a/_docs/master/installation-and-operation/images/prometheus.png b/_docs/master/installation-and-operation/images/prometheus.png index 80e7779703..6c511afd25 100644 Binary files a/_docs/master/installation-and-operation/images/prometheus.png and b/_docs/master/installation-and-operation/images/prometheus.png differ diff --git a/_docs/master/installation-and-operation/images/watermark-banner.png b/_docs/master/installation-and-operation/images/watermark-banner.png index 4f5ff39e4d..a73e7e28fe 100644 Binary files a/_docs/master/installation-and-operation/images/watermark-banner.png and b/_docs/master/installation-and-operation/images/watermark-banner.png differ diff --git a/_docs/master/people-and-groups/authenticating-with-saml.md b/_docs/master/people-and-groups/authenticating-with-saml.md index f2f8d06688..55265ec8a8 100644 --- a/_docs/master/people-and-groups/authenticating-with-saml.md +++ b/_docs/master/people-and-groups/authenticating-with-saml.md @@ -205,7 +205,7 @@ To _require_ people to log in with SSO, disable password authentication from **A ## New account notification emails -When people log in to Metabase for the first time via SSO, Metabase will automatically create an account for them, which will trigger an email notification to Metabase administrators. If you don't want these notifications to be sent, go to **Admin settings > Authentication > User provisioning**, and toggle off **"Notify admins of new users provisioned from SSO"** +When people log in to Metabase for the first time via SSO, Metabase will automatically create an account for them, which will trigger an email notification to Metabase administrators. If you don't want these notifications to be sent, you can toggle them off at the bottom of the Authentication page. ## Example code using SAML diff --git a/_docs/master/people-and-groups/images/AdminBar.png b/_docs/master/people-and-groups/images/AdminBar.png index a48ae1a137..6a0c17ee84 100644 Binary files a/_docs/master/people-and-groups/images/AdminBar.png and b/_docs/master/people-and-groups/images/AdminBar.png differ diff --git a/_docs/master/people-and-groups/images/JWT-auth-form.png b/_docs/master/people-and-groups/images/JWT-auth-form.png index ce5b0e7415..8e65862250 100644 Binary files a/_docs/master/people-and-groups/images/JWT-auth-form.png and b/_docs/master/people-and-groups/images/JWT-auth-form.png differ diff --git a/_docs/master/people-and-groups/images/RemoveUser.png b/_docs/master/people-and-groups/images/RemoveUser.png index 98a4a6fc63..c7302051e1 100644 Binary files a/_docs/master/people-and-groups/images/RemoveUser.png and b/_docs/master/people-and-groups/images/RemoveUser.png differ diff --git a/_docs/master/people-and-groups/images/auth0callbackurl.png b/_docs/master/people-and-groups/images/auth0callbackurl.png index dda21e391d..a62b7e5acf 100644 Binary files a/_docs/master/people-and-groups/images/auth0callbackurl.png and b/_docs/master/people-and-groups/images/auth0callbackurl.png differ diff --git a/_docs/master/people-and-groups/images/auth0createapp.png b/_docs/master/people-and-groups/images/auth0createapp.png index 6fbdab7fcf..726242de94 100644 Binary files a/_docs/master/people-and-groups/images/auth0createapp.png and b/_docs/master/people-and-groups/images/auth0createapp.png differ diff --git a/_docs/master/people-and-groups/images/auth0regularapp.png b/_docs/master/people-and-groups/images/auth0regularapp.png index 6fbdab7fcf..2e58ec9012 100644 Binary files a/_docs/master/people-and-groups/images/auth0regularapp.png and b/_docs/master/people-and-groups/images/auth0regularapp.png differ diff --git a/_docs/master/people-and-groups/images/auth0saml2addon.png b/_docs/master/people-and-groups/images/auth0saml2addon.png index 8926f599ba..7a39bc261a 100644 Binary files a/_docs/master/people-and-groups/images/auth0saml2addon.png and b/_docs/master/people-and-groups/images/auth0saml2addon.png differ diff --git a/_docs/master/people-and-groups/images/auth0samlmappings.png b/_docs/master/people-and-groups/images/auth0samlmappings.png index 6fbdab7fcf..2d58332453 100644 Binary files a/_docs/master/people-and-groups/images/auth0samlmappings.png and b/_docs/master/people-and-groups/images/auth0samlmappings.png differ diff --git a/_docs/master/people-and-groups/images/auth0samlusage.png b/_docs/master/people-and-groups/images/auth0samlusage.png index 6fbdab7fcf..c9c995ebae 100644 Binary files a/_docs/master/people-and-groups/images/auth0samlusage.png and b/_docs/master/people-and-groups/images/auth0samlusage.png differ diff --git a/_docs/master/people-and-groups/images/groups.png b/_docs/master/people-and-groups/images/groups.png index 8926f599ba..e3411797a3 100644 Binary files a/_docs/master/people-and-groups/images/groups.png and b/_docs/master/people-and-groups/images/groups.png differ diff --git a/_docs/master/people-and-groups/images/jwt-groups.png b/_docs/master/people-and-groups/images/jwt-groups.png index bc18ea90eb..dc59ab8e83 100644 Binary files a/_docs/master/people-and-groups/images/jwt-groups.png and b/_docs/master/people-and-groups/images/jwt-groups.png differ diff --git a/_docs/master/people-and-groups/images/ldap-attributes.png b/_docs/master/people-and-groups/images/ldap-attributes.png index bb8d2fb2f2..5577c2ee6f 100644 Binary files a/_docs/master/people-and-groups/images/ldap-attributes.png and b/_docs/master/people-and-groups/images/ldap-attributes.png differ diff --git a/_docs/master/people-and-groups/images/ldap-group-mapping.png b/_docs/master/people-and-groups/images/ldap-group-mapping.png index ce5b0e7415..5ff3a7e140 100644 Binary files a/_docs/master/people-and-groups/images/ldap-group-mapping.png and b/_docs/master/people-and-groups/images/ldap-group-mapping.png differ diff --git a/_docs/master/people-and-groups/images/okta-adding-groups.png b/_docs/master/people-and-groups/images/okta-adding-groups.png index 3e0613a2bb..114f5d09b7 100644 Binary files a/_docs/master/people-and-groups/images/okta-adding-groups.png and b/_docs/master/people-and-groups/images/okta-adding-groups.png differ diff --git a/_docs/master/people-and-groups/images/okta-group-attribute.png b/_docs/master/people-and-groups/images/okta-group-attribute.png index a48ae1a137..0b0cc32cbe 100644 Binary files a/_docs/master/people-and-groups/images/okta-group-attribute.png and b/_docs/master/people-and-groups/images/okta-group-attribute.png differ diff --git a/_docs/master/people-and-groups/images/okta-new-attribute-custom.png b/_docs/master/people-and-groups/images/okta-new-attribute-custom.png index cda55015c1..1918b54169 100644 Binary files a/_docs/master/people-and-groups/images/okta-new-attribute-custom.png and b/_docs/master/people-and-groups/images/okta-new-attribute-custom.png differ diff --git a/_docs/master/people-and-groups/images/okta-new-attribute.png b/_docs/master/people-and-groups/images/okta-new-attribute.png index 43fcfb0c67..559fa50f30 100644 Binary files a/_docs/master/people-and-groups/images/okta-new-attribute.png and b/_docs/master/people-and-groups/images/okta-new-attribute.png differ diff --git a/_docs/master/people-and-groups/images/password-disable.png b/_docs/master/people-and-groups/images/password-disable.png index 2fad57899a..b9c3a522bb 100644 Binary files a/_docs/master/people-and-groups/images/password-disable.png and b/_docs/master/people-and-groups/images/password-disable.png differ diff --git a/_docs/master/people-and-groups/images/saml-azure-ad-create.png b/_docs/master/people-and-groups/images/saml-azure-ad-create.png index e8ae330628..425e371a9f 100644 Binary files a/_docs/master/people-and-groups/images/saml-azure-ad-create.png and b/_docs/master/people-and-groups/images/saml-azure-ad-create.png differ diff --git a/_docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png b/_docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png index edba66aced..07f8e0c479 100644 Binary files a/_docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png and b/_docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png differ diff --git a/_docs/master/people-and-groups/images/saml-azure-app-saml.png b/_docs/master/people-and-groups/images/saml-azure-app-saml.png index 77915eb6ea..64f49beb03 100644 Binary files a/_docs/master/people-and-groups/images/saml-azure-app-saml.png and b/_docs/master/people-and-groups/images/saml-azure-app-saml.png differ diff --git a/_docs/master/people-and-groups/images/saml-azure-step-1.png b/_docs/master/people-and-groups/images/saml-azure-step-1.png index e8ae330628..038d09f91b 100644 Binary files a/_docs/master/people-and-groups/images/saml-azure-step-1.png and b/_docs/master/people-and-groups/images/saml-azure-step-1.png differ diff --git a/_docs/master/people-and-groups/images/saml-form.png b/_docs/master/people-and-groups/images/saml-form.png index fc1a68c633..965cfce64a 100644 Binary files a/_docs/master/people-and-groups/images/saml-form.png and b/_docs/master/people-and-groups/images/saml-form.png differ diff --git a/_docs/master/people-and-groups/images/saml-okta-groups.png b/_docs/master/people-and-groups/images/saml-okta-groups.png index 98a4a6fc63..6a7c781eb9 100644 Binary files a/_docs/master/people-and-groups/images/saml-okta-groups.png and b/_docs/master/people-and-groups/images/saml-okta-groups.png differ diff --git a/_docs/master/people-and-groups/images/user-provisioning.png b/_docs/master/people-and-groups/images/user-provisioning.png index 7b32e3fb26..23e5497cbf 100644 Binary files a/_docs/master/people-and-groups/images/user-provisioning.png and b/_docs/master/people-and-groups/images/user-provisioning.png differ diff --git a/_docs/master/people-and-groups/user-provisioning.md b/_docs/master/people-and-groups/user-provisioning.md index 941d0681b8..5ebf487c5f 100644 --- a/_docs/master/people-and-groups/user-provisioning.md +++ b/_docs/master/people-and-groups/user-provisioning.md @@ -64,6 +64,10 @@ Once you've enabled SCIM in Metabase and gotten your SCIM endpoint URL and SCIM With Microsoft Entra ID, Metabase only supports user provisioning (groups aren't created or populated). +## Notify admins of new users provisioned from SSO + +If you're not using SCIM to provision user accounts, you can optionally have Metabase send an email to admins whenever someone signs in to Metabase via SSO for the first time (which creates a Metabase account). This setting doesn't require you to set up SCIM. + ## Further reading - [Authenticating with SAML](./authenticating-with-saml) diff --git a/_docs/master/permissions/data-sandboxes.md b/_docs/master/permissions/data-sandboxes.md index 4623f21fab..e92e15fec8 100644 --- a/_docs/master/permissions/data-sandboxes.md +++ b/_docs/master/permissions/data-sandboxes.md @@ -278,4 +278,4 @@ Metabase can only create a data sandbox using the group membership or user attri - [Data sandbox examples](./data-sandbox-examples) - [Permissions strategies](/learn/metabase-basics/administration/permissions/strategy) - [Configuring permissions for embedding](../permissions/embedding) -- [Securing embedded Metabase](../embedding/securing-embeds) +- [Securing embedded Metabase](/learn/metabase-basics/embedding/securing-embeds) diff --git a/_docs/master/permissions/images/admin-panel-collections.png b/_docs/master/permissions/images/admin-panel-collections.png index cc2c707278..87838610f0 100644 Binary files a/_docs/master/permissions/images/admin-panel-collections.png and b/_docs/master/permissions/images/admin-panel-collections.png differ diff --git a/_docs/master/permissions/images/advanced-example-1-filtering-question.png b/_docs/master/permissions/images/advanced-example-1-filtering-question.png index c95f02b4aa..16789b02bf 100644 Binary files a/_docs/master/permissions/images/advanced-example-1-filtering-question.png and b/_docs/master/permissions/images/advanced-example-1-filtering-question.png differ diff --git a/_docs/master/permissions/images/advanced-example-1-people-table.png b/_docs/master/permissions/images/advanced-example-1-people-table.png index dbdf6faefb..60dfaf9687 100644 Binary files a/_docs/master/permissions/images/advanced-example-1-people-table.png and b/_docs/master/permissions/images/advanced-example-1-people-table.png differ diff --git a/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png b/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png index f0997404d5..efc22e7a78 100644 Binary files a/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png and b/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png differ diff --git a/_docs/master/permissions/images/advanced-example-2-filtering-question.png b/_docs/master/permissions/images/advanced-example-2-filtering-question.png index c9c10c5129..2b239a1d71 100644 Binary files a/_docs/master/permissions/images/advanced-example-2-filtering-question.png and b/_docs/master/permissions/images/advanced-example-2-filtering-question.png differ diff --git a/_docs/master/permissions/images/advanced-example-2-results.png b/_docs/master/permissions/images/advanced-example-2-results.png index cc2c707278..e9a7002168 100644 Binary files a/_docs/master/permissions/images/advanced-example-2-results.png and b/_docs/master/permissions/images/advanced-example-2-results.png differ diff --git a/_docs/master/permissions/images/advanced-example-2-sandboxing-options.png b/_docs/master/permissions/images/advanced-example-2-sandboxing-options.png index b060334122..2982560a18 100644 Binary files a/_docs/master/permissions/images/advanced-example-2-sandboxing-options.png and b/_docs/master/permissions/images/advanced-example-2-sandboxing-options.png differ diff --git a/_docs/master/permissions/images/change-permissions.png b/_docs/master/permissions/images/change-permissions.png index 939953ea03..32979b3f5f 100644 Binary files a/_docs/master/permissions/images/change-permissions.png and b/_docs/master/permissions/images/change-permissions.png differ diff --git a/_docs/master/permissions/images/collection-detail.png b/_docs/master/permissions/images/collection-detail.png index cca944d803..bbcda41a58 100644 Binary files a/_docs/master/permissions/images/collection-detail.png and b/_docs/master/permissions/images/collection-detail.png differ diff --git a/_docs/master/permissions/images/collection-permissions.png b/_docs/master/permissions/images/collection-permissions.png index 9e2878738f..b8b8f2649b 100644 Binary files a/_docs/master/permissions/images/collection-permissions.png and b/_docs/master/permissions/images/collection-permissions.png differ diff --git a/_docs/master/permissions/images/create-new-folder-modal.png b/_docs/master/permissions/images/create-new-folder-modal.png index 5fb459752f..3b90cd19d9 100644 Binary files a/_docs/master/permissions/images/create-new-folder-modal.png and b/_docs/master/permissions/images/create-new-folder-modal.png differ diff --git a/_docs/master/permissions/images/dashboard-no-permissions.png b/_docs/master/permissions/images/dashboard-no-permissions.png index c9c10c5129..26a8b317fe 100644 Binary files a/_docs/master/permissions/images/dashboard-no-permissions.png and b/_docs/master/permissions/images/dashboard-no-permissions.png differ diff --git a/_docs/master/permissions/images/database-routing.png b/_docs/master/permissions/images/database-routing.png index 341c8e191c..cc35192bbe 100644 Binary files a/_docs/master/permissions/images/database-routing.png and b/_docs/master/permissions/images/database-routing.png differ diff --git a/_docs/master/permissions/images/edit-user-details.png b/_docs/master/permissions/images/edit-user-details.png index 1f1a0d0097..b58b554572 100644 Binary files a/_docs/master/permissions/images/edit-user-details.png and b/_docs/master/permissions/images/edit-user-details.png differ diff --git a/_docs/master/permissions/images/enterprise-add-snippet.png b/_docs/master/permissions/images/enterprise-add-snippet.png index c8e0c11c68..77a9c87329 100644 Binary files a/_docs/master/permissions/images/enterprise-add-snippet.png and b/_docs/master/permissions/images/enterprise-add-snippet.png differ diff --git a/_docs/master/permissions/images/grant-sandboxed-access.png b/_docs/master/permissions/images/grant-sandboxed-access.png index f0997404d5..fba6709e60 100644 Binary files a/_docs/master/permissions/images/grant-sandboxed-access.png and b/_docs/master/permissions/images/grant-sandboxed-access.png differ diff --git a/_docs/master/permissions/images/pinned-items.png b/_docs/master/permissions/images/pinned-items.png index 76c2b7c0aa..efd9c4500f 100644 Binary files a/_docs/master/permissions/images/pinned-items.png and b/_docs/master/permissions/images/pinned-items.png differ diff --git a/_docs/master/permissions/images/select-impersonated.png b/_docs/master/permissions/images/select-impersonated.png deleted file mode 100644 index db48b29a27..0000000000 Binary files a/_docs/master/permissions/images/select-impersonated.png and /dev/null differ diff --git a/_docs/master/permissions/images/select-user-attribute.png b/_docs/master/permissions/images/select-user-attribute.png index 5fb459752f..858eebfbae 100644 Binary files a/_docs/master/permissions/images/select-user-attribute.png and b/_docs/master/permissions/images/select-user-attribute.png differ diff --git a/_docs/master/permissions/images/snippet-folder.png b/_docs/master/permissions/images/snippet-folder.png index 00af3c8c29..d8dc63c856 100644 Binary files a/_docs/master/permissions/images/snippet-folder.png and b/_docs/master/permissions/images/snippet-folder.png differ diff --git a/_docs/master/permissions/images/user-attribute-impersonation.png b/_docs/master/permissions/images/user-attribute-impersonation.png deleted file mode 100644 index 24031d7e6c..0000000000 Binary files a/_docs/master/permissions/images/user-attribute-impersonation.png and /dev/null differ diff --git a/_docs/master/permissions/impersonation.md b/_docs/master/permissions/impersonation.md index 034aef9963..911ad9532c 100644 --- a/_docs/master/permissions/impersonation.md +++ b/_docs/master/permissions/impersonation.md @@ -21,126 +21,34 @@ This page covers the [View data](./data#view-data-permissions) permission level **Impersonation access** allows admins to "outsource" View data permissions to roles in your database. Admins can associate user attributes with database-defined roles and their privileges. If someone is in a group with their View data permission set to Impersonation, the person will be able to view and query data based on the privileges granted to the role specified by their user attribute. -## Impersonation vs sandboxing +## Setting up connection impersonation -### Impersonation sets permissions for questions written in both the SQL editor and the query builder - -Impersonation operates at the database level. In a database engine, setting the role before the query runs can alter the results of the query, as the role defines the permissions that your database should use when it executes the statements. - -### Sandboxing only sets permissions for query builder questions - -Sandboxing operates at the Metabase level. Since Metabase can't parse SQL queries to find out what data people are allowed to view, sandboxing only applies to questions composed in the query builder (where Metabase can interpret the queries). - -## Example use case for impersonation - -Let's say we have a People table that includes rows of accounts from all 50 states of the United States. Let's say you want your Vermont sales team to: - -- Be able to ask questions using both the query builder and the native SQL editor. -- Only be able to view customer accounts in the People table who live in Vermont. - -First, you'll set up permissions in your database by creating a role with a policy. Then in Metabase, you'll set data access to that database to Impersonation, so when people run queries on that database, Metabase will use that role to limit what data they can see. - -## Set up connection impersonation +> \*\*For impersonation to work for Redshift databases, the user account Metabase uses to [connect to your Redshift database](../databases/connections/redshift) must be a superuser, as Metabase will need to be able to run the [SET SESSION AUTHORIZATION](https://docs.aws.amazon.com/redshift/latest/dg/r_SET_SESSION_AUTHORIZATION) command, which can only be run by a database superuser. For impersonation access to work, you'll first need to set up roles in your database for Metabase to impersonate, then configure Metabase to impersonate those roles when people view or query data. -### Set up Metabase database connection for impersonation - -Impersonation uses database roles to run queries on your database, but there still needs to be a default role that that will be used to run operations like [sync, scans, and fingerprinting](../databases/sync-scan). So the user account that Metabase uses to [connect to your database](../databases/connecting) should have access to everything in that database that any Metabase group may need access to, as that database user account is what Metabase uses to sync table information. - -You can then create roles in the database that have more restrictive access to the database (like row-level or table-level security). When the role is passed to the database using impersonation, the engine will return a subset of the data, or restrict the query altogether. - -> For **Redshift** databases, the user account Metabase uses to [connect to your Redshift database](../databases/connections/redshift) must be a superuser, as Metabase will need to be able to run the [SET SESSION AUTHORIZATION](https://docs.aws.amazon.com/redshift/latest/dg/r_SET_SESSION_AUTHORIZATION) command, which can only be run by a database superuser. - ### In your database, set up roles -In your database (not in Metabase): - -1. Create a new database role (in Redshift, this would be a new user). -2. Grant that role privileges that you'd like impersonated users to have.. +1. Create a new role (in Redshift, this would be a new user). +2. Grant that role privileges. For exactly how to create a new role in your database and grant that role privileges, you'll need to consult your database's documentation. We also have some docs on [users, roles, and privileges](../databases/users-roles-privileges) that can help you get started. -For example, if you're using PostgreSQL, the SQL below will create a role called `vermont_sales_team` and only allow that role to select rows in the `people` table where the value in the `state` column is `VT` (the abbreviation for Vermont): - -```sql -CREATE ROLE vermont_sales_team; - -GRANT -SELECT ON ALL TABLES IN SCHEMA PUBLIC TO vermont_sales_team; - - -CREATE POLICY vermont ON people -FOR -SELECT TO vermont_sales_team USING (state = 'VT'); - - -ALTER TABLE people ENABLE ROW LEVEL SECURITY; -``` - -### Set up a Metabase group - -Permissions in Metabase, including impersonation, are managed by groups, so you'll need to: - -1. [Create a new group](../people-and-groups/managing#groups) (or select an existing one). -2. [Add people to the group](../people-and-groups/managing#adding-people-to-groups). - -You might want to create a test user and add them to the group to verify later that impersonation is working correctly. +### In your Metabase, set up impersonation and specify a user attribute -### Assign a user attribute to people in the group +1. **Create a [new group](../people-and-groups/managing#groups)**, or select an existing group. -To associate people in the group with a role that you created in your database, you'll use a user attribute. +2. **Assign a [user attribute](../people-and-groups/managing#adding-a-user-attribute) to people in that group.** You'll use this user attribute to associate people in that group with a role that you created in your database. For example, if you created a role named `sales` in your database with access to a subset of tables relevant to the sales team, you would add a user attribute called `db_role` (or whatever you want to call the attribute) and assign the value `sales` to the person's `db_role`. The value of the attribute (`sales` in this case) should match the name of the role in your database. Only some databases enforce case sensitivity, so you might want to make sure the attribute's value and the database's role match exactly. -Assign a [user attribute](../people-and-groups/managing#adding-a-user-attribute) to people in your group: +3. **Apply the impersonation access to that group.**. Hit Cmd/Ctrl + K to bring up the command palette. Search for **Permissions**. Or go to **Admin settings** > **Permissions** > **Data**. -- The **key** of the attribute can be anything. -- The **value** of the attribute must match the desired database role for every person. +4. Select the database you want to set permissions on. -![Setting a user attribute for impersonation](./images/user-attribute-impersonation.png) +5. Find the group that you want to associate with the database role you created. Under **View data** setting for that group, select **Impersonation**. -For example, if you created a role named `vermont_sales_team` in your database with access to a subset of data relevant to the Vermont sales team (like [in the example above](#in-your-database-set-up-roles)), you could add a user attribute called `db_role` (or whatever you want to call the attribute) and assign the value `vermont_sales_team` to the person's `db_role` attribute. +6. From the dropdown, select the user attribute that you added that maps to the role you want the group to use when querying the database. -Some databases enforce case sensitivity, so you might want to make sure the attribute's value and the database's role match exactly. - -People in one group can have different attribute values, but must have the same attribute key. See [People in a group with impersonation access to data do not necessarily share the same privileges](#people-in-a-group-with-impersonation-access-to-data-do-not-necessarily-share-the-same-privileges). - -### Set up impersonation - -1. In Metabase, hit Cmd/Ctrl + K to bring up the command palette and search for **Permissions**, or go directly to **Admin settings** > **Permissions** > **Data**. - -2. Select the group that you want to to associate with the database role you created. - -3. Select the database to configure access to. - -4. Under **View data** setting for that database, select **Impersonation**. This option will only be visible if you already [created a user attribute](#assign-a-user-attribute-to-people-in-the-group). - - ![Select impersonated permissions](./images/select-impersonated.png) - - If your All Users group has more permissive access to this database (for example, "Can view"), you will see a warning, because [Metabase gives people the most permissive access to data across all of their groups](#metabase-gives-people-the-most-permissive-access-to-data-across-all-of-their-groups). You'll need to [block database access for the All Users group](./data#revoke-access-even-though-all-users-has-greater-access) before setting up impersonation. - -5. From the user attribute dropdown, select the user attribute that you added that maps to the role you want the group to use when querying the database. - -6. Save your changes. - -Remember to also set up ["Create queries"](./data#create-queries-permissions) permissions for your group and database. For example, if you'd like people to be able to write SQL while using impersonated database roles, you'll need to set "Create queries" permissions to "Query builder and native". - -### Verify that impersonated permissions are working - -Admins will not be able to verify that impersonation is are working from their own account, so you should create a test user, add them to the group and set up their user attributes. - -To verify that the impersonated permissions are working: - -- If the test user has "Create queries" permissions set to "Create queries and native", create a SQL question and verify that the test user can only see the right data. - -For example, for the `vermont_sales_team` role from the [example above](#in-your-database-set-up-roles), you can run: - -``` -SELECT * FROM people; -``` - -to verify that the test user only sees data from Vermont. - -- If the test user has "Create queries" permissions set to "Query builder only", go to **Browse data** in the left sidebar and verify that the user can only see the tables they have access to, and only the data in those tables that +7. Save your changes. ## People in a group with impersonation access to data do not necessarily share the same privileges @@ -148,11 +56,13 @@ Metabase will use whatever role you specify in the user attribute for each perso ## Use impersonation to set up row-level SQL access -You can use impersonation to give people access to the SQL editor, while restricting their access to data based on a specific database role. And not just table-level access, but row-level access---or however you define access for that role in your database. Effectively, you can use impersonation to set up data sandbox-like access to your data, while letting people use the SQL editor to query that data. The difference is that, _instead of setting up a data sandbox in Metabase, you need to set up that row-level security via the privileges granted to a role in your database._ +You can use impersonation to give people access to the native/SQL editor, while restricting their access to data based on a specific database role. And not just table-level access, but row-level access---or however you define access for that role in your database. Effectively, you can use impersonation to set up data sandbox-like access to your data, while letting people use the SQL editor to query that data. The difference is that, _instead of setting up a data sandbox in Metabase, you need to set up that row-level security via the privileges granted to a role in your database._ If instead you want to give a group SQL access to some, but not all, of the schemas or tables in that database, you can create an additional role in your database that only includes a subset of those tables---or even specific row-level access---and then use Metabase's impersonation feature to associate a user attribute with that role. Essentially what Metabase will do is take the user attribute and pass that attribute as a string into a `SET ROLE` or `USE ROLE` command for the database _before_ Metabase executes the query. -Connection impersonation doesn't apply to people in the Metabase Admins group, as their more permissive privileges take precedence. +Connection impersonation doesn't apply to people in the Metabase admins group, as their more permissive privileges take precedence. + +For more about how to set this up, check out [Use Impersonation to get row-level permissions with both GUI and SQL queries](/learn/metabase-basics/administration/permissions/impersonation). ## Metabase gives people the most permissive access to data across all of their groups @@ -163,10 +73,6 @@ So if a person is in two groups with different permissions for the same database Blue group's more permissive access would override the impersonated access. -## Admins won't see the effects of impersonation - -Admins won't ever see the effects of impersonation effects, because their privileges will override those of any other group they're a member of. - -Metabase's default Administrators group has "Can view" access to all databases, and Metabase uses the most permissive access for any person in multple groups, so any admin will have "Can view" - not "Impersonated" - access to the database. +## Further reading -To test impersonation, create a test user, assign them a user attribute with the database role, and add them to the impersonated group. Then, log in as the test user and verify the data access. +- [Use Impersonation to get row-level permissions with both GUI and SQL queries](/learn/metabase-basics/administration/permissions/impersonation) diff --git a/_docs/master/questions/exporting-results.md b/_docs/master/questions/exporting-results.md index 8098a771ca..dea11b63ef 100644 --- a/_docs/master/questions/exporting-results.md +++ b/_docs/master/questions/exporting-results.md @@ -66,12 +66,9 @@ The reason Metabase doesn't try to export results as a native Excel PivotTable i ## Export limits -### Row limit +You can export (download) up to 1 million rows. -By default, Metabase will export first 1048575 rows of results. - -- For CSV exports, you can increase this limit with an environment variable: [`MB_DOWNLOAD_ROW_LIMIT`](../configuring-metabase/environment-variables). Increasing this limit, however, may impact your Metabase's performance. -- XLSX exports will always be limited to Excel's maximum of 1048575 rows (plus the header row). +You can change this limit with an environment variable: [`MB_DOWNLOAD_ROW_LIMIT`](../configuring-metabase/environment-variables). ### Cell character limit in Excel exports diff --git a/_docs/master/questions/images/02-widget.png b/_docs/master/questions/images/02-widget.png index 4ce9fda455..06d0f6d77a 100644 Binary files a/_docs/master/questions/images/02-widget.png and b/_docs/master/questions/images/02-widget.png differ diff --git a/_docs/master/questions/images/SQL-filter-widget.png b/_docs/master/questions/images/SQL-filter-widget.png index 22f38f2e92..990f193eab 100644 Binary files a/_docs/master/questions/images/SQL-filter-widget.png and b/_docs/master/questions/images/SQL-filter-widget.png differ diff --git a/_docs/master/questions/images/SQLInterface.png b/_docs/master/questions/images/SQLInterface.png index 60137f29af..535d3d4efa 100644 Binary files a/_docs/master/questions/images/SQLInterface.png and b/_docs/master/questions/images/SQLInterface.png differ diff --git a/_docs/master/questions/images/VisualizeChoices.png b/_docs/master/questions/images/VisualizeChoices.png index 5ee3df7705..23a36e94de 100644 Binary files a/_docs/master/questions/images/VisualizeChoices.png and b/_docs/master/questions/images/VisualizeChoices.png differ diff --git a/_docs/master/questions/images/add-column.png b/_docs/master/questions/images/add-column.png index 30af94d04a..e655410081 100644 Binary files a/_docs/master/questions/images/add-column.png and b/_docs/master/questions/images/add-column.png differ diff --git a/_docs/master/questions/images/add-comparison.png b/_docs/master/questions/images/add-comparison.png index 416c5e974f..98f105ce88 100644 Binary files a/_docs/master/questions/images/add-comparison.png and b/_docs/master/questions/images/add-comparison.png differ diff --git a/_docs/master/questions/images/area.png b/_docs/master/questions/images/area.png index 676d7840a3..a4b0b25066 100644 Binary files a/_docs/master/questions/images/area.png and b/_docs/master/questions/images/area.png differ diff --git a/_docs/master/questions/images/auto-format.png b/_docs/master/questions/images/auto-format.png index ee61e20dff..1c70db0327 100644 Binary files a/_docs/master/questions/images/auto-format.png and b/_docs/master/questions/images/auto-format.png differ diff --git a/_docs/master/questions/images/bar.png b/_docs/master/questions/images/bar.png index 9c472d2ff3..c98c0274aa 100644 Binary files a/_docs/master/questions/images/bar.png and b/_docs/master/questions/images/bar.png differ diff --git a/_docs/master/questions/images/bin-by-latlong.png b/_docs/master/questions/images/bin-by-latlong.png index 60cbdafba4..dfb624f134 100644 Binary files a/_docs/master/questions/images/bin-by-latlong.png and b/_docs/master/questions/images/bin-by-latlong.png differ diff --git a/_docs/master/questions/images/build-a-funnel-query.png b/_docs/master/questions/images/build-a-funnel-query.png index 2e6a6b4b28..fcec8e4114 100644 Binary files a/_docs/master/questions/images/build-a-funnel-query.png and b/_docs/master/questions/images/build-a-funnel-query.png differ diff --git a/_docs/master/questions/images/cell-action-string.png b/_docs/master/questions/images/cell-action-string.png index d49c5cc7f5..ac29855b80 100644 Binary files a/_docs/master/questions/images/cell-action-string.png and b/_docs/master/questions/images/cell-action-string.png differ diff --git a/_docs/master/questions/images/chart-formatting-options.png b/_docs/master/questions/images/chart-formatting-options.png index 14d64cca39..d1682c4b2e 100644 Binary files a/_docs/master/questions/images/chart-formatting-options.png and b/_docs/master/questions/images/chart-formatting-options.png differ diff --git a/_docs/master/questions/images/column-actions.png b/_docs/master/questions/images/column-actions.png index 72e8d8ea6e..b09859fa61 100644 Binary files a/_docs/master/questions/images/column-actions.png and b/_docs/master/questions/images/column-actions.png differ diff --git a/_docs/master/questions/images/column-header-formatting.png b/_docs/master/questions/images/column-header-formatting.png index 37196d98ab..0afc8d29ea 100644 Binary files a/_docs/master/questions/images/column-header-formatting.png and b/_docs/master/questions/images/column-header-formatting.png differ diff --git a/_docs/master/questions/images/column-selection.png b/_docs/master/questions/images/column-selection.png index dcbd6a8bdf..93d3a62b0d 100644 Binary files a/_docs/master/questions/images/column-selection.png and b/_docs/master/questions/images/column-selection.png differ diff --git a/_docs/master/questions/images/combo-chart-data-1.png b/_docs/master/questions/images/combo-chart-data-1.png index d3f64cf36d..df223a27d0 100644 Binary files a/_docs/master/questions/images/combo-chart-data-1.png and b/_docs/master/questions/images/combo-chart-data-1.png differ diff --git a/_docs/master/questions/images/combo-chart-data-2.png b/_docs/master/questions/images/combo-chart-data-2.png index acd274fc35..1339e5821c 100644 Binary files a/_docs/master/questions/images/combo-chart-data-2.png and b/_docs/master/questions/images/combo-chart-data-2.png differ diff --git a/_docs/master/questions/images/combo-chart.png b/_docs/master/questions/images/combo-chart.png index 9686dd3426..f3868f1f79 100644 Binary files a/_docs/master/questions/images/combo-chart.png and b/_docs/master/questions/images/combo-chart.png differ diff --git a/_docs/master/questions/images/conditional-formatting.png b/_docs/master/questions/images/conditional-formatting.png index b4b6ef8b05..cda74c9751 100644 Binary files a/_docs/master/questions/images/conditional-formatting.png and b/_docs/master/questions/images/conditional-formatting.png differ diff --git a/_docs/master/questions/images/count-and-average.png b/_docs/master/questions/images/count-and-average.png index 5ebb209705..3764c1c233 100644 Binary files a/_docs/master/questions/images/count-and-average.png and b/_docs/master/questions/images/count-and-average.png differ diff --git a/_docs/master/questions/images/create-snippet.png b/_docs/master/questions/images/create-snippet.png index 672da0a14f..e1d7533d27 100644 Binary files a/_docs/master/questions/images/create-snippet.png and b/_docs/master/questions/images/create-snippet.png differ diff --git a/_docs/master/questions/images/cumulative-date-category.png b/_docs/master/questions/images/cumulative-date-category.png index 91ae89db11..e9b4dcb461 100644 Binary files a/_docs/master/questions/images/cumulative-date-category.png and b/_docs/master/questions/images/cumulative-date-category.png differ diff --git a/_docs/master/questions/images/cumulative-multiple-datetimes.png b/_docs/master/questions/images/cumulative-multiple-datetimes.png index 17463efde4..ca2a963b40 100644 Binary files a/_docs/master/questions/images/cumulative-multiple-datetimes.png and b/_docs/master/questions/images/cumulative-multiple-datetimes.png differ diff --git a/_docs/master/questions/images/cumulative-no-datetime-order.png b/_docs/master/questions/images/cumulative-no-datetime-order.png index 278c63d78d..2165c79683 100644 Binary files a/_docs/master/questions/images/cumulative-no-datetime-order.png and b/_docs/master/questions/images/cumulative-no-datetime-order.png differ diff --git a/_docs/master/questions/images/cumulative-no-datetime.png b/_docs/master/questions/images/cumulative-no-datetime.png index d6bdb55cc1..8453d4d471 100644 Binary files a/_docs/master/questions/images/cumulative-no-datetime.png and b/_docs/master/questions/images/cumulative-no-datetime.png differ diff --git a/_docs/master/questions/images/custom-column.png b/_docs/master/questions/images/custom-column.png index 0ed27866a5..7c7a58acbd 100644 Binary files a/_docs/master/questions/images/custom-column.png and b/_docs/master/questions/images/custom-column.png differ diff --git a/_docs/master/questions/images/custom-expression-editor.png b/_docs/master/questions/images/custom-expression-editor.png index 416c5e974f..a0d457c888 100644 Binary files a/_docs/master/questions/images/custom-expression-editor.png and b/_docs/master/questions/images/custom-expression-editor.png differ diff --git a/_docs/master/questions/images/data-picker.png b/_docs/master/questions/images/data-picker.png index 70c1e8d81c..f7781f5854 100644 Binary files a/_docs/master/questions/images/data-picker.png and b/_docs/master/questions/images/data-picker.png differ diff --git a/_docs/master/questions/images/detail-view.png b/_docs/master/questions/images/detail-view.png index a912dce7f6..f844576363 100644 Binary files a/_docs/master/questions/images/detail-view.png and b/_docs/master/questions/images/detail-view.png differ diff --git a/_docs/master/questions/images/detail.png b/_docs/master/questions/images/detail.png index 6e5ac1825a..bb58a36bcb 100644 Binary files a/_docs/master/questions/images/detail.png and b/_docs/master/questions/images/detail.png differ diff --git a/_docs/master/questions/images/diff-and-percentage.png b/_docs/master/questions/images/diff-and-percentage.png index 181ab4e47c..673a368de5 100644 Binary files a/_docs/master/questions/images/diff-and-percentage.png and b/_docs/master/questions/images/diff-and-percentage.png differ diff --git a/_docs/master/questions/images/download-card-results.png b/_docs/master/questions/images/download-card-results.png index e6619ad778..273519bd8e 100644 Binary files a/_docs/master/questions/images/download-card-results.png and b/_docs/master/questions/images/download-card-results.png differ diff --git a/_docs/master/questions/images/drill-through-menu.png b/_docs/master/questions/images/drill-through-menu.png index 86dd9ecbc2..d053a661a0 100644 Binary files a/_docs/master/questions/images/drill-through-menu.png and b/_docs/master/questions/images/drill-through-menu.png differ diff --git a/_docs/master/questions/images/editor.png b/_docs/master/questions/images/editor.png index 31caa057b8..f7854ecf78 100644 Binary files a/_docs/master/questions/images/editor.png and b/_docs/master/questions/images/editor.png differ diff --git a/_docs/master/questions/images/explore-results.png b/_docs/master/questions/images/explore-results.png index 04ddfdc57b..4e8601e99d 100644 Binary files a/_docs/master/questions/images/explore-results.png and b/_docs/master/questions/images/explore-results.png differ diff --git a/_docs/master/questions/images/export-dashboard-as-pdf.png b/_docs/master/questions/images/export-dashboard-as-pdf.png index 5785ac229c..bb04ad6898 100644 Binary files a/_docs/master/questions/images/export-dashboard-as-pdf.png and b/_docs/master/questions/images/export-dashboard-as-pdf.png differ diff --git a/_docs/master/questions/images/exporting-the-results-of-a-question.png b/_docs/master/questions/images/exporting-the-results-of-a-question.png index b54550b6d6..627fb656c2 100644 Binary files a/_docs/master/questions/images/exporting-the-results-of-a-question.png and b/_docs/master/questions/images/exporting-the-results-of-a-question.png differ diff --git a/_docs/master/questions/images/filter-expression.png b/_docs/master/questions/images/filter-expression.png index c5b1a4f54b..8f4697afb2 100644 Binary files a/_docs/master/questions/images/filter-expression.png and b/_docs/master/questions/images/filter-expression.png differ diff --git a/_docs/master/questions/images/filter-step.png b/_docs/master/questions/images/filter-step.png index af8dd811b0..3ab541be27 100644 Binary files a/_docs/master/questions/images/filter-step.png and b/_docs/master/questions/images/filter-step.png differ diff --git a/_docs/master/questions/images/function-browser.png b/_docs/master/questions/images/function-browser.png index eaeaf64500..b6223101a3 100644 Binary files a/_docs/master/questions/images/function-browser.png and b/_docs/master/questions/images/function-browser.png differ diff --git a/_docs/master/questions/images/funnel-as-sql.png b/_docs/master/questions/images/funnel-as-sql.png index 3c8a32cc82..cbad6d22ba 100644 Binary files a/_docs/master/questions/images/funnel-as-sql.png and b/_docs/master/questions/images/funnel-as-sql.png differ diff --git a/_docs/master/questions/images/funnel-settings.png b/_docs/master/questions/images/funnel-settings.png index 676d7840a3..ef9a3c041c 100644 Binary files a/_docs/master/questions/images/funnel-settings.png and b/_docs/master/questions/images/funnel-settings.png differ diff --git a/_docs/master/questions/images/funnel.png b/_docs/master/questions/images/funnel.png index 0a00e2922b..3fff9554f5 100644 Binary files a/_docs/master/questions/images/funnel.png and b/_docs/master/questions/images/funnel.png differ diff --git a/_docs/master/questions/images/gauge-format.png b/_docs/master/questions/images/gauge-format.png index e68f416cad..f011c8dfd9 100644 Binary files a/_docs/master/questions/images/gauge-format.png and b/_docs/master/questions/images/gauge-format.png differ diff --git a/_docs/master/questions/images/gauge-labeled.png b/_docs/master/questions/images/gauge-labeled.png index efbaebb582..444e8ed85e 100644 Binary files a/_docs/master/questions/images/gauge-labeled.png and b/_docs/master/questions/images/gauge-labeled.png differ diff --git a/_docs/master/questions/images/gauge.png b/_docs/master/questions/images/gauge.png index 23560bea60..8a18e75ba8 100644 Binary files a/_docs/master/questions/images/gauge.png and b/_docs/master/questions/images/gauge.png differ diff --git a/_docs/master/questions/images/get-alerts-about-this.png b/_docs/master/questions/images/get-alerts-about-this.png index 66a05e7b48..205080a35f 100644 Binary files a/_docs/master/questions/images/get-alerts-about-this.png and b/_docs/master/questions/images/get-alerts-about-this.png differ diff --git a/_docs/master/questions/images/goal-line.png b/_docs/master/questions/images/goal-line.png index e333d82f01..1e9f3b8f44 100644 Binary files a/_docs/master/questions/images/goal-line.png and b/_docs/master/questions/images/goal-line.png differ diff --git a/_docs/master/questions/images/grid-map.png b/_docs/master/questions/images/grid-map.png index 95d7eefd87..d8dc3bdd8d 100644 Binary files a/_docs/master/questions/images/grid-map.png and b/_docs/master/questions/images/grid-map.png differ diff --git a/_docs/master/questions/images/group-by-week-of-year.png b/_docs/master/questions/images/group-by-week-of-year.png index fab199632b..525b22ab81 100644 Binary files a/_docs/master/questions/images/group-by-week-of-year.png and b/_docs/master/questions/images/group-by-week-of-year.png differ diff --git a/_docs/master/questions/images/heatmap-query.png b/_docs/master/questions/images/heatmap-query.png index ad11e5609a..ca371fe10b 100644 Binary files a/_docs/master/questions/images/heatmap-query.png and b/_docs/master/questions/images/heatmap-query.png differ diff --git a/_docs/master/questions/images/histogram-bins.png b/_docs/master/questions/images/histogram-bins.png index 99fb5e35ed..9b575fdb0f 100644 Binary files a/_docs/master/questions/images/histogram-bins.png and b/_docs/master/questions/images/histogram-bins.png differ diff --git a/_docs/master/questions/images/histogram.png b/_docs/master/questions/images/histogram.png index efbaebb582..2e246dd0b5 100644 Binary files a/_docs/master/questions/images/histogram.png and b/_docs/master/questions/images/histogram.png differ diff --git a/_docs/master/questions/images/info-sidesheet.png b/_docs/master/questions/images/info-sidesheet.png index fc791ceac8..f46d338305 100644 Binary files a/_docs/master/questions/images/info-sidesheet.png and b/_docs/master/questions/images/info-sidesheet.png differ diff --git a/_docs/master/questions/images/join-a-b-c.png b/_docs/master/questions/images/join-a-b-c.png index a03a06a881..605b3f27ab 100644 Binary files a/_docs/master/questions/images/join-a-b-c.png and b/_docs/master/questions/images/join-a-b-c.png differ diff --git a/_docs/master/questions/images/join-operator.png b/_docs/master/questions/images/join-operator.png index f7f974d7e0..9b6a2409c9 100644 Binary files a/_docs/master/questions/images/join-operator.png and b/_docs/master/questions/images/join-operator.png differ diff --git a/_docs/master/questions/images/join-pick-data.png b/_docs/master/questions/images/join-pick-data.png index c2c2978f4f..d23dcf3a71 100644 Binary files a/_docs/master/questions/images/join-pick-data.png and b/_docs/master/questions/images/join-pick-data.png differ diff --git a/_docs/master/questions/images/join-step.png b/_docs/master/questions/images/join-step.png index 4ff970ecd8..58b12ec981 100644 Binary files a/_docs/master/questions/images/join-step.png and b/_docs/master/questions/images/join-step.png differ diff --git a/_docs/master/questions/images/joining-on-multiple-columns.png b/_docs/master/questions/images/joining-on-multiple-columns.png index ce835da07c..1881079e7a 100644 Binary files a/_docs/master/questions/images/joining-on-multiple-columns.png and b/_docs/master/questions/images/joining-on-multiple-columns.png differ diff --git a/_docs/master/questions/images/latlong-binned-result.png b/_docs/master/questions/images/latlong-binned-result.png index 37f682f21a..53c1fdcb2b 100644 Binary files a/_docs/master/questions/images/latlong-binned-result.png and b/_docs/master/questions/images/latlong-binned-result.png differ diff --git a/_docs/master/questions/images/legend.png b/_docs/master/questions/images/legend.png index 1cfd092a11..b537a54083 100644 Binary files a/_docs/master/questions/images/legend.png and b/_docs/master/questions/images/legend.png differ diff --git a/_docs/master/questions/images/line-options.png b/_docs/master/questions/images/line-options.png index 47bf06c79f..84f7cacef9 100644 Binary files a/_docs/master/questions/images/line-options.png and b/_docs/master/questions/images/line-options.png differ diff --git a/_docs/master/questions/images/map-alternative.png b/_docs/master/questions/images/map-alternative.png index ea8c8ef377..13d35b81fb 100644 Binary files a/_docs/master/questions/images/map-alternative.png and b/_docs/master/questions/images/map-alternative.png differ diff --git a/_docs/master/questions/images/map-tiles.png b/_docs/master/questions/images/map-tiles.png index 48daef3d20..e9240db2e5 100644 Binary files a/_docs/master/questions/images/map-tiles.png and b/_docs/master/questions/images/map-tiles.png differ diff --git a/_docs/master/questions/images/map-types.png b/_docs/master/questions/images/map-types.png index 902353b6a8..5a1cbac8a5 100644 Binary files a/_docs/master/questions/images/map-types.png and b/_docs/master/questions/images/map-types.png differ diff --git a/_docs/master/questions/images/map.png b/_docs/master/questions/images/map.png index f0bc726bb6..bedffed948 100644 Binary files a/_docs/master/questions/images/map.png and b/_docs/master/questions/images/map.png differ diff --git a/_docs/master/questions/images/metrics-in-tooltip.png b/_docs/master/questions/images/metrics-in-tooltip.png index b2cdec6f3b..b0d2f359bc 100644 Binary files a/_docs/master/questions/images/metrics-in-tooltip.png and b/_docs/master/questions/images/metrics-in-tooltip.png differ diff --git a/_docs/master/questions/images/multiple-metrics.png b/_docs/master/questions/images/multiple-metrics.png index bba0c2bccc..ee91b33239 100644 Binary files a/_docs/master/questions/images/multiple-metrics.png and b/_docs/master/questions/images/multiple-metrics.png differ diff --git a/_docs/master/questions/images/multiple-summarize-steps.png b/_docs/master/questions/images/multiple-summarize-steps.png index cbb80ea4c2..b748a44ab0 100644 Binary files a/_docs/master/questions/images/multiple-summarize-steps.png and b/_docs/master/questions/images/multiple-summarize-steps.png differ diff --git a/_docs/master/questions/images/native-editor.png b/_docs/master/questions/images/native-editor.png index e064da9fec..849f7e34b2 100644 Binary files a/_docs/master/questions/images/native-editor.png and b/_docs/master/questions/images/native-editor.png differ diff --git a/_docs/master/questions/images/notebook-editor.png b/_docs/master/questions/images/notebook-editor.png index 24769d273d..f41a39888f 100644 Binary files a/_docs/master/questions/images/notebook-editor.png and b/_docs/master/questions/images/notebook-editor.png differ diff --git a/_docs/master/questions/images/number.png b/_docs/master/questions/images/number.png index 6a503dc977..c42ac28d5e 100644 Binary files a/_docs/master/questions/images/number.png and b/_docs/master/questions/images/number.png differ diff --git a/_docs/master/questions/images/paginate-table-on-dashboard-card.png b/_docs/master/questions/images/paginate-table-on-dashboard-card.png index 22f38f2e92..c748cf3912 100644 Binary files a/_docs/master/questions/images/paginate-table-on-dashboard-card.png and b/_docs/master/questions/images/paginate-table-on-dashboard-card.png differ diff --git a/_docs/master/questions/images/pie-other-slice.png b/_docs/master/questions/images/pie-other-slice.png index dcbd6a8bdf..f71e20096b 100644 Binary files a/_docs/master/questions/images/pie-other-slice.png and b/_docs/master/questions/images/pie-other-slice.png differ diff --git a/_docs/master/questions/images/pie-sunburst-demo.png b/_docs/master/questions/images/pie-sunburst-demo.png index a199112828..ed156d6419 100644 Binary files a/_docs/master/questions/images/pie-sunburst-demo.png and b/_docs/master/questions/images/pie-sunburst-demo.png differ diff --git a/_docs/master/questions/images/pin-data-shape.png b/_docs/master/questions/images/pin-data-shape.png index fab199632b..662fc32e5a 100644 Binary files a/_docs/master/questions/images/pin-data-shape.png and b/_docs/master/questions/images/pin-data-shape.png differ diff --git a/_docs/master/questions/images/pin-map-with-tooltip.png b/_docs/master/questions/images/pin-map-with-tooltip.png index 5710a8cb31..24453d9d16 100644 Binary files a/_docs/master/questions/images/pin-map-with-tooltip.png and b/_docs/master/questions/images/pin-map-with-tooltip.png differ diff --git a/_docs/master/questions/images/pivot-conditional-formatting.png b/_docs/master/questions/images/pivot-conditional-formatting.png index e485ede52a..a017f5dc3a 100644 Binary files a/_docs/master/questions/images/pivot-conditional-formatting.png and b/_docs/master/questions/images/pivot-conditional-formatting.png differ diff --git a/_docs/master/questions/images/pivot-table-as-heatmap.png b/_docs/master/questions/images/pivot-table-as-heatmap.png index 30cdb18b3a..9707bfc486 100644 Binary files a/_docs/master/questions/images/pivot-table-as-heatmap.png and b/_docs/master/questions/images/pivot-table-as-heatmap.png differ diff --git a/_docs/master/questions/images/pivot-table-in-metabase.png b/_docs/master/questions/images/pivot-table-in-metabase.png index e4c1d19aa6..5e99a66b5b 100644 Binary files a/_docs/master/questions/images/pivot-table-in-metabase.png and b/_docs/master/questions/images/pivot-table-in-metabase.png differ diff --git a/_docs/master/questions/images/pivot-table-notebook.png b/_docs/master/questions/images/pivot-table-notebook.png index 27e145920c..565a204b49 100644 Binary files a/_docs/master/questions/images/pivot-table-notebook.png and b/_docs/master/questions/images/pivot-table-notebook.png differ diff --git a/_docs/master/questions/images/pivot-table-options.png b/_docs/master/questions/images/pivot-table-options.png index a912dce7f6..89f3efb7c1 100644 Binary files a/_docs/master/questions/images/pivot-table-options.png and b/_docs/master/questions/images/pivot-table-options.png differ diff --git a/_docs/master/questions/images/pivot.png b/_docs/master/questions/images/pivot.png index b763536858..a3e366b726 100644 Binary files a/_docs/master/questions/images/pivot.png and b/_docs/master/questions/images/pivot.png differ diff --git a/_docs/master/questions/images/pivoted-results.png b/_docs/master/questions/images/pivoted-results.png index 356a82eb2f..42d5fe92ce 100644 Binary files a/_docs/master/questions/images/pivoted-results.png and b/_docs/master/questions/images/pivoted-results.png differ diff --git a/_docs/master/questions/images/pivoted-table.png b/_docs/master/questions/images/pivoted-table.png index 7c40a91eed..19c2a0af07 100644 Binary files a/_docs/master/questions/images/pivoted-table.png and b/_docs/master/questions/images/pivoted-table.png differ diff --git a/_docs/master/questions/images/plain-pie.png b/_docs/master/questions/images/plain-pie.png index 1b11f50d3a..37072eaaf1 100644 Binary files a/_docs/master/questions/images/plain-pie.png and b/_docs/master/questions/images/plain-pie.png differ diff --git a/_docs/master/questions/images/preview-table.png b/_docs/master/questions/images/preview-table.png index 432bf88ebb..4fdfcc8edb 100644 Binary files a/_docs/master/questions/images/preview-table.png and b/_docs/master/questions/images/preview-table.png differ diff --git a/_docs/master/questions/images/progress-bar-elements.png b/_docs/master/questions/images/progress-bar-elements.png index 1cfd092a11..e1c65992f4 100644 Binary files a/_docs/master/questions/images/progress-bar-elements.png and b/_docs/master/questions/images/progress-bar-elements.png differ diff --git a/_docs/master/questions/images/progress-with-format.png b/_docs/master/questions/images/progress-with-format.png index a2b5d4f88b..1fc1a79bcc 100644 Binary files a/_docs/master/questions/images/progress-with-format.png and b/_docs/master/questions/images/progress-with-format.png differ diff --git a/_docs/master/questions/images/progress.png b/_docs/master/questions/images/progress.png index 6a503dc977..a7b191cb64 100644 Binary files a/_docs/master/questions/images/progress.png and b/_docs/master/questions/images/progress.png differ diff --git a/_docs/master/questions/images/question-with-metabase-logo.png b/_docs/master/questions/images/question-with-metabase-logo.png index 4dc6b285d0..aac17b3470 100644 Binary files a/_docs/master/questions/images/question-with-metabase-logo.png and b/_docs/master/questions/images/question-with-metabase-logo.png differ diff --git a/_docs/master/questions/images/question.png b/_docs/master/questions/images/question.png index 2880e511c3..7aaf924bf1 100644 Binary files a/_docs/master/questions/images/question.png and b/_docs/master/questions/images/question.png differ diff --git a/_docs/master/questions/images/raw-table.png b/_docs/master/questions/images/raw-table.png index 2bd6a50036..a9a2336e75 100644 Binary files a/_docs/master/questions/images/raw-table.png and b/_docs/master/questions/images/raw-table.png differ diff --git a/_docs/master/questions/images/read-a-funnel.png b/_docs/master/questions/images/read-a-funnel.png index 7faff93ea7..7a1f4f5022 100644 Binary files a/_docs/master/questions/images/read-a-funnel.png and b/_docs/master/questions/images/read-a-funnel.png differ diff --git a/_docs/master/questions/images/region-map-query.png b/_docs/master/questions/images/region-map-query.png index eac3d90d7d..d6bcb63461 100644 Binary files a/_docs/master/questions/images/region-map-query.png and b/_docs/master/questions/images/region-map-query.png differ diff --git a/_docs/master/questions/images/region-maps.png b/_docs/master/questions/images/region-maps.png index 91ae89db11..ff87c07911 100644 Binary files a/_docs/master/questions/images/region-maps.png and b/_docs/master/questions/images/region-maps.png differ diff --git a/_docs/master/questions/images/rolling-average.png b/_docs/master/questions/images/rolling-average.png index 17463efde4..fc88de1df3 100644 Binary files a/_docs/master/questions/images/rolling-average.png and b/_docs/master/questions/images/rolling-average.png differ diff --git a/_docs/master/questions/images/row.png b/_docs/master/questions/images/row.png index dd3d2b7500..c6e2070ea8 100644 Binary files a/_docs/master/questions/images/row.png and b/_docs/master/questions/images/row.png differ diff --git a/_docs/master/questions/images/sankey-data-options.png b/_docs/master/questions/images/sankey-data-options.png index 234953e4d9..5fe31969a8 100644 Binary files a/_docs/master/questions/images/sankey-data-options.png and b/_docs/master/questions/images/sankey-data-options.png differ diff --git a/_docs/master/questions/images/sankey-gray-edges.png b/_docs/master/questions/images/sankey-gray-edges.png index faa2e2ff66..e19bf18895 100644 Binary files a/_docs/master/questions/images/sankey-gray-edges.png and b/_docs/master/questions/images/sankey-gray-edges.png differ diff --git a/_docs/master/questions/images/sankey-left-aligned.png b/_docs/master/questions/images/sankey-left-aligned.png index 4a3a856f4d..cd08b3453e 100644 Binary files a/_docs/master/questions/images/sankey-left-aligned.png and b/_docs/master/questions/images/sankey-left-aligned.png differ diff --git a/_docs/master/questions/images/sankey-right-aligned.png b/_docs/master/questions/images/sankey-right-aligned.png index 9a012f5045..3b3b894d3c 100644 Binary files a/_docs/master/questions/images/sankey-right-aligned.png and b/_docs/master/questions/images/sankey-right-aligned.png differ diff --git a/_docs/master/questions/images/sankey-summarize-count-source-target.png b/_docs/master/questions/images/sankey-summarize-count-source-target.png index d17e1d55e2..7648a01308 100644 Binary files a/_docs/master/questions/images/sankey-summarize-count-source-target.png and b/_docs/master/questions/images/sankey-summarize-count-source-target.png differ diff --git a/_docs/master/questions/images/scatter.png b/_docs/master/questions/images/scatter.png index 09c0b7664d..fa725aefea 100644 Binary files a/_docs/master/questions/images/scatter.png and b/_docs/master/questions/images/scatter.png differ diff --git a/_docs/master/questions/images/search-dropdown.png b/_docs/master/questions/images/search-dropdown.png index bfc92db1b5..648eda0993 100644 Binary files a/_docs/master/questions/images/search-dropdown.png and b/_docs/master/questions/images/search-dropdown.png differ diff --git a/_docs/master/questions/images/select-region-map.png b/_docs/master/questions/images/select-region-map.png index 6d5e84b1c9..7773d2af76 100644 Binary files a/_docs/master/questions/images/select-region-map.png and b/_docs/master/questions/images/select-region-map.png differ diff --git a/_docs/master/questions/images/show-row-index.png b/_docs/master/questions/images/show-row-index.png index 806be036e5..6d37c91d74 100644 Binary files a/_docs/master/questions/images/show-row-index.png and b/_docs/master/questions/images/show-row-index.png differ diff --git a/_docs/master/questions/images/sort-step.png b/_docs/master/questions/images/sort-step.png index cb6d0c33bb..b90a899fd6 100644 Binary files a/_docs/master/questions/images/sort-step.png and b/_docs/master/questions/images/sort-step.png differ diff --git a/_docs/master/questions/images/sql-snippets.png b/_docs/master/questions/images/sql-snippets.png index 7a1a02d4fe..9ea13f7129 100644 Binary files a/_docs/master/questions/images/sql-snippets.png and b/_docs/master/questions/images/sql-snippets.png differ diff --git a/_docs/master/questions/images/stacked-100.png b/_docs/master/questions/images/stacked-100.png index 7e9a092af9..f3ede741d1 100644 Binary files a/_docs/master/questions/images/stacked-100.png and b/_docs/master/questions/images/stacked-100.png differ diff --git a/_docs/master/questions/images/stacked-bar-chart.png b/_docs/master/questions/images/stacked-bar-chart.png index bca9971a7a..e293fe61ff 100644 Binary files a/_docs/master/questions/images/stacked-bar-chart.png and b/_docs/master/questions/images/stacked-bar-chart.png differ diff --git a/_docs/master/questions/images/state-field-filter.png b/_docs/master/questions/images/state-field-filter.png index dd3903bd93..7345147768 100644 Binary files a/_docs/master/questions/images/state-field-filter.png and b/_docs/master/questions/images/state-field-filter.png differ diff --git a/_docs/master/questions/images/sum-of-totals-for-previous-period.png b/_docs/master/questions/images/sum-of-totals-for-previous-period.png index c2c2978f4f..123c3b864e 100644 Binary files a/_docs/master/questions/images/sum-of-totals-for-previous-period.png and b/_docs/master/questions/images/sum-of-totals-for-previous-period.png differ diff --git a/_docs/master/questions/images/summarize-by-week-of-year.png b/_docs/master/questions/images/summarize-by-week-of-year.png index 7acf891788..ef294da62e 100644 Binary files a/_docs/master/questions/images/summarize-by-week-of-year.png and b/_docs/master/questions/images/summarize-by-week-of-year.png differ diff --git a/_docs/master/questions/images/summarize-step.png b/_docs/master/questions/images/summarize-step.png index e5580a4a98..9a858b7588 100644 Binary files a/_docs/master/questions/images/summarize-step.png and b/_docs/master/questions/images/summarize-step.png differ diff --git a/_docs/master/questions/images/summarize-timeseries-breakout.png b/_docs/master/questions/images/summarize-timeseries-breakout.png index c590dc6620..f3d5fb4909 100644 Binary files a/_docs/master/questions/images/summarize-timeseries-breakout.png and b/_docs/master/questions/images/summarize-timeseries-breakout.png differ diff --git a/_docs/master/questions/images/summarize-timeseries.png b/_docs/master/questions/images/summarize-timeseries.png index c7dabb6f01..b6212a1142 100644 Binary files a/_docs/master/questions/images/summarize-timeseries.png and b/_docs/master/questions/images/summarize-timeseries.png differ diff --git a/_docs/master/questions/images/sunburst-metric-options.png b/_docs/master/questions/images/sunburst-metric-options.png index c004fdd975..ed46c94b1f 100644 Binary files a/_docs/master/questions/images/sunburst-metric-options.png and b/_docs/master/questions/images/sunburst-metric-options.png differ diff --git a/_docs/master/questions/images/sunburst-settings-showcase.png b/_docs/master/questions/images/sunburst-settings-showcase.png index 3f64e3e5ac..dc9697c664 100644 Binary files a/_docs/master/questions/images/sunburst-settings-showcase.png and b/_docs/master/questions/images/sunburst-settings-showcase.png differ diff --git a/_docs/master/questions/images/sunburst-two-levels.png b/_docs/master/questions/images/sunburst-two-levels.png index 10e0299409..f8e90bdc5f 100644 Binary files a/_docs/master/questions/images/sunburst-two-levels.png and b/_docs/master/questions/images/sunburst-two-levels.png differ diff --git a/_docs/master/questions/images/switch-to-editor.png b/_docs/master/questions/images/switch-to-editor.png index 3c8a32cc82..69a707d573 100644 Binary files a/_docs/master/questions/images/switch-to-editor.png and b/_docs/master/questions/images/switch-to-editor.png differ diff --git a/_docs/master/questions/images/table.png b/_docs/master/questions/images/table.png index 4ce9fda455..fa22b33069 100644 Binary files a/_docs/master/questions/images/table.png and b/_docs/master/questions/images/table.png differ diff --git a/_docs/master/questions/images/tooltip.png b/_docs/master/questions/images/tooltip.png index 0f50ef1c4e..0857912d96 100644 Binary files a/_docs/master/questions/images/tooltip.png and b/_docs/master/questions/images/tooltip.png differ diff --git a/_docs/master/questions/images/trend-lines.png b/_docs/master/questions/images/trend-lines.png index bb49c52381..d051c0722f 100644 Binary files a/_docs/master/questions/images/trend-lines.png and b/_docs/master/questions/images/trend-lines.png differ diff --git a/_docs/master/questions/images/trend-settings.png b/_docs/master/questions/images/trend-settings.png index 181ab4e47c..2f1b7fb7ea 100644 Binary files a/_docs/master/questions/images/trend-settings.png and b/_docs/master/questions/images/trend-settings.png differ diff --git a/_docs/master/questions/images/unpinned-from-zero-y-axis.png b/_docs/master/questions/images/unpinned-from-zero-y-axis.png index a20662dde5..b37449e7a0 100644 Binary files a/_docs/master/questions/images/unpinned-from-zero-y-axis.png and b/_docs/master/questions/images/unpinned-from-zero-y-axis.png differ diff --git a/_docs/master/questions/images/unpivoted-results.png b/_docs/master/questions/images/unpivoted-results.png index e3d9ba981c..0cc56ea996 100644 Binary files a/_docs/master/questions/images/unpivoted-results.png and b/_docs/master/questions/images/unpivoted-results.png differ diff --git a/_docs/master/questions/images/unpivoted-table.png b/_docs/master/questions/images/unpivoted-table.png index d4ac10651e..f81580ce49 100644 Binary files a/_docs/master/questions/images/unpivoted-table.png and b/_docs/master/questions/images/unpivoted-table.png differ diff --git a/_docs/master/questions/images/view-the-sql.png b/_docs/master/questions/images/view-the-sql.png index 13c16da8e3..8f6b4d0ee7 100644 Binary files a/_docs/master/questions/images/view-the-sql.png and b/_docs/master/questions/images/view-the-sql.png differ diff --git a/_docs/master/questions/images/visualize-native.png b/_docs/master/questions/images/visualize-native.png index 49a0bf0703..14f4706b56 100644 Binary files a/_docs/master/questions/images/visualize-native.png and b/_docs/master/questions/images/visualize-native.png differ diff --git a/_docs/master/questions/images/viz-options.png b/_docs/master/questions/images/viz-options.png index 49a0bf0703..4f278c1dec 100644 Binary files a/_docs/master/questions/images/viz-options.png and b/_docs/master/questions/images/viz-options.png differ diff --git a/_docs/master/questions/images/waterfall-chart.png b/_docs/master/questions/images/waterfall-chart.png index 60cbdafba4..5fbef8e5cb 100644 Binary files a/_docs/master/questions/images/waterfall-chart.png and b/_docs/master/questions/images/waterfall-chart.png differ diff --git a/_docs/master/questions/images/week-instance.png b/_docs/master/questions/images/week-instance.png index 8711fd07ed..347454663c 100644 Binary files a/_docs/master/questions/images/week-instance.png and b/_docs/master/questions/images/week-instance.png differ diff --git a/_docs/master/questions/images/week-iso.png b/_docs/master/questions/images/week-iso.png index 5ebb209705..82cf0608b8 100644 Binary files a/_docs/master/questions/images/week-iso.png and b/_docs/master/questions/images/week-iso.png differ diff --git a/_docs/master/questions/images/week-us.png b/_docs/master/questions/images/week-us.png index 00941672f6..6177879f08 100644 Binary files a/_docs/master/questions/images/week-us.png and b/_docs/master/questions/images/week-us.png differ diff --git a/_docs/master/questions/images/year-over-year-sum-totals.png b/_docs/master/questions/images/year-over-year-sum-totals.png index 5464e75a00..335ce262b9 100644 Binary files a/_docs/master/questions/images/year-over-year-sum-totals.png and b/_docs/master/questions/images/year-over-year-sum-totals.png differ diff --git a/_docs/master/questions/native-editor/sql-parameters.md b/_docs/master/questions/native-editor/sql-parameters.md index e3413f60f7..a6d6a59cc0 100644 --- a/_docs/master/questions/native-editor/sql-parameters.md +++ b/_docs/master/questions/native-editor/sql-parameters.md @@ -155,7 +155,7 @@ Make sure your SQL dialect matches the database you've selected. Common issues i | Database | Dialect quirk | Example | | -------- | --------------------------------------------------- | -------------------------- | | BigQuery | Schemas and tables must be quoted with backticks. | `` FROM `dataset.table` `` | -| Oracle | Schemas and tables must be quoted in double quotes. | `FROM "schema.table"` | +| Oracle | Schemas and tables must be quoted in double quotes. | `FROM schema.table` | For more help, see [Troubleshooting SQL error messages](../../troubleshooting-guide/error-message#sql-editor). diff --git a/_docs/master/questions/query-builder/expressions-list.md b/_docs/master/questions/query-builder/expressions-list.md index 8130b8d61e..cd0294667a 100644 --- a/_docs/master/questions/query-builder/expressions-list.md +++ b/_docs/master/questions/query-builder/expressions-list.md @@ -467,7 +467,7 @@ Related: [doesNotContain](#doesnotcontain), [regexExtract](#regexextract). ### date -> Unavailable for Oracle or the non-JDBC Apache Druid driver. +> Not available for Oracle or the non-JDBC Apache Druid driver. - When used on a string, converts an ISO 8601 date string to a date. The string _must_ be in a valid ISO 8601 format. If the string contains time, the time part is truncated. - When used on a datetime value, truncates datetime to a date. @@ -590,7 +590,7 @@ Related: [notEmpty](#notempty), [isNull](#isnull). ### integer -> Only available for BigQuery, ClickHouse, MySQL, PostgreSQL, Amazon Redshift, and Snowflake. +> Not available for the non-JDBC Apache Druid driver. - Converts a string to an integer value. Useful if you want to do some math on numbers, but your data is stored as strings. - Converts a floating point value by rounding it to an integer. @@ -740,7 +740,7 @@ Related: [regexExtract](#regexextract), [replace](#replace). ### text -> Unavailable for the non-JDBC Druid driver +> Not available for the non-JDBC Druid driver Converts a number or date to text (a string). Useful for applying text filters or joining with other columns based on text comparisons. diff --git a/_docs/master/troubleshooting-guide/bugs.md b/_docs/master/troubleshooting-guide/bugs.md index 7ec6b908d5..6dc76f07ae 100644 --- a/_docs/master/troubleshooting-guide/bugs.md +++ b/_docs/master/troubleshooting-guide/bugs.md @@ -11,7 +11,7 @@ layout: new-docs # Reporting a bug -If you come across something that looks like a bug, please start by searching our [GitHub issues][metabase-issues] to see if it has already been reported. If it has, please let us know you're experiencing the same issue by reacting with a thumbs up emoji or adding a comment to provide additional information. +If you come across something that looks like a bug, please start by searching our [Github issues][metabase-issues] to see if it has already been reported. If it has, please let us know you're experiencing the same issue by reacting with a thumbs up emoji or adding a comment to provide additional information. If the bug has not yet been reported, go ahead and [open a bug report][metabase-file-bug]. The following information will help us reproduce your issue: diff --git a/_docs/master/troubleshooting-guide/images/sample-error-sql.png b/_docs/master/troubleshooting-guide/images/sample-error-sql.png index a3bdb2b9c8..b53abf95d0 100644 Binary files a/_docs/master/troubleshooting-guide/images/sample-error-sql.png and b/_docs/master/troubleshooting-guide/images/sample-error-sql.png differ diff --git a/_docs/master/troubleshooting-guide/known-issues.md b/_docs/master/troubleshooting-guide/known-issues.md index 29a783865a..5ae4b67ed7 100644 --- a/_docs/master/troubleshooting-guide/known-issues.md +++ b/_docs/master/troubleshooting-guide/known-issues.md @@ -17,7 +17,7 @@ If you can't find or solve your problem using the [troubleshooting guides](./ind If your work in Metabase is crashing, missing, or not being saved, you might have found a bug. -1. Go to the [Metabase GitHub issues page](https://github.com/metabase/metabase/issues). +1. Go to the [Metabase Github issues page](https://github.com/metabase/metabase/issues). 2. Click on the **Label** dropdown and select `Type: Bug`. @@ -37,7 +37,7 @@ If your work in Metabase is crashing, missing, or not being saved, you might hav If the functionality you're looking for simply doesn't exist (i.e., it hasn't suddenly gone missing), you might be running into a product limitation. -1. Go to the [Metabase GitHub issues page](https://github.com/metabase/metabase/issues). +1. Go to the [Metabase Github issues page](https://github.com/metabase/metabase/issues). 2. Click on the **Label** dropdown and select `Type: New Feature`. diff --git a/_docs/master/usage-and-performance-tools/images/audit-dashboards.png b/_docs/master/usage-and-performance-tools/images/audit-dashboards.png index aa3faabac3..7e6a69d61b 100644 Binary files a/_docs/master/usage-and-performance-tools/images/audit-dashboards.png and b/_docs/master/usage-and-performance-tools/images/audit-dashboards.png differ diff --git a/_docs/master/usage-and-performance-tools/images/audit-data.png b/_docs/master/usage-and-performance-tools/images/audit-data.png index 8c9b5bcbb9..b1bab9d666 100644 Binary files a/_docs/master/usage-and-performance-tools/images/audit-data.png and b/_docs/master/usage-and-performance-tools/images/audit-data.png differ diff --git a/_docs/master/usage-and-performance-tools/images/audit-questions.png b/_docs/master/usage-and-performance-tools/images/audit-questions.png index 91dddeb9c2..01d7faa1e1 100644 Binary files a/_docs/master/usage-and-performance-tools/images/audit-questions.png and b/_docs/master/usage-and-performance-tools/images/audit-questions.png differ diff --git a/_docs/master/usage-and-performance-tools/images/audit-team.png b/_docs/master/usage-and-performance-tools/images/audit-team.png index aa3faabac3..a1bb5ce674 100644 Binary files a/_docs/master/usage-and-performance-tools/images/audit-team.png and b/_docs/master/usage-and-performance-tools/images/audit-team.png differ diff --git a/_docs/master/usage-and-performance-tools/images/audit-teammember.png b/_docs/master/usage-and-performance-tools/images/audit-teammember.png index 8c9b5bcbb9..fcf9e5ca3a 100644 Binary files a/_docs/master/usage-and-performance-tools/images/audit-teammember.png and b/_docs/master/usage-and-performance-tools/images/audit-teammember.png differ diff --git a/_docs/master/usage-and-performance-tools/images/metabase-analytics.png b/_docs/master/usage-and-performance-tools/images/metabase-analytics.png index 6b62ec9d4b..29aa97282a 100644 Binary files a/_docs/master/usage-and-performance-tools/images/metabase-analytics.png and b/_docs/master/usage-and-performance-tools/images/metabase-analytics.png differ diff --git a/_site/docs/master/actions/images/appearance.png b/_site/docs/master/actions/images/appearance.png index 9429442b26..4564cd7bc6 100644 Binary files a/_site/docs/master/actions/images/appearance.png and b/_site/docs/master/actions/images/appearance.png differ diff --git a/_site/docs/master/actions/images/basic-actions.png b/_site/docs/master/actions/images/basic-actions.png index 9fa9251682..04efb6a0ac 100644 Binary files a/_site/docs/master/actions/images/basic-actions.png and b/_site/docs/master/actions/images/basic-actions.png differ diff --git a/_site/docs/master/actions/images/custom-action.png b/_site/docs/master/actions/images/custom-action.png index 6c58b5e734..74dd224a92 100644 Binary files a/_site/docs/master/actions/images/custom-action.png and b/_site/docs/master/actions/images/custom-action.png differ diff --git a/_site/docs/master/actions/images/dropdown.png b/_site/docs/master/actions/images/dropdown.png index 44597dc4f9..cfc617a883 100644 Binary files a/_site/docs/master/actions/images/dropdown.png and b/_site/docs/master/actions/images/dropdown.png differ diff --git a/_site/docs/master/actions/images/example-action.png b/_site/docs/master/actions/images/example-action.png index 66168ce82a..a54fb00bc8 100644 Binary files a/_site/docs/master/actions/images/example-action.png and b/_site/docs/master/actions/images/example-action.png differ diff --git a/_site/docs/master/actions/images/form.png b/_site/docs/master/actions/images/form.png index 7a327d2b44..5e5cd9e645 100644 Binary files a/_site/docs/master/actions/images/form.png and b/_site/docs/master/actions/images/form.png differ diff --git a/_site/docs/master/actions/images/public-form.png b/_site/docs/master/actions/images/public-form.png index 08db8ff2c0..7562240224 100644 Binary files a/_site/docs/master/actions/images/public-form.png and b/_site/docs/master/actions/images/public-form.png differ diff --git a/_site/docs/master/actions/images/update-record.png b/_site/docs/master/actions/images/update-record.png index 6090c4c658..8a3fd3acd2 100644 Binary files a/_site/docs/master/actions/images/update-record.png and b/_site/docs/master/actions/images/update-record.png differ diff --git a/_site/docs/master/api.html b/_site/docs/master/api.html index 090c90c3e4..6801b2427f 100644 --- a/_site/docs/master/api.html +++ b/_site/docs/master/api.html @@ -166,7 +166,7 @@ }, "components" : { "schemas" : { - "api.tiles.route-params" : { + "api.tiles/route-params" : { "type" : "object", "properties" : { "lat-field" : { @@ -190,1975 +190,905 @@ }, "required" : [ "zoom", "x", "y", "lat-field", "lon-field" ] }, - "metabase-enterprise.metabot-v3.client.schema.message" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "content" : { - "type" : "string" - }, - "navigate-to" : { - "type" : "string" - }, - "role" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.role" - } + "metabase.analyze.fingerprint.schema/Fingerprint" : { + "type" : "object", + "properties" : { + "experimental" : { + "type" : "object", + "properties" : { } }, - "required" : [ "role" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.client.schema.messages" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.message" + "global" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1GlobalFingerprint" + }, + "type" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1TypeSpecificFingerprint" + } } }, - "metabase-enterprise.metabot-v3.client.schema.role" : { - "type" : "string", - "enum" : [ "system", "user", "assistant", "tool" ] - }, - "metabase-enterprise.metabot-v3.context.context" : { + "metabase.analyze.fingerprint.schema/GlobalFingerprint" : { "type" : "object", - "additionalProperties" : { } - }, - "metabase-enterprise.metabot-v3.tools.api.aggregation" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { - "type" : "string" - }, - "function" : { - "type" : "string", - "enum" : [ "avg", "count", "count-distinct", "max", "min", "sum" ] - }, - "sort_order" : { - "type" : "string", - "enum" : [ "asc", "desc" ] - } + "properties" : { + "distinct-count" : { + "type" : "integer" }, - "required" : [ "field_id", "function" ] - }, { - "type" : "object", - "properties" : { } - } ] + "nil%" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.answer-sources-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "with_metric_default_temporal_breakout" : { - "default" : true, - "type" : "boolean" - }, - "with_metric_queryable_dimensions" : { - "default" : true, - "type" : "boolean" - }, - "with_model_fields" : { - "default" : true, - "type" : "boolean" - }, - "with_model_metrics" : { - "default" : true, - "type" : "boolean" - } + "metabase.analyze.fingerprint.schema/NumberFingerprint" : { + "type" : "object", + "properties" : { + "avg" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "min" : { + "type" : "number" + }, + "q1" : { + "type" : "number" + }, + "q3" : { + "type" : "number" + }, + "sd" : { + "type" : "number" } - }, { - "type" : "object", - "properties" : { } - } ] + } }, - "metabase-enterprise.metabot-v3.tools.api.bucket" : { - "type" : "string", - "enum" : [ "millisecond", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "second-of-minute", "minute-of-hour", "hour-of-day", "day-of-week", "day-of-month", "day-of-year", "week-of-year", "month-of-year", "quarter-of-year", "year-of-era" ] + "metabase.analyze.fingerprint.schema/Percent" : { + "type" : "number" }, - "metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "dashboard_id" : { - "type" : "integer" - }, - "email" : { - "type" : "string" - }, - "schedule" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.subscription-schedule" - } + "metabase.analyze.fingerprint.schema/TemporalFingerprint" : { + "type" : "object", + "properties" : { + "earliest" : { + "type" : "string" }, - "required" : [ "dashboard_id", "email", "schedule" ] - }, { - "type" : "object", - "properties" : { } - } ] + "latest" : { + "type" : "string" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-numeric-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "number-equals", "number-not-equals" ] - }, - "values" : { - "type" : "array", - "items" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "number" - } ] - } - } + "metabase.analyze.fingerprint.schema/TextFingerprint" : { + "type" : "object", + "properties" : { + "average-length" : { + "type" : "number" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-string-date-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "string-contains", "string-not-contains", "string-starts-with", "string-ends-with" ] - }, - "values" : { - "type" : "array", - "items" : { - "type" : "string" - } - } + "percent-email" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-extraction-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "year-equals", "year-not-equals", "quarter-equals", "quarter-not-equals", "month-equals", "month-not-equals", "day-of-week-equals", "day-of-week-not-equals", "hour-equals", "hour-not-equals", "minute-equals", "minute-not-equals", "second-equals", "second-not-equals" ] - }, - "values" : { - "type" : "array", - "items" : { - "type" : "integer" - } - } + "percent-json" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "greater-than", "greater-than-or-equal", "less-than", "less-than-or-equal" ] - }, - "values" : { - "type" : "array", - "items" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "integer" - } ] - } - } + "percent-state" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" }, - "required" : [ "field_id", "operation", "values" ] - }, { - "type" : "object", - "properties" : { } - } ] + "percent-url" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Percent" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.existence-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "is-null", "is-not-null", "string-is-empty", "string-is-not-empty", "is-true", "is-false" ] - } + "metabase.analyze.fingerprint.schema/TypeSpecificFingerprint" : { + "type" : "object", + "properties" : { + "type/DateTime" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1TemporalFingerprint" }, - "required" : [ "field_id", "operation" ] - }, { - "type" : "object", - "properties" : { } - } ] + "type/Number" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1NumberFingerprint" + }, + "type/Text" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1TextFingerprint" + } + } }, - "metabase-enterprise.metabot-v3.tools.api.field" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { + "metabase.analyze.query-results/MaybeUnnormalizedReference" : { }, + "metabase.analyze.query-results/ResultColumnMetadata" : { + "type" : "object", + "properties" : { + "field_ref" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1MaybeUnnormalizedReference" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema~1Fingerprint" + }, + "base_type" : { + "description" : "value must be a valid field data type (keyword or string)." + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id~1field" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "description" : "value must be a valid field semantic or relation type (keyword or string)." + }, + "display_name" : { + "type" : "string" + }, + "converted_timezone" : { + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal~1timezone-id" + }, + "unit" : { + "description" : "value must be a keyword or string.", + "anyOf" : [ { "type" : "string" - } + }, { + "type" : "string" + } ] }, - "required" : [ "field_id" ] + "description" : { + "type" : "string" + } + }, + "required" : [ "name", "display_name", "base_type" ] + }, + "metabase.analyze.query-results/ResultsMetadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultColumnMetadata" + }, + "description" : "value must be an array of valid results column metadata maps.", + "optional" : true + }, + "metabase.api.cache/cache-strategy" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ee" }, { - "type" : "object", - "properties" : { } + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.oss" } ] }, - "metabase-enterprise.metabot-v3.tools.api.field-values-arguments" : { + "metabase.api.cache/cache-strategy.base" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "nocache", "ttl", "duration", "schedule" ] + } + }, + "required" : [ "type" ] + }, + "metabase.api.cache/cache-strategy.ee" : { + "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", "allOf" : [ { - "type" : "object", - "properties" : { - "entity_id" : { - "type" : "integer" - }, - "entity_type" : { - "type" : "string", - "enum" : [ "table", "model", "metric" ] - }, - "field_id" : { - "type" : "string" - }, - "limit" : { - "type" : "integer" - } - }, - "required" : [ "entity_type", "entity_id", "field_id" ] + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.base" }, { - "type" : "object", - "properties" : { } + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.nocache" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ttl" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ee.duration" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ee.schedule" + } ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.filter" : { - "anyOf" : [ { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.existence-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.temporal-extraction-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-extraction-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.temporal-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-temporal-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.string-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-string-date-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.numeric-filter" - }, { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.disjunctive-numeric-filter" - } ] + "metabase.api.cache/cache-strategy.ee.duration" : { + "type" : "object", + "properties" : { + "duration" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "refresh_automatically" : { + "type" : "boolean" + }, + "type" : { + "const" : "duration" + }, + "unit" : { + "type" : "string", + "enum" : [ "hours", "minutes", "seconds", "days" ] + } + }, + "required" : [ "type", "duration", "unit" ], + "additionalProperties" : false }, - "metabase-enterprise.metabot-v3.tools.api.filter-records-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "data_source" : { - "allOf" : [ { - "anyOf" : [ { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { - "database" : { - "type" : "integer" - } - }, - "required" : [ "database" ] - }, - "query_id" : { - "type" : "string" - } - }, - "required" : [ "query" ] - }, { - "type" : "object", - "properties" : { - "report_id" : { - "type" : "integer" - } - }, - "required" : [ "report_id" ] - }, { - "type" : "object", - "properties" : { - "table_id" : { - "type" : "string" - } - }, - "required" : [ "table_id" ] - } ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "filters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter" - } - } + "metabase.api.cache/cache-strategy.ee.schedule" : { + "type" : "object", + "properties" : { + "refresh_automatically" : { + "type" : "boolean" }, - "required" : [ "data_source", "filters" ] - }, { - "type" : "object", - "properties" : { } - } ] + "schedule" : { + "$ref" : "#/components/schemas/metabase.util.cron~1CronScheduleString" + }, + "type" : { + "const" : "schedule" + } + }, + "required" : [ "type", "schedule" ], + "additionalProperties" : false + }, + "metabase.api.cache/cache-strategy.nocache" : { + "type" : "object", + "properties" : { + "type" : { + "const" : "nocache" + } + }, + "required" : [ "type" ] }, - "metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" : { + "metabase.api.cache/cache-strategy.oss" : { + "description" : "Schema for a caching strategy (OSS)", "allOf" : [ { - "type" : "object", - "properties" : { - "data_source" : { - "allOf" : [ { - "anyOf" : [ { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { - "database" : { - "type" : "integer" - } - }, - "required" : [ "database" ] - }, - "query_id" : { - "type" : "string" - }, - "result_field_id" : { - "type" : "string" - } - }, - "required" : [ "query", "result_field_id" ] - }, { - "type" : "object", - "properties" : { - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { - "report_id" : { - "type" : "integer" - }, - "result_field_id" : { - "type" : "string" - } - }, - "required" : [ "report_id", "result_field_id" ] - }, { - "type" : "object", - "properties" : { - "result_field_id" : { - "type" : "string" - }, - "table_id" : { - "type" : "string" - } - }, - "required" : [ "table_id", "result_field_id" ] - } ] - }, { - "type" : "object", - "properties" : { } - } ] - } - }, - "required" : [ "data_source" ] + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.base" }, { - "type" : "object", - "properties" : { } + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.nocache" + }, { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy.ttl" + } ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { + "metabase.api.cache/cache-strategy.ttl" : { "type" : "object", "properties" : { - "for" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { - "table_id" : { - "type" : "string" - } - }, - "required" : [ "table_id" ] - }, { - "type" : "object", - "properties" : { - "report_id" : { - "type" : "integer" - } - }, - "required" : [ "report_id" ] - }, { - "type" : "object", - "properties" : { - "query" : { - "type" : "object", - "properties" : { } - } - }, - "required" : [ "query" ] - } ] + "min_duration_ms" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "multiplier" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "const" : "ttl" + } + }, + "required" : [ "type", "multiplier", "min_duration_ms" ], + "additionalProperties" : false + }, + "metabase.api.card/card-type" : { + "type" : "string", + "enum" : [ "question", "metric", "model" ] + }, + "metabase.api.logger/log-level" : { + "type" : "string", + "enum" : [ "off", "fatal", "error", "warn", "info", "debug", "trace" ] + }, + "metabase.api.logger/time-unit" : { + "type" : "string", + "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] + }, + "metabase.api.user/user-group-membership" : { + "description" : "Group Membership info of a User.\n In which :is_group_manager is only included if `advanced-permissions` is enabled.", + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "is_group_manager" : { + "description" : "Only relevant if `advanced-permissions` is enabled. If it is, you should always include this key.", + "type" : "boolean" } }, - "required" : [ "for" ] + "required" : [ "id" ] }, - "metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" : { - "allOf" : [ { + "metabase.channel.models.channel/Channel" : { + "description" : "Channel schema.", + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "description" : { + "type" : "string" + }, + "details" : { + "type" : "object", + "properties" : { } + }, + "name" : { + "type" : "string" + }, + "type" : { + "type" : "string" + } + }, + "required" : [ "name", "type", "details" ] + }, + "metabase.channel.models.channel/ChannelTemplate" : { + "description" : "Channel Template schema.", + "oneOf" : [ { "type" : "object", "properties" : { - "metric_id" : { - "type" : "integer" - }, - "with_default_temporal_breakout" : { - "default" : true, - "type" : "boolean" - }, - "with_field_values" : { - "default" : true, - "type" : "boolean" - }, - "with_queryable_dimensions" : { - "default" : true, - "type" : "boolean" + "channel_type" : { }, + "details" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplateEmailDetails" } }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { } - } ] + "required" : [ "channel_type", "details" ] + }, { } ] }, - "metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" : { - "allOf" : [ { + "metabase.channel.models.channel/ChannelTemplateEmailDetails" : { + "oneOf" : [ { "type" : "object", "properties" : { - "report_id" : { - "type" : "integer" + "path" : { + "type" : "string" }, - "with_field_values" : { - "default" : true, - "type" : "boolean" + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] + }, + "subject" : { + "type" : "string" }, - "with_fields" : { - "default" : true, - "type" : "boolean" + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] } }, - "required" : [ "report_id" ] + "required" : [ "type", "subject", "path" ] }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" : { - "allOf" : [ { "type" : "object", "properties" : { - "model_id" : { - "type" : "integer" - }, - "table_id" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "string" - } ] - }, - "with_field_values" : { - "default" : true, - "type" : "boolean" + "body" : { + "type" : "string" }, - "with_fields" : { - "default" : true, - "type" : "boolean" + "recipient-type" : { + "enum" : [ "cc", "bcc", "cc", "bcc" ] }, - "with_metric_default_temporal_breakout" : { - "default" : true, - "type" : "boolean" + "subject" : { + "type" : "string" }, - "with_metrics" : { - "default" : true, - "type" : "boolean" - } - } - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.group-by" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_granularity" : { - "type" : "string", - "enum" : [ "day", "week", "month", "quarter", "year" ] - }, - "field_id" : { - "type" : "string" + "type" : { + "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] } }, - "required" : [ "field_id" ] - }, { - "type" : "object", - "properties" : { } + "required" : [ "type", "subject", "body" ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.numeric-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "greater-than", "greater-than-or-equal", "less-than", "less-than-or-equal", "number-equals", "number-not-equals", "number-greater-than", "number-greater-than-or-equal", "number-less-than", "number-less-than-or-equal" ] - }, - "value" : { - "anyOf" : [ { - "type" : "integer" - }, { - "type" : "number" - } ] - } - }, - "required" : [ "field_id", "operation", "value" ] - }, { - "type" : "object", - "properties" : { } - } ] + "metabase.lib.schema.common/non-blank-string" : { + "type" : "string", + "minLength" : 1 }, - "metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" : { + "metabase.lib.schema.expression.temporal/timezone-id" : { "allOf" : [ { - "type" : "object", - "properties" : { - "filters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter" - } - }, - "group_by" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.group-by" - } - }, - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, { - "type" : "object", - "properties" : { } + "anyOf" : [ { + "type" : "string", + "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal~1string.zone-offset" + } ] } ] }, - "metabase-enterprise.metabot-v3.tools.api.query-model-arguments" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "aggregations" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.aggregation" - } - }, - "fields" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field" - } - }, - "filters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter" - } - }, - "group_by" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.group-by" - } - }, - "limit" : { - "type" : "integer" - }, - "model_id" : { - "type" : "integer" - }, - "order_by" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "direction" : { - "type" : "string", - "enum" : [ "asc", "desc" ] - }, - "field" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field" - } - }, - "required" : [ "field", "direction" ] - } - } - }, - "required" : [ "model_id" ] - }, { - "type" : "object", - "properties" : { } - } ] + "metabase.lib.schema.id/field" : { + "type" : "integer", + "minimum" : 1 }, - "metabase-enterprise.metabot-v3.tools.api.string-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "string-equals", "string-not-equals", "string-contains", "string-not-contains", "string-starts-with", "string-ends-with" ] - }, - "value" : { - "type" : "string" - } - }, - "required" : [ "field_id", "operation", "value" ] + "metabase.lib.schema.literal/string.datetime" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" }, { - "type" : "object", - "properties" : { } + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" } ] }, - "metabase-enterprise.metabot-v3.tools.api.subscription-schedule" : { - "allOf" : [ { - "anyOf" : [ { + "metabase.lib.schema.literal/string.zone-offset" : { + "type" : "string", + "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" + }, + "metabase.lib.schema.metadata/column.has-field-values" : { + "type" : "string", + "enum" : [ "auto-list", "list", "none", "search" ] + }, + "metabase.lib.schema.temporal-bucketing/unit" : { + "type" : "string", + "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] + }, + "metabase.notification.models/FullyHydratedNotification" : { + "description" : "Fully hydrated notification.", + "oneOf" : [ { + "oneOf" : [ { "type" : "object", "properties" : { - "frequency" : { - "const" : "hourly" + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationCard" + }, + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationSubscription" + } } }, - "required" : [ "frequency" ] - }, { + "required" : [ "payload_type", "payload" ] + }, { } ] + }, { + "oneOf" : [ { "type" : "object", "properties" : { - "frequency" : { - "const" : "daily" + "creator" : { + "type" : "object", + "properties" : { } }, - "hour" : { + "creator_id" : { "type" : "integer" - } - }, - "required" : [ "frequency", "hour" ] - }, { - "type" : "object", - "properties" : { - "day_of_week" : { - "type" : "string", - "enum" : [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ] }, - "frequency" : { - "const" : "weekly" + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationCard" }, - "hour" : { + "payload_id" : { "type" : "integer" - } - }, - "required" : [ "frequency", "hour", "day_of_week" ] - }, { - "type" : "object", - "properties" : { - "day_of_month" : { - "type" : "string", - "enum" : [ "first-calendar-day", "middle-of-month", "last-calendar-day", "first-sunday", "first-monday", "first-tuesday", "first-wednesday", "first-thursday", "first-friday", "first-saturday", "last-sunday", "last-monday", "last-tuesday", "last-wednesday", "last-thursday", "last-friday", "last-saturday" ] }, - "frequency" : { - "const" : "monthly" + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] }, - "hour" : { - "type" : "integer" + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationSubscription" + } } }, - "required" : [ "frequency", "hour", "day_of_month" ] - } ] - }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.temporal-extraction-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "year-equals", "year-not-equals", "quarter-equals", "quarter-not-equals", "month-equals", "month-not-equals", "day-of-week-equals", "day-of-week-not-equals", "hour-equals", "hour-not-equals", "minute-equals", "minute-not-equals", "second-equals", "second-not-equals" ] - }, - "value" : { - "type" : "integer" - } - }, - "required" : [ "field_id", "operation", "value" ] + "required" : [ "payload_type", "payload" ] + }, { } ] }, { - "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.temporal-filter" : { - "allOf" : [ { - "type" : "object", - "properties" : { - "bucket" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.bucket" - }, - "field_id" : { - "type" : "string" - }, - "operation" : { - "type" : "string", - "enum" : [ "equals", "not-equals", "greater-than", "greater-than-or-equal", "less-than", "less-than-or-equal", "date-equals", "date-not-equals", "date-before", "date-on-or-before", "date-after", "date-on-or-after" ] - }, - "value" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "integer" - } ] + "oneOf" : [ { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel~1ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationCard" + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models~1NotificationSubscription" + } + } + }, + "required" : [ "payload" ] + }, { } ] + } ] + }, + "metabase.notification.models/Notification" : { + "oneOf" : [ { + "type" : "object", + "properties" : { + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] } }, - "required" : [ "field_id", "operation", "value" ] + "required" : [ "payload_type" ] }, { "type" : "object", - "properties" : { } - } ] - }, - "metabase-enterprise.metabot-v3.tools.api.tool-request" : { - "type" : "object", - "properties" : { - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] + "properties" : { + "creator_id" : { + "type" : "integer" + }, + "payload_id" : { + "type" : "integer" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + } + }, + "required" : [ "payload_type" ] + }, { } ] }, - "metabase.analyze.fingerprint.schema.Fingerprint" : { + "metabase.notification.models/NotificationCard" : { + "description" : "Schema for :model/NotificationCard.", "type" : "object", "properties" : { - "experimental" : { + "card" : { "type" : "object", "properties" : { } }, - "global" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.GlobalFingerprint" + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "type" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" - } - } - }, - "metabase.analyze.fingerprint.schema.GlobalFingerprint" : { - "type" : "object", - "properties" : { - "distinct-count" : { - "type" : "integer" + "send_condition" : { + "type" : "string", + "enum" : [ "goal_below", "has_result", "goal_above" ] }, - "nil%" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + "send_once" : { + "type" : "boolean" } - } + }, + "required" : [ "card_id" ] }, - "metabase.analyze.fingerprint.schema.NumberFingerprint" : { + "metabase.notification.models/NotificationHandler" : { "type" : "object", "properties" : { - "avg" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "min" : { - "type" : "number" + "active" : { + "type" : "boolean" }, - "q1" : { - "type" : "number" + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "q3" : { - "type" : "number" + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "sd" : { - "type" : "number" + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } - } - }, - "metabase.analyze.fingerprint.schema.Percent" : { - "type" : "number" + }, + "required" : [ "channel_type" ] }, - "metabase.analyze.fingerprint.schema.TemporalFingerprint" : { - "type" : "object", - "properties" : { - "earliest" : { - "type" : "string" + "metabase.notification.models/NotificationRecipient" : { + "description" : "Schema for :model/NotificationRecipient.", + "oneOf" : [ { + "type" : "object", + "properties" : { + "details" : { }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } }, - "latest" : { - "type" : "string" - } - } - }, - "metabase.analyze.fingerprint.schema.TextFingerprint" : { - "type" : "object", - "properties" : { - "average-length" : { - "type" : "number" + "required" : [ "type", "user_id" ] + }, { + "type" : "object", + "properties" : { + "details" : { }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { } }, - "percent-email" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + "required" : [ "type", "permissions_group_id" ] + }, { + "type" : "object", + "properties" : { + "details" : { + "type" : "object", + "properties" : { + "value" : { } + }, + "required" : [ "value" ], + "additionalProperties" : false + }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { } }, - "percent-json" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" + "required" : [ "type", "details" ] + }, { + "type" : "object", + "properties" : { + "details" : { + "type" : "object", + "properties" : { + "is_optional" : { + "type" : "boolean" + }, + "pattern" : { + "type" : "string" + } + }, + "required" : [ "pattern" ], + "additionalProperties" : false + }, + "notification_handler_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "permissions_group_id" : { }, + "type" : { + "type" : "string", + "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] + }, + "user_id" : { } }, - "percent-state" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-url" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - } - } - }, - "metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" : { - "type" : "object", - "properties" : { - "type/DateTime" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TemporalFingerprint" - }, - "type/Number" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.NumberFingerprint" - }, - "type/Text" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TextFingerprint" - } - } - }, - "metabase.analyze.query-results.MaybeUnnormalizedReference" : { }, - "metabase.analyze.query-results.ResultColumnMetadata" : { - "type" : "object", - "properties" : { - "field_ref" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.MaybeUnnormalizedReference" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Fingerprint" - }, - "base_type" : { - "description" : "value must be a valid field data type (keyword or string)." - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "description" : "value must be a valid field semantic or relation type (keyword or string)." - }, - "display_name" : { - "type" : "string" - }, - "converted_timezone" : { - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - }, - "unit" : { - "description" : "value must be a keyword or string.", - "anyOf" : [ { - "type" : "string" - }, { - "type" : "string" - } ] - }, - "description" : { - "type" : "string" - } - }, - "required" : [ "name", "display_name", "base_type" ] - }, - "metabase.analyze.query-results.ResultsMetadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultColumnMetadata" - }, - "description" : "value must be an array of valid results column metadata maps.", - "optional" : true - }, - "metabase.cache.api..cache-strategy.base" : { - "type" : "object", - "properties" : { - "type" : { - "type" : "string", - "enum" : [ "nocache", "ttl", "duration", "schedule" ] - } - }, - "required" : [ "type" ] - }, - "metabase.cache.api..cache-strategy.ee" : { - "description" : "Schema for a caching strategy in EE when we have an premium token with `:cache-granular-controls`.", - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.duration" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee.schedule" - } ] - } ] - }, - "metabase.cache.api..cache-strategy.ee.duration" : { - "type" : "object", - "properties" : { - "duration" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "refresh_automatically" : { - "type" : "boolean" - }, - "type" : { - "const" : "duration" - }, - "unit" : { - "type" : "string", - "enum" : [ "hours", "minutes", "seconds", "days" ] - } - }, - "required" : [ "type", "duration", "unit" ], - "additionalProperties" : false - }, - "metabase.cache.api..cache-strategy.ee.schedule" : { - "type" : "object", - "properties" : { - "refresh_automatically" : { - "type" : "boolean" - }, - "schedule" : { - "$ref" : "#/components/schemas/metabase.util.cron.CronScheduleString" - }, - "type" : { - "const" : "schedule" - } - }, - "required" : [ "type", "schedule" ], - "additionalProperties" : false - }, - "metabase.cache.api..cache-strategy.nocache" : { - "type" : "object", - "properties" : { - "type" : { - "const" : "nocache" - } - }, - "required" : [ "type" ] - }, - "metabase.cache.api..cache-strategy.oss" : { - "description" : "Schema for a caching strategy (OSS)", - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.base" - }, { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.nocache" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ttl" - } ] - } ] - }, - "metabase.cache.api..cache-strategy.ttl" : { - "type" : "object", - "properties" : { - "min_duration_ms" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "multiplier" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "const" : "ttl" - } - }, - "required" : [ "type", "multiplier", "min_duration_ms" ], - "additionalProperties" : false - }, - "metabase.cache.api.cache-strategy" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.ee" - }, { - "$ref" : "#/components/schemas/metabase.cache.api..cache-strategy.oss" + "required" : [ "type", "details" ] } ] }, - "metabase.channel.models.channel.Channel" : { - "description" : "Channel schema.", - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "description" : { - "type" : "string" - }, - "details" : { - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string" - }, - "type" : { - "type" : "string" - } - }, - "required" : [ "name", "type", "details" ] - }, - "metabase.channel.models.channel.ChannelTemplate" : { - "description" : "Channel Template schema.", - "oneOf" : [ { - "type" : "object", - "properties" : { - "channel_type" : { }, - "details" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplateEmailDetails" - } - }, - "required" : [ "channel_type", "details" ] - }, { } ] - }, - "metabase.channel.models.channel.ChannelTemplateEmailDetails" : { + "metabase.notification.models/NotificationSubscription" : { + "description" : "Schema for :model/NotificationSubscription.", "oneOf" : [ { "type" : "object", "properties" : { - "path" : { - "type" : "string" - }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] + "cron_schedule" : { + "type" : "null" }, - "subject" : { - "type" : "string" + "event_name" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "string" + } ] }, "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + "type" : "string", + "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] } }, - "required" : [ "type", "subject", "path" ] + "required" : [ "type", "event_name" ] }, { "type" : "object", "properties" : { - "body" : { + "cron_schedule" : { "type" : "string" }, - "recipient-type" : { - "enum" : [ "cc", "bcc", "cc", "bcc" ] - }, - "subject" : { - "type" : "string" + "event_name" : { + "type" : "null" }, "type" : { - "enum" : [ "email/handlebars-resource", "email/handlebars-text", "email/handlebars-resource", "email/handlebars-text" ] + "type" : "string", + "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] + }, + "ui_display_type" : { + "type" : "string", + "enum" : [ "cron/raw", "cron/builder" ] } }, - "required" : [ "type", "subject", "body" ] + "required" : [ "type", "cron_schedule" ] } ] }, - "metabase.lib.schema.common.non-blank-string" : { - "type" : "string", - "minLength" : 1 + "metabase.sync.schedules/ExpandedSchedulesMap" : { + "description" : "value must be a valid map of schedule maps for a DB.", + "type" : "object", + "properties" : { + "cache_field_values" : { + "$ref" : "#/components/schemas/metabase.util.cron~1ScheduleMap" + }, + "metadata_sync" : { + "$ref" : "#/components/schemas/metabase.util.cron~1ScheduleMap" + } + } }, - "metabase.lib.schema.expression.temporal.timezone-id" : { - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, { - "anyOf" : [ { - "type" : "string", - "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" - } ] - } ] + "metabase.timeline.api.timeline/include" : { + "type" : "string", + "enum" : [ "events" ] }, - "metabase.lib.schema.id.card" : { + "metabase.util.cron/CronHour" : { "type" : "integer", - "minimum" : 1 + "minimum" : 0, + "maximum" : 23 }, - "metabase.lib.schema.id.field" : { + "metabase.util.cron/CronMinute" : { "type" : "integer", - "minimum" : 1 + "minimum" : 0, + "maximum" : 59 }, - "metabase.lib.schema.literal..string.datetime" : { - "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" - }, { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" - } ] + "metabase.util.cron/CronScheduleString" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "metabase.lib.schema.literal..string.zone-offset" : { - "type" : "string", - "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" - }, - "metabase.lib.schema.metadata..column.has-field-values" : { - "type" : "string", - "enum" : [ "auto-list", "list", "none", "search" ] - }, - "metabase.lib.schema.temporal-bucketing.unit" : { - "type" : "string", - "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] - }, - "metabase.logger.api.time-unit" : { - "type" : "string", - "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] - }, - "metabase.notification.models.FullyHydratedNotification" : { - "description" : "Fully hydrated notification.", - "oneOf" : [ { - "oneOf" : [ { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "payload_id" : { - "type" : "null" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type", "payload" ] - }, { } ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "creator_id" : { - "type" : "integer" - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type", "payload" ] - }, { } ] - }, { - "oneOf" : [ { - "type" : "object", - "properties" : { - "creator" : { - "type" : "object", - "properties" : { } - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - } - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload" ] - }, { } ] - } ] - }, - "metabase.notification.models.Notification" : { - "oneOf" : [ { - "type" : "object", - "properties" : { - "payload_id" : { - "type" : "null" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - } - }, - "required" : [ "payload_type" ] - }, { - "type" : "object", - "properties" : { - "creator_id" : { - "type" : "integer" - }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - } - }, - "required" : [ "payload_type" ] - }, { } ] - }, - "metabase.notification.models.NotificationCard" : { - "description" : "Schema for :model/NotificationCard.", - "type" : "object", - "properties" : { - "card" : { - "type" : "object", - "properties" : { } - }, - "card_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "send_condition" : { - "type" : "string", - "enum" : [ "goal_below", "has_result", "goal_above" ] - }, - "send_once" : { - "type" : "boolean" - } - }, - "required" : [ "card_id" ] - }, - "metabase.notification.models.NotificationHandler" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean" - }, - "channel_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "channel_type" : { }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "template_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "channel_type" ] - }, - "metabase.notification.models.NotificationRecipient" : { - "description" : "Schema for :model/NotificationRecipient.", - "oneOf" : [ { - "type" : "object", - "properties" : { - "details" : { }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "type", "user_id" ] - }, { - "type" : "object", - "properties" : { - "details" : { }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { } - }, - "required" : [ "type", "permissions_group_id" ] - }, { - "type" : "object", - "properties" : { - "details" : { - "type" : "object", - "properties" : { - "value" : { } - }, - "required" : [ "value" ], - "additionalProperties" : false - }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { } - }, - "required" : [ "type", "details" ] - }, { - "type" : "object", - "properties" : { - "details" : { - "type" : "object", - "properties" : { - "is_optional" : { - "type" : "boolean" - }, - "pattern" : { - "type" : "string" - } - }, - "required" : [ "pattern" ], - "additionalProperties" : false - }, - "notification_handler_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "permissions_group_id" : { }, - "type" : { - "type" : "string", - "enum" : [ "notification-recipient/raw-value", "notification-recipient/user", "notification-recipient/template", "notification-recipient/group" ] - }, - "user_id" : { } - }, - "required" : [ "type", "details" ] - } ] - }, - "metabase.notification.models.NotificationSubscription" : { - "description" : "Schema for :model/NotificationSubscription.", - "oneOf" : [ { - "type" : "object", - "properties" : { - "cron_schedule" : { - "type" : "null" - }, - "event_name" : { - "anyOf" : [ { - "type" : "string" - }, { - "type" : "string" - } ] - }, - "type" : { - "type" : "string", - "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] - } - }, - "required" : [ "type", "event_name" ] - }, { - "type" : "object", - "properties" : { - "cron_schedule" : { - "type" : "string" - }, - "event_name" : { - "type" : "null" - }, - "type" : { - "type" : "string", - "enum" : [ "notification-subscription/cron", "notification-subscription/system-event" ] - }, - "ui_display_type" : { - "type" : "string", - "enum" : [ "cron/raw", "cron/builder" ] - } - }, - "required" : [ "type", "cron_schedule" ] - } ] - }, - "metabase.parameters.schema.keyword-or-non-blank-string" : { - "type" : "string", - "minLength" : 1 - }, - "metabase.parameters.schema.legacy-field-or-expression-reference" : { - "description" : "Schema for a valid legacy `:field` or `:expression` reference (possibly not yet normalized)." - }, - "metabase.parameters.schema.parameter" : { - "description" : "parameter must be a map with :id and :type keys", - "type" : "object", - "properties" : { - "mappings" : { }, - "sectionId" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "values_source_config" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.values-source-config" - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "name" : { - "type" : "string" - }, - "slug" : { - "type" : "string" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.keyword-or-non-blank-string" - }, - "temporal_units" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" - } - }, - "values_source_type" : { - "enum" : [ "static-list", "card", null ] - }, - "default" : { } - }, - "required" : [ "id", "type" ] - }, - "metabase.parameters.schema.parameter-mapping" : { - "description" : "parameter_mapping must be a map with :parameter_id and :target keys", - "type" : "object", - "properties" : { - "card_id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "parameter_id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" - }, - "target" : { } - }, - "required" : [ "parameter_id", "target" ] - }, - "metabase.parameters.schema.values-source-config" : { - "description" : "Schema for valid source_options within a Parameter", - "type" : "object", - "properties" : { - "card_id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.card" - }, - "label_field" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.legacy-field-or-expression-reference" - }, - "value_field" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.legacy-field-or-expression-reference" - }, - "values" : { } - } - }, - "metabase.queries.schema.card-type" : { - "type" : "string", - "enum" : [ "question", "metric", "model" ] - }, - "metabase.query-processor.schema.export-format" : { - "description" : "Schema for valid export formats for downloading query results.", - "type" : "string", - "enum" : [ "csv", "api", "xlsx", "json" ] - }, - "metabase.sync.schedules.ExpandedSchedulesMap" : { - "description" : "value must be a valid map of schedule maps for a DB.", - "type" : "object", - "properties" : { - "cache_field_values" : { - "$ref" : "#/components/schemas/metabase.util.cron.ScheduleMap" - }, - "metadata_sync" : { - "$ref" : "#/components/schemas/metabase.util.cron.ScheduleMap" - } - } - }, - "metabase.timeline.api.timeline.include" : { - "type" : "string", - "enum" : [ "events" ] - }, - "metabase.users.api.user-group-membership" : { - "description" : "Group Membership info of a User.\n In which :is_group_manager is only included if `advanced-permissions` is enabled.", - "type" : "object", - "properties" : { - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "is_group_manager" : { - "description" : "Only relevant if `advanced-permissions` is enabled. If it is, you should always include this key.", - "type" : "boolean" - } - }, - "required" : [ "id" ] - }, - "metabase.util.cron.CronHour" : { - "type" : "integer", - "minimum" : 0, - "maximum" : 23 - }, - "metabase.util.cron.CronMinute" : { - "type" : "integer", - "minimum" : 0, - "maximum" : 59 - }, - "metabase.util.cron.CronScheduleString" : { - "description" : "value must be a valid Quartz cron schedule string.", - "type" : "string", - "minLength" : 1 - }, - "metabase.util.cron.ScheduleMap" : { + "metabase.util.cron/ScheduleMap" : { "description" : "value must be a valid schedule map. See schema in metabase.util.cron for details.", "type" : "object", - "properties" : { - "schedule_day" : { - "type" : "string", - "enum" : [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ] - }, - "schedule_frame" : { - "type" : "string", - "enum" : [ "first", "mid", "last" ] - }, - "schedule_hour" : { - "$ref" : "#/components/schemas/metabase.util.cron.CronHour" - }, - "schedule_minute" : { - "$ref" : "#/components/schemas/metabase.util.cron.CronMinute" - }, - "schedule_type" : { - "type" : "string", - "enum" : [ "hourly", "daily", "weekly", "monthly" ] - } - }, - "required" : [ "schedule_type" ] - } - } - }, - "paths" : { - "/api/action/" : { - "get" : { - "summary" : "GET /api/action/", - "description" : "Returns actions that can be used for QueryActions. By default lists all viewable actions. Pass optional\n `?model-id=` to limit to actions on a particular model.", - "parameters" : [ { - "in" : "query", - "name" : "model-id", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - }, - "post" : { - "summary" : "POST /api/action/", - "description" : "Create a new action.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "visualization_settings" : { - "type" : "object" - }, - "response_handle" : { - "allOf" : [ { - "type" : "string" - }, { - "description" : "must be a valid json-query, something like '.item.title'" - } ] - }, - "dataset_query" : { - "type" : "object" - }, - "parameter_mappings" : { - "type" : "object" - }, - "name" : { - "type" : "string" - }, - "database_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "kind" : { - "description" : "Unsupported implicit action kind", - "type" : "string", - "enum" : [ "row/create", "row/update", "row/delete", "bulk/create", "bulk/update", "bulk/delete" ] - }, - "type" : { - "description" : "Unsupported action type", - "type" : "string", - "enum" : [ "http", "query", "implicit" ] - }, - "template" : { - "type" : "object", - "properties" : { - "body" : { - "type" : "string" - }, - "headers" : { - "type" : "string" - }, - "method" : { - "type" : "string", - "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] - }, - "parameter_mappings" : { - "type" : "object" - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "url" : { - "type" : "string" - } - }, - "required" : [ "method", "url" ], - "additionalProperties" : false - }, - "error_handle" : { - "allOf" : [ { - "type" : "string" - }, { - "description" : "must be a valid json-query, something like '.item.title'" - } ] - }, - "model_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "description" : { - "type" : "string" - } - }, - "required" : [ "name", "model_id" ] - } - } - } - }, - "tags" : [ "/api/action" ] - } - }, - "/api/action/public" : { - "get" : { - "summary" : "GET /api/action/public", - "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", - "parameters" : [ ], - "tags" : [ "/api/action" ] - } - }, - "/api/action/{action-id}" : { - "get" : { - "summary" : "GET /api/action/{action-id}", - "description" : "Fetch an Action.", - "parameters" : [ { - "in" : "path", - "name" : "action-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - }, - "delete" : { - "summary" : "DELETE /api/action/{action-id}", - "description" : "Delete an Action.", - "parameters" : [ { - "in" : "path", - "name" : "action-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "properties" : { + "schedule_day" : { + "type" : "string", + "enum" : [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ] }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - } - }, - "/api/action/{action-id}/execute" : { - "get" : { - "summary" : "GET /api/action/{action-id}/execute", - "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", - "parameters" : [ { - "in" : "path", - "name" : "action-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "schedule_frame" : { + "type" : "string", + "enum" : [ "first", "mid", "last" ] }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "parameters", - "required" : true, - "schema" : { - "type" : "string" + "schedule_hour" : { + "$ref" : "#/components/schemas/metabase.util.cron~1CronHour" }, - "description" : "value must be a valid JSON string." - } ], - "tags" : [ "/api/action" ] + "schedule_minute" : { + "$ref" : "#/components/schemas/metabase.util.cron~1CronMinute" + }, + "schedule_type" : { + "type" : "string", + "enum" : [ "hourly", "daily", "weekly", "monthly" ] + } + }, + "required" : [ "schedule_type" ] } - }, - "/api/action/{id}" : { - "put" : { - "summary" : "PUT /api/action/{id}", - "description" : "Update an Action.", + } + }, + "paths" : { + "/api/action/" : { + "get" : { + "summary" : "GET /api/action/", + "description" : "Returns actions that can be used for QueryActions. By default lists all viewable actions. Pass optional\n `?model-id=` to limit to actions on a particular model.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "model-id", + "required" : false, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], + "tags" : [ "/api/action" ] + }, + "post" : { + "summary" : "POST /api/action/", + "description" : "Create a new action.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { @@ -2166,8 +1096,7 @@ "type" : "object", "properties" : { "visualization_settings" : { - "type" : "object", - "properties" : { } + "type" : "object" }, "response_handle" : { "allOf" : [ { @@ -2177,19 +1106,14 @@ } ] }, "dataset_query" : { - "type" : "object", - "properties" : { } + "type" : "object" }, "parameter_mappings" : { - "type" : "object", - "properties" : { } + "type" : "object" }, "name" : { "type" : "string" }, - "archived" : { - "type" : "boolean" - }, "database_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", @@ -2214,235 +1138,86 @@ "headers" : { "type" : "string" }, - "method" : { - "type" : "string", - "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] - }, - "parameter_mappings" : { - "type" : "object" - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "url" : { - "type" : "string" - } - }, - "required" : [ "method", "url" ], - "additionalProperties" : false - }, - "error_handle" : { - "allOf" : [ { - "type" : "string" - }, { - "description" : "must be a valid json-query, something like '.item.title'" - } ] - }, - "model_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { } - } - }, - "description" : { - "type" : "string" - } - } - } - } - } - }, - "tags" : [ "/api/action" ] - } - }, - "/api/action/{id}/execute" : { - "post" : { - "summary" : "POST /api/action/{id}/execute", - "description" : "Execute the Action.\n\n `parameters` should be the mapped dashboard parameters with values.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "parameters" : { - "type" : "object", - "additionalProperties" : { } - } - }, - "optional" : true - } - } - } - }, - "tags" : [ "/api/action" ] - } - }, - "/api/action/{id}/public_link" : { - "post" : { - "summary" : "POST /api/action/{id}/public_link", - "description" : "Generate publicly-accessible links for this Action. Returns UUID to be used in public links. (If this\n Action has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - }, - "delete" : { - "summary" : "DELETE /api/action/{id}/public_link", - "description" : "Delete the publicly-accessible link to this Dashboard.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/action" ] - } - }, - "/api/activity/most_recently_viewed_dashboard" : { - "get" : { - "summary" : "GET /api/activity/most_recently_viewed_dashboard", - "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", - "parameters" : [ ], - "tags" : [ "/api/activity" ] - } - }, - "/api/activity/popular_items" : { - "get" : { - "summary" : "GET /api/activity/popular_items", - "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", - "parameters" : [ ], - "tags" : [ "/api/activity" ] - } - }, - "/api/activity/recent_views" : { - "get" : { - "summary" : "GET /api/activity/recent_views", - "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", - "parameters" : [ ], - "tags" : [ "/api/activity" ] - } - }, - "/api/activity/recents" : { - "get" : { - "summary" : "GET /api/activity/recents", - "description" : "Get a list of recent items the current user has been viewing most recently under the `:recents` key.\n Allows for filtering by context: views or selections", - "parameters" : [ { - "in" : "query", - "name" : "context", - "required" : true, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "selections", "views" ] - } - } - }, { - "in" : "query", - "name" : "include_metadata", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - } ], - "tags" : [ "/api/activity" ] - }, - "post" : { - "summary" : "POST /api/activity/recents", - "description" : "Adds a model to the list of recently selected items.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "context" : { - "type" : "string", - "enum" : [ "selection" ] + "method" : { + "type" : "string", + "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] + }, + "parameter_mappings" : { + "type" : "object" + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "url" : { + "type" : "string" + } + }, + "required" : [ "method", "url" ], + "additionalProperties" : false }, - "model" : { - "type" : "string", - "enum" : [ "card", "dataset", "metric", "dashboard", "table", "collection" ] + "error_handle" : { + "allOf" : [ { + "type" : "string" + }, { + "description" : "must be a valid json-query, something like '.item.title'" + } ] }, "model_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "description" : { + "type" : "string" } }, - "required" : [ "model", "model_id", "context" ] + "required" : [ "name", "model_id" ] } } } }, - "tags" : [ "/api/activity" ] + "tags" : [ "/api/action" ] } }, - "/api/alert/" : { + "/api/action/public" : { "get" : { - "summary" : "GET /api/alert/", - "description" : "Fetch alerts which the current user has created or will receive, or all alerts if the user is an admin.\n The optional `user_id` will return alerts created by the corresponding user, but is ignored for non-admin users.", + "summary" : "GET /api/action/public", + "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", + "parameters" : [ ], + "tags" : [ "/api/action" ] + } + }, + "/api/action/{action-id}" : { + "get" : { + "summary" : "GET /api/action/{action-id}", + "description" : "Fetch an Action.", "parameters" : [ { - "in" : "query", - "name" : "archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "user_id", - "required" : false, + "in" : "path", + "name" : "action-id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/alert" ] - } - }, - "/api/alert/{id}" : { - "get" : { - "summary" : "GET /api/alert/{id}", - "description" : "Fetch an alert by ID", + "tags" : [ "/api/action" ] + }, + "delete" : { + "summary" : "DELETE /api/action/{action-id}", + "description" : "Delete an Action.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "action-id", "required" : true, "schema" : { "type" : "integer", @@ -2450,81 +1225,38 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/alert" ] + "tags" : [ "/api/action" ] } }, - "/api/alert/{id}/subscription" : { - "delete" : { - "summary" : "DELETE /api/alert/{id}/subscription", - "description" : "For users to unsubscribe themselves from the given alert.", + "/api/action/{action-id}/execute" : { + "get" : { + "summary" : "GET /api/action/{action-id}/execute", + "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "action-id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "parameters", + "required" : true, + "schema" : { + "type" : "string" + }, + "description" : "value must be a valid JSON string." } ], - "tags" : [ "/api/alert" ] - } - }, - "/api/analytics/anonymous-stats" : { - "get" : { - "summary" : "GET /api/analytics/anonymous-stats", - "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", - "parameters" : [ ], - "tags" : [ "/api/analytics" ] - } - }, - "/api/api-key/" : { - "post" : { - "summary" : "POST /api/api-key/", - "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "group_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "group_id", "name" ] - } - } - } - }, - "tags" : [ "/api/api-key" ] - }, - "get" : { - "summary" : "GET /api/api-key/", - "description" : "Get a list of API keys with the default scope. Non-paginated.", - "parameters" : [ ], - "tags" : [ "/api/api-key" ] - } - }, - "/api/api-key/count" : { - "get" : { - "summary" : "GET /api/api-key/count", - "description" : "Get the count of API keys in the DB with the default scope.", - "parameters" : [ ], - "tags" : [ "/api/api-key" ] + "tags" : [ "/api/action" ] } }, - "/api/api-key/{id}" : { + "/api/action/{id}" : { "put" : { - "summary" : "PUT /api/api-key/{id}", - "description" : "Update an API key by changing its group and/or its name", + "summary" : "PUT /api/action/{id}", + "description" : "Update an Action.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2541,25 +1273,109 @@ "schema" : { "type" : "object", "properties" : { - "group_id" : { + "visualization_settings" : { + "type" : "object", + "properties" : { } + }, + "response_handle" : { + "allOf" : [ { + "type" : "string" + }, { + "description" : "must be a valid json-query, something like '.item.title'" + } ] + }, + "dataset_query" : { + "type" : "object", + "properties" : { } + }, + "parameter_mappings" : { + "type" : "object", + "properties" : { } + }, + "name" : { + "type" : "string" + }, + "archived" : { + "type" : "boolean" + }, + "database_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, - "name" : { + "kind" : { + "description" : "Unsupported implicit action kind", + "type" : "string", + "enum" : [ "row/create", "row/update", "row/delete", "bulk/create", "bulk/update", "bulk/delete" ] + }, + "type" : { + "description" : "Unsupported action type", "type" : "string", - "minLength" : 1 + "enum" : [ "http", "query", "implicit" ] + }, + "template" : { + "type" : "object", + "properties" : { + "body" : { + "type" : "string" + }, + "headers" : { + "type" : "string" + }, + "method" : { + "type" : "string", + "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] + }, + "parameter_mappings" : { + "type" : "object" + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "url" : { + "type" : "string" + } + }, + "required" : [ "method", "url" ], + "additionalProperties" : false + }, + "error_handle" : { + "allOf" : [ { + "type" : "string" + }, { + "description" : "must be a valid json-query, something like '.item.title'" + } ] + }, + "model_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "parameters" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { } + } + }, + "description" : { + "type" : "string" } } } } } }, - "tags" : [ "/api/api-key" ] - }, - "delete" : { - "summary" : "DELETE /api/api-key/{id}", - "description" : "Delete an ApiKey", + "tags" : [ "/api/action" ] + } + }, + "/api/action/{id}/execute" : { + "post" : { + "summary" : "POST /api/action/{id}/execute", + "description" : "Execute the Action.\n\n `parameters` should be the mapped dashboard parameters with values.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2570,13 +1386,29 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/api-key" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "parameters" : { + "type" : "object", + "additionalProperties" : { } + } + }, + "optional" : true + } + } + } + }, + "tags" : [ "/api/action" ] } }, - "/api/api-key/{id}/regenerate" : { - "put" : { - "summary" : "PUT /api/api-key/{id}/regenerate", - "description" : "Regenerate an API Key", + "/api/action/{id}/public_link" : { + "post" : { + "summary" : "POST /api/action/{id}/public_link", + "description" : "Generate publicly-accessible links for this Action. Returns UUID to be used in public links. (If this\n Action has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2587,13 +1419,11 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/api-key" ] - } - }, - "/api/automagic-dashboards/database/{id}/candidates" : { - "get" : { - "summary" : "GET /api/automagic-dashboards/database/{id}/candidates", - "description" : "Return a list of candidates for automagic dashboards ordered by interestingness.", + "tags" : [ "/api/action" ] + }, + "delete" : { + "summary" : "DELETE /api/action/{id}/public_link", + "description" : "Delete the publicly-accessible link to this Dashboard.", "parameters" : [ { "in" : "path", "name" : "id", @@ -2604,427 +1434,347 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/automagic-dashboards" ] + "tags" : [ "/api/action" ] } }, - "/api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}" : { + "/api/activity/most_recently_viewed_dashboard" : { "get" : { - "summary" : "GET /api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}", - "description" : "Return an automagic dashboard for an entity detail specified by `entity`\n with id `id` and a primary key of `indexed-value`.", - "parameters" : [ { - "in" : "path", - "name" : "model-index-id", - "required" : true, - "schema" : { - "type" : "integer" - } - }, { - "in" : "path", - "name" : "pk-id", - "required" : true, - "schema" : { - "type" : "integer" - } - } ], - "tags" : [ "/api/automagic-dashboards" ] + "summary" : "GET /api/activity/most_recently_viewed_dashboard", + "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", + "parameters" : [ ], + "tags" : [ "/api/activity" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}" : { + "/api/activity/popular_items" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}", - "description" : "Return an automagic dashboard for entity `entity` with id `id`.", - "parameters" : [ { - "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "const" : "all" - }, { - "type" : "integer", - "minimum" : 0 - } ] - } - } ], - "tags" : [ "/api/automagic-dashboards" ] + "summary" : "GET /api/activity/popular_items", + "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", + "parameters" : [ ], + "tags" : [ "/api/activity" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}" : { + "/api/activity/recent_views" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}", - "description" : "Return an automagic dashboard analyzing cell in automagic dashboard for entity `entity` defined by query\n `cell-query`.", - "parameters" : [ { - "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" - }, { - "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] - }, - "description" : "invalid show value" - } ], - "tags" : [ "/api/automagic-dashboards" ] + "summary" : "GET /api/activity/recent_views", + "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", + "parameters" : [ ], + "tags" : [ "/api/activity" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/activity/recents" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query`; compared with entity `comparison-entity` with id\n `comparison-entity-id-or-query.`.", + "summary" : "GET /api/activity/recents", + "description" : "Get a list of recent items the current user has been viewing most recently under the `:recents` key.\n Allows for filtering by context: views or selections", "parameters" : [ { - "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" - }, { - "in" : "path", - "name" : "comparison-entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] - }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" - }, { "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] - }, - "description" : "invalid show value" - } ], - "tags" : [ "/api/automagic-dashboards" ] - } - }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}" : { - "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}", - "description" : "Return an automagic dashboard analyzing cell in question with id `id` defined by query `cell-query` using\n dashboard-template `dashboard-template`.", - "parameters" : [ { - "in" : "path", - "name" : "entity", + "name" : "context", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "selections", "views" ] + } } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 + } ], + "tags" : [ "/api/activity" ] + }, + "post" : { + "summary" : "POST /api/activity/recents", + "description" : "Adds a model to the list of recently selected items.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "context" : { + "type" : "string", + "enum" : [ "selection" ] + }, + "model" : { + "type" : "string", + "enum" : [ "card", "dataset", "metric", "dashboard", "table", "collection" ] + }, + "model_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "model", "model_id", "context" ] + } + } + } + }, + "tags" : [ "/api/activity" ] + } + }, + "/api/alert/" : { + "get" : { + "summary" : "GET /api/alert/", + "description" : "Fetch alerts which the current user has created or will receive, or all alerts if the user is an admin.\n The optional `user_id` will return alerts created by the corresponding user, but is ignored for non-admin users.", + "parameters" : [ { + "in" : "query", + "name" : "archived", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } - }, { - "in" : "path", - "name" : "dashboard-template", - "required" : true, - "schema" : { }, - "description" : "invalid value for dashboard template name" - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" }, { "in" : "query", - "name" : "show", + "name" : "user_id", "required" : false, "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] + "type" : "integer", + "minimum" : 1 }, - "description" : "invalid show value" + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/automagic-dashboards" ] + "tags" : [ "/api/alert" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/alert/{id}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query` using dashboard-template `dashboard-template`; compared with entity\n `comparison-entity` with id `comparison-entity-id-or-query.`.", + "summary" : "GET /api/alert/{id}", + "description" : "Fetch an alert by ID", "parameters" : [ { "in" : "path", - "name" : "entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } - }, { - "in" : "path", - "name" : "dashboard-template", - "required" : true, - "schema" : { }, - "description" : "invalid value for dashboard template name" - }, { - "in" : "path", - "name" : "cell-query", - "required" : true, - "schema" : { }, - "description" : "form-encoded base-64-encoded JSON" - }, { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/alert" ] + } + }, + "/api/alert/{id}/subscription" : { + "delete" : { + "summary" : "DELETE /api/alert/{id}/subscription", + "description" : "For users to unsubscribe themselves from the given alert.", + "parameters" : [ { "in" : "path", - "name" : "comparison-entity", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] - }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" - }, { - "in" : "query", - "name" : "show", - "required" : false, - "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] + "type" : "integer", + "minimum" : 1 }, - "description" : "invalid show value" + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/automagic-dashboards" ] + "tags" : [ "/api/alert" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/api-key/" : { + "post" : { + "summary" : "POST /api/api-key/", + "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "group_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "group_id", "name" ] + } + } + } + }, + "tags" : [ "/api/api-key" ] + }, "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` compared with entity `comparison-entity`\n with id `comparison-entity-id-or-query.`", + "summary" : "GET /api/api-key/", + "description" : "Get a list of API keys with the default scope. Non-paginated.", + "parameters" : [ ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/api-key/count" : { + "get" : { + "summary" : "GET /api/api-key/count", + "description" : "Get the count of API keys in the DB with the default scope.", + "parameters" : [ ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/api-key/{id}" : { + "put" : { + "summary" : "PUT /api/api-key/{id}", + "description" : "Update an API key by changing its group and/or its name", "parameters" : [ { "in" : "path", - "name" : "entity-id-or-query", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "group_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + } + } + } } - }, { + }, + "tags" : [ "/api/api-key" ] + }, + "delete" : { + "summary" : "DELETE /api/api-key/{id}", + "description" : "Delete an ApiKey", + "parameters" : [ { "in" : "path", - "name" : "entity", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/api-key/{id}/regenerate" : { + "put" : { + "summary" : "PUT /api/api-key/{id}/regenerate", + "description" : "Regenerate an API Key", + "parameters" : [ { "in" : "path", - "name" : "comparison-entity", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] + "type" : "integer", + "minimum" : 1 }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" - }, { - "in" : "query", - "name" : "show", - "required" : false, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/api-key" ] + } + }, + "/api/automagic-dashboards/database/{id}/candidates" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/database/{id}/candidates", + "description" : "Return a list of candidates for automagic dashboards ordered by interestingness.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] - }, { - "type" : "integer", - "minimum" : 0 - } ] + "type" : "integer", + "minimum" : 1 }, - "description" : "invalid show value" + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata" : { + "/api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata", - "description" : "Return all metadata for an automagic dashboard for entity `entity` with id `id`.", + "summary" : "GET /api/automagic-dashboards/model_index/{model-index-id}/primary_key/{pk-id}", + "description" : "Return an automagic dashboard for an entity detail specified by `entity`\n with id `id` and a primary key of `indexed-value`.", "parameters" : [ { "in" : "path", - "name" : "entity", + "name" : "model-index-id", "required" : true, "schema" : { - "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] + "type" : "integer" + } + }, { + "in" : "path", + "name" : "pk-id", + "required" : true, + "schema" : { + "type" : "integer" } } ], "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}", - "description" : "Return an automagic dashboard for entity `entity` with id `id` using dashboard-template `dashboard-template`.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}", + "description" : "Return an automagic dashboard for entity `entity` with id `id`.", "parameters" : [ { "in" : "path", "name" : "entity", "required" : true, "schema" : { "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] - } - }, { - "in" : "path", - "name" : "entity-id-or-query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } - }, { - "in" : "path", - "name" : "dashboard-template", - "required" : true, - "schema" : { }, - "description" : "invalid value for dashboard template name" }, { "in" : "query", "name" : "show", "required" : false, "schema" : { "anyOf" : [ { - "type" : "string", - "enum" : [ "all" ] + "const" : "all" }, { "type" : "integer", "minimum" : 0 } ] - }, - "description" : "invalid show value" + } } ], "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}" : { "get" : { - "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", - "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` using dashboard-template\n `dashboard-template`; compared with entity `comparison-entity` with id `comparison-entity-id-or-query.`.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}", + "description" : "Return an automagic dashboard analyzing cell in automagic dashboard for entity `entity` defined by query\n `cell-query`.", "parameters" : [ { "in" : "path", "name" : "entity", "required" : true, "schema" : { "type" : "string", - "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { "in" : "path", "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "path", - "name" : "prefix", - "required" : true, - "schema" : { } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", - "name" : "dashboard-template", + "name" : "cell-query", "required" : true, "schema" : { }, - "description" : "invalid value for dashboard template name" - }, { - "in" : "path", - "name" : "comparison-entity", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "segment", "adhoc", "table" ] - }, - "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + "description" : "form-encoded base-64-encoded JSON" }, { "in" : "query", "name" : "show", @@ -3043,650 +1793,407 @@ "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/bookmark/" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { "get" : { - "summary" : "GET /api/bookmark/", - "description" : "Fetch all bookmarks for the user", - "parameters" : [ ], - "tags" : [ "/api/bookmark" ] - } - }, - "/api/bookmark/ordering" : { - "put" : { - "summary" : "PUT /api/bookmark/ordering", - "description" : "Sets the order of bookmarks for user.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "orderings" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "item_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "type" : "string", - "enum" : [ "card", "dashboard", "collection" ] - } - }, - "required" : [ "type", "item_id" ] - } - } - }, - "required" : [ "orderings" ] - } - } - } - }, - "tags" : [ "/api/bookmark" ] - } - }, - "/api/bookmark/{model}/{id}" : { - "post" : { - "summary" : "POST /api/bookmark/{model}/{id}", - "description" : "Create a new bookmark for user.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query`; compared with entity `comparison-entity` with id\n `comparison-entity-id-or-query.`.", "parameters" : [ { "in" : "path", - "name" : "model", + "name" : "entity", "required" : true, "schema" : { "type" : "string", - "enum" : [ "card", "dashboard", "collection" ] + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { "in" : "path", - "name" : "id", + "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/bookmark" ] - }, - "delete" : { - "summary" : "DELETE /api/bookmark/{model}/{id}", - "description" : "Delete a bookmark. Will delete a bookmark assigned to the user making the request by model and id.", - "parameters" : [ { + "description" : "value must be a non-blank string." + }, { "in" : "path", - "name" : "model", + "name" : "cell-query", "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "card", "dashboard", "collection" ] - } + "schema" : { }, + "description" : "form-encoded base-64-encoded JSON" }, { "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/bookmark" ] - } - }, - "/api/bug-reporting/connection-pool-details" : { - "get" : { - "summary" : "GET /api/bug-reporting/connection-pool-details", - "description" : "Returns database connection pool info for the current Metabase instance.", - "parameters" : [ ], - "tags" : [ "/api/bug-reporting" ] - } - }, - "/api/bug-reporting/details" : { - "get" : { - "summary" : "GET /api/bug-reporting/details", - "description" : "Returns version and system information relevant to filing a bug report against Metabase.", - "parameters" : [ ], - "tags" : [ "/api/bug-reporting" ] - } - }, - "/api/cache/" : { - "get" : { - "summary" : "GET /api/cache/", - "description" : "Return cache configuration.", - "parameters" : [ { - "in" : "query", - "name" : "model", + "name" : "comparison-entity", "required" : true, "schema" : { - "default" : [ "root" ], - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "root", "database", "dashboard", "question" ] - } - }, - "description" : "Type of model" - }, { - "in" : "query", - "name" : "collection", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "Collection id to filter results. Returns everything if not supplied." - }, { - "in" : "query", - "name" : "id", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "Model id to get configuration for." - } ], - "tags" : [ "/api/cache" ] - }, - "put" : { - "summary" : "PUT /api/cache/", - "description" : "Store cache configuration.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "model" : { - "type" : "string", - "enum" : [ "root", "database", "dashboard", "question" ] - }, - "model_id" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "strategy" : { - "$ref" : "#/components/schemas/metabase.cache.api.cache-strategy" - } - }, - "required" : [ "model", "model_id", "strategy" ] - } - } - } - }, - "tags" : [ "/api/cache" ] - }, - "delete" : { - "summary" : "DELETE /api/cache/", - "description" : "Delete cache configurations.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "model" : { - "type" : "string", - "enum" : [ "root", "database", "dashboard", "question" ] - }, - "model_id" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - } - } - }, - "required" : [ "model", "model_id" ] - } - } - } - }, - "tags" : [ "/api/cache" ] - } - }, - "/api/cache/invalidate" : { - "post" : { - "summary" : "POST /api/cache/invalidate", - "description" : "Invalidate cache entries.\n\n Use it like `/api/cache/invalidate?database=1&dashboard=15` (any number of database/dashboard/question can be\n supplied).\n\n `&include=overrides` controls whenever you want to invalidate cache for a specific cache configuration without\n touching all nested configurations, or you want your invalidation to trickle down to every card.", - "parameters" : [ { - "in" : "query", - "name" : "include", - "required" : false, - "schema" : { - "const" : "overrides" + "type" : "string", + "enum" : [ "segment", "adhoc", "table" ] }, - "description" : "All cache configuration overrides should invalidate cache too" + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" }, { "in" : "query", - "name" : "database", + "name" : "show", "required" : false, "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { "type" : "integer", "minimum" : 0 - } + } ] }, - "description" : "A list of database ids" + "description" : "invalid show value" + } ], + "tags" : [ "/api/automagic-dashboards" ] + } + }, + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}", + "description" : "Return an automagic dashboard analyzing cell in question with id `id` defined by query `cell-query` using\n dashboard-template `dashboard-template`.", + "parameters" : [ { + "in" : "path", + "name" : "entity", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] + } }, { - "in" : "query", - "name" : "dashboard", - "required" : false, + "in" : "path", + "name" : "entity-id-or-query", + "required" : true, "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "A list of dashboard ids" + "description" : "value must be a non-blank string." + }, { + "in" : "path", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", + "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "path", + "name" : "cell-query", + "required" : true, + "schema" : { }, + "description" : "form-encoded base-64-encoded JSON" }, { "in" : "query", - "name" : "question", + "name" : "show", "required" : false, "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater or equal to than zero.", + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { "type" : "integer", "minimum" : 0 - } + } ] }, - "description" : "A list of question ids" + "description" : "invalid show value" } ], - "tags" : [ "/api/cache" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { "get" : { - "summary" : "GET /api/card/", - "description" : "Get all the Cards. Option filter param `f` can be used to change the set of Cards that are returned; default is\n `all`, but other options include `mine`, `bookmarked`, `database`, `table`, `using_model`, `using_segment`, and\n `archived`. See corresponding implementation functions above for the specific behavior of each filter\n option. :card_index:", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/cell/{cell-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`\n with id `id` defined by query `cell-query` using dashboard-template `dashboard-template`; compared with entity\n `comparison-entity` with id `comparison-entity-id-or-query.`.", "parameters" : [ { - "in" : "query", - "name" : "f", + "in" : "path", + "name" : "entity", "required" : true, "schema" : { - "default" : "all", "type" : "string", - "enum" : [ "archived", "table", "using_model", "bookmarked", "using_segment", "all", "mine", "database" ] + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { - "in" : "query", - "name" : "model_id", - "required" : false, + "in" : "path", + "name" : "entity-id-or-query", + "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - }, - "post" : { - "summary" : "POST /api/card/", - "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "visualization_settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "dashboard_tab_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "entity_id" : { - "type" : "string", - "minLength" : 1 - }, - "dataset_query" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter-mapping" - } - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "result_metadata" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultsMetadata" - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "type" : { - "$ref" : "#/components/schemas/metabase.queries.schema.card-type" - }, - "display" : { - "type" : "string", - "minLength" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "dashboard_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "name", "dataset_query", "display", "visualization_settings" ] - } - } - } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/collections" : { - "post" : { - "summary" : "POST /api/card/collections", - "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "card_ids" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "card_ids" ] - } - } - } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/embeddable" : { - "get" : { - "summary" : "GET /api/card/embeddable", - "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", - "parameters" : [ ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/pivot/{card-id}/query" : { - "post" : { - "summary" : "POST /api/card/pivot/{card-id}/query", - "description" : "Run the query associated with a Card.", - "parameters" : [ { + "description" : "value must be a non-blank string." + }, { "in" : "path", - "name" : "card-id", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", + "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "path", + "name" : "cell-query", + "required" : true, + "schema" : { }, + "description" : "form-encoded base-64-encoded JSON" + }, { + "in" : "path", + "name" : "comparison-entity", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "string", + "enum" : [ "segment", "adhoc", "table" ] + }, + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + }, { + "in" : "query", + "name" : "show", + "required" : false, + "schema" : { + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] }, - "description" : "value must be an integer greater than zero." + "description" : "invalid show value" } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "ignore_cache" : { - "type" : "boolean" - } - } - } - } - } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/public" : { - "get" : { - "summary" : "GET /api/card/public", - "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", - "parameters" : [ ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/params/{param-key}/search/{query}" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { "get" : { - "summary" : "GET /api/card/{card-id}/params/{param-key}/search/{query}", - "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`.\n\n ;; fetch values for Card 1 parameter 'abc' that contain 'Orange';\n GET /api/card/1/params/abc/search/Orange\n\n Currently limited to first 1000 results.", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` compared with entity `comparison-entity`\n with id `comparison-entity-id-or-query.`", "parameters" : [ { "in" : "path", - "name" : "card-id", + "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." }, { "in" : "path", - "name" : "param-key", + "name" : "entity", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } }, { "in" : "path", - "name" : "query", + "name" : "comparison-entity", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 - } + "enum" : [ "segment", "adhoc", "table" ] + }, + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + }, { + "in" : "query", + "name" : "show", + "required" : false, + "schema" : { + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] + }, + "description" : "invalid show value" } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/params/{param-key}/values" : { + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata" : { "get" : { - "summary" : "GET /api/card/{card-id}/params/{param-key}/values", - "description" : "Fetch possible values of the parameter whose ID is `:param-key`.\n\n ;; fetch values for Card 1 parameter 'abc' that are possible\n GET /api/card/1/params/abc/values", + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/query_metadata", + "description" : "Return all metadata for an automagic dashboard for entity `entity` with id `id`.", "parameters" : [ { "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "param-key", + "name" : "entity", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/public_link" : { - "post" : { - "summary" : "POST /api/card/{card-id}/public_link", - "description" : "Generate publicly-accessible links for this Card. Returns UUID to be used in public links. (If this Card has\n already been shared, it will return the existing public link rather than creating a new one.) Public sharing must\n be enabled.", + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}", + "description" : "Return an automagic dashboard for entity `entity` with id `id` using dashboard-template `dashboard-template`.", "parameters" : [ { "in" : "path", - "name" : "card-id", + "name" : "entity", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "string", + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] + } + }, { + "in" : "path", + "name" : "entity-id-or-query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - }, - "delete" : { - "summary" : "DELETE /api/card/{card-id}/public_link", - "description" : "Delete the publicly-accessible link to this Card.", - "parameters" : [ { + "description" : "value must be a non-blank string." + }, { "in" : "path", - "name" : "card-id", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "query", + "name" : "show", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] }, - "description" : "value must be an integer greater than zero." + "description" : "invalid show value" } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/automagic-dashboards" ] } }, - "/api/card/{card-id}/query" : { - "post" : { - "summary" : "POST /api/card/{card-id}/query", - "description" : "Run the query associated with a Card.", + "/api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}" : { + "get" : { + "summary" : "GET /api/automagic-dashboards/{entity}/{entity-id-or-query}/rule/{prefix}/{dashboard-template}/compare/{comparison-entity}/{comparison-entity-id-or-query}", + "description" : "Return an automagic comparison dashboard for entity `entity` with id `id` using dashboard-template\n `dashboard-template`; compared with entity `comparison-entity` with id `comparison-entity-id-or-query.`.", "parameters" : [ { "in" : "path", - "name" : "card-id", + "name" : "entity", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "collection_preview" : { - "type" : "boolean" - }, - "dashboard_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "ignore_cache" : { - "default" : false, - "type" : "boolean" - } - }, - "required" : [ "ignore_cache" ] - } - } + "type" : "string", + "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "metric", "model" ] } - }, - "tags" : [ "/api/card" ] - } - }, - "/api/card/{card-id}/query/{export-format}" : { - "post" : { - "summary" : "POST /api/card/{card-id}/query/{export-format}", - "description" : "Run the query associated with a Card, and return its results as a file in the specified format.\n\n `parameters`, `pivot-results?` and `format-rows?` should be passed as application/x-www-form-urlencoded form content\n or json in the body. This is because this endpoint is normally used to power 'Download Results' buttons that use\n HTML `form` actions).", - "parameters" : [ { + }, { "in" : "path", - "name" : "card-id", + "name" : "entity-id-or-query", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." }, { "in" : "path", - "name" : "export-format", + "name" : "prefix", + "required" : true, + "schema" : { } + }, { + "in" : "path", + "name" : "dashboard-template", + "required" : true, + "schema" : { }, + "description" : "invalid value for dashboard template name" + }, { + "in" : "path", + "name" : "comparison-entity", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" - } + "type" : "string", + "enum" : [ "segment", "adhoc", "table" ] + }, + "description" : "Invalid comparison entity type. Can only be one of \"table\", \"segment\", or \"adhoc\"" + }, { + "in" : "query", + "name" : "show", + "required" : false, + "schema" : { + "anyOf" : [ { + "type" : "string", + "enum" : [ "all" ] + }, { + "type" : "integer", + "minimum" : 0 + } ] + }, + "description" : "invalid show value" } ], + "tags" : [ "/api/automagic-dashboards" ] + } + }, + "/api/bookmark/" : { + "get" : { + "summary" : "GET /api/bookmark/", + "description" : "Fetch all bookmarks for the user", + "parameters" : [ ], + "tags" : [ "/api/bookmark" ] + } + }, + "/api/bookmark/ordering" : { + "put" : { + "summary" : "PUT /api/bookmark/ordering", + "description" : "Sets the order of bookmarks for user.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "format_rows" : { - "default" : false, - "type" : "boolean" - }, - "parameters" : { + "orderings" : { "type" : "array", "items" : { "type" : "object", - "additionalProperties" : { } + "properties" : { + "item_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "type" : "string", + "enum" : [ "card", "dashboard", "collection" ] + } + }, + "required" : [ "type", "item_id" ] } - }, - "pivot_results" : { - "default" : false, - "type" : "boolean" } }, - "required" : [ "format_rows", "pivot_results" ] + "required" : [ "orderings" ] } } } }, - "tags" : [ "/api/card" ] + "tags" : [ "/api/bookmark" ] } }, - "/api/card/{id}" : { - "get" : { - "summary" : "GET /api/card/{id}", - "description" : "Get `Card` with ID.", + "/api/bookmark/{model}/{id}" : { + "post" : { + "summary" : "POST /api/bookmark/{model}/{id}", + "description" : "Create a new bookmark for user.", "parameters" : [ { + "in" : "path", + "name" : "model", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "card", "dashboard", "collection" ] + } + }, { "in" : "path", "name" : "id", "required" : true, @@ -3695,28 +2202,21 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "ignore_view", - "required" : false, - "schema" : { - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "context", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "collection" ] - } } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/bookmark" ] }, - "put" : { - "summary" : "PUT /api/card/{id}", - "description" : "Update a `Card`.", + "delete" : { + "summary" : "DELETE /api/bookmark/{model}/{id}", + "description" : "Delete a bookmark. Will delete a bookmark assigned to the user making the request by model and id.", "parameters" : [ { + "in" : "path", + "name" : "model", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "card", "dashboard", "collection" ] + } + }, { "in" : "path", "name" : "id", "required" : true, @@ -3725,269 +2225,192 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/bookmark" ] + } + }, + "/api/cache/" : { + "get" : { + "summary" : "GET /api/cache/", + "description" : "Return cache configuration.", + "parameters" : [ { + "in" : "query", + "name" : "model", + "required" : true, + "schema" : { + "default" : [ "root" ], + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "root", "database", "dashboard", "question" ] + } + }, + "description" : "Type of model" }, { "in" : "query", - "name" : "delete_old_dashcards", + "name" : "collection", "required" : false, "schema" : { - "type" : "boolean" - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "Collection id to filter results. Returns everything if not supplied." + }, { + "in" : "query", + "name" : "id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "Model id to get configuration for." } ], + "tags" : [ "/api/cache" ] + }, + "put" : { + "summary" : "PUT /api/cache/", + "description" : "Store cache configuration.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "enable_embedding" : { - "type" : "boolean" - }, - "visualization_settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "dashboard_tab_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "collection_preview" : { - "type" : "boolean" - }, - "dataset_query" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "name" : { + "model" : { "type" : "string", - "minLength" : 1 - }, - "archived" : { - "type" : "boolean" - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "embedding_params" : { - "type" : "object", - "additionalProperties" : { - "type" : "string", - "enum" : [ "disabled", "enabled", "locked" ] - }, - "description" : "value must be a valid embedding params map." - }, - "result_metadata" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultsMetadata" - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "enum" : [ "root", "database", "dashboard", "question" ] }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", + "model_id" : { + "description" : "value must be an integer greater or equal to than zero.", "type" : "integer", - "minimum" : 1 - }, - "type" : { - "$ref" : "#/components/schemas/metabase.queries.schema.card-type" + "minimum" : 0 }, - "display" : { + "strategy" : { + "$ref" : "#/components/schemas/metabase.api.cache~1cache-strategy" + } + }, + "required" : [ "model", "model_id", "strategy" ] + } + } + } + }, + "tags" : [ "/api/cache" ] + }, + "delete" : { + "summary" : "DELETE /api/cache/", + "description" : "Delete cache configurations.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "model" : { "type" : "string", - "minLength" : 1 + "enum" : [ "root", "database", "dashboard", "question" ] }, - "parameters" : { + "model_id" : { "type" : "array", "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 } - }, - "description" : { - "type" : "string" - }, - "dashboard_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 } - } + }, + "required" : [ "model", "model_id" ] } } } }, - "tags" : [ "/api/card" ] - }, - "delete" : { - "summary" : "DELETE /api/card/{id}", - "description" : "Hard delete a Card. To soft delete, use `PUT /api/card/:id`", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/cache" ] } }, - "/api/card/{id}/copy" : { + "/api/cache/invalidate" : { "post" : { - "summary" : "POST /api/card/{id}/copy", - "description" : "Copy a `Card`, with the new name 'Copy of _name_'", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/{id}/dashboards" : { - "get" : { - "summary" : "GET /api/card/{id}/dashboards", - "description" : "Get a list of `{:name ... :id ...}` pairs for all the dashboards this card appears in.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/{id}/params/{param-key}/remapping" : { - "get" : { - "summary" : "GET /api/card/{id}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for a given value of the parameter with ID `:param-key`.\n\n ;; fetch the remapped value for Card 1 parameter 'abc' for value 100\n GET /api/card/1/params/abc/remapping?value=100", + "summary" : "POST /api/cache/invalidate", + "description" : "Invalidate cache entries.\n\n Use it like `/api/cache/invalidate?database=1&dashboard=15` (any number of database/dashboard/question can be\n supplied).\n\n `&include=overrides` controls whenever you want to invalidate cache for a specific cache configuration without\n touching all nested configurations, or you want your invalidation to trickle down to every card.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "include", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "const" : "overrides" }, - "description" : "value must be an integer greater than zero." + "description" : "All cache configuration overrides should invalidate cache too" }, { - "in" : "path", - "name" : "param-key", - "required" : true, + "in" : "query", + "name" : "database", + "required" : false, "schema" : { - "type" : "string" - } + "type" : "array", + "items" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + } + }, + "description" : "A list of database ids" }, { "in" : "query", - "name" : "value", - "required" : true, + "name" : "dashboard", + "required" : false, "schema" : { - "type" : "string" - } - } ], - "tags" : [ "/api/card" ] - } - }, - "/api/card/{id}/query_metadata" : { - "get" : { - "summary" : "GET /api/card/{id}/query_metadata", - "description" : "Get all of the required query metadata for a card.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "type" : "array", + "items" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + } + }, + "description" : "A list of dashboard ids" + }, { + "in" : "query", + "name" : "question", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "array", + "items" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + } }, - "description" : "value must be an integer greater than zero." + "description" : "A list of question ids" } ], - "tags" : [ "/api/card" ] + "tags" : [ "/api/cache" ] } }, - "/api/card/{id}/series" : { + "/api/card/" : { "get" : { - "summary" : "GET /api/card/{id}/series", - "description" : "Fetches a list of compatible series with the card with id `card_id`.\n\n - `last_cursor` with value is the id of the last card from the previous page to fetch the next page.\n - `query` to search card by name.\n - `exclude_ids` to filter out a list of card ids", + "summary" : "GET /api/card/", + "description" : "Get all the Cards. Option filter param `f` can be used to change the set of Cards that are returned; default is\n `all`, but other options include `mine`, `bookmarked`, `database`, `table`, `using_model`, `using_metric`,\n `using_segment`, and `archived`. See corresponding implementation functions above for the specific behavior\n of each filter option. :card_index:", "parameters" : [ { - "in" : "path", - "name" : "id", + "in" : "query", + "name" : "f", "required" : true, "schema" : { - "type" : "integer" + "default" : "all", + "type" : "string", + "enum" : [ "archived", "table", "using_model", "bookmarked", "using_segment", "all", "mine", "using_metric", "database" ] } }, { "in" : "query", - "name" : "last_cursor", + "name" : "model_id", "required" : false, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "query", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "exclude_ids", - "required" : false, - "schema" : { } } ], "tags" : [ "/api/card" ] - } - }, - "/api/cards/dashboards" : { - "post" : { - "summary" : "POST /api/cards/dashboards", - "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "card_ids" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - }, - "required" : [ "card_ids" ] - } - } - } - }, - "tags" : [ "/api/cards" ] - } - }, - "/api/cards/move" : { + }, "post" : { - "summary" : "POST /api/cards/move", - "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", + "summary" : "POST /api/card/", + "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", "parameters" : [ ], "requestBody" : { "content" : { @@ -3995,142 +2418,229 @@ "schema" : { "type" : "object", "properties" : { - "card_ids" : { + "visualization_settings" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "dashboard_tab_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "entity_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "dataset_query" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "parameter_mappings" : { "type" : "array", "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "description" : "parameter_mapping must be a map with :parameter_id and :target keys", + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] } }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "result_metadata" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultsMetadata" + }, "collection_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "$ref" : "#/components/schemas/metabase.api.card~1card-type" + }, + "display" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, "dashboard_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 } }, - "required" : [ "card_ids" ] + "required" : [ "name", "dataset_query", "display", "visualization_settings" ] } } } }, - "tags" : [ "/api/cards" ] + "tags" : [ "/api/card" ] } }, - "/api/channel/" : { - "get" : { - "summary" : "GET /api/channel/", - "description" : "Get all channels", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "include_inactive" : { - "type" : "boolean", - "default" : false - } - } - } - } - } - }, - "tags" : [ "/api/channel" ] - }, + "/api/card/collections" : { "post" : { - "summary" : "POST /api/channel/", - "description" : "Create a channel", + "summary" : "POST /api/card/collections", + "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { - "type" : "object", - "properties" : { - "active" : { - "type" : "boolean", - "default" : true - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "details" : { - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 + "type" : "object", + "properties" : { + "card_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } }, - "type" : { - "description" : "Must be a namespaced channel. E.g: channel/http" + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } }, - "required" : [ "name", "type", "details" ] + "required" : [ "card_ids" ] } } } }, - "tags" : [ "/api/channel" ] + "tags" : [ "/api/card" ] } }, - "/api/channel/test" : { + "/api/card/embeddable" : { + "get" : { + "summary" : "GET /api/card/embeddable", + "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", + "parameters" : [ ], + "tags" : [ "/api/card" ] + } + }, + "/api/card/from-csv" : { "post" : { - "summary" : "POST /api/channel/test", - "description" : "Test a channel connection", + "summary" : "POST /api/card/from-csv", + "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", "parameters" : [ ], "requestBody" : { "content" : { - "application/json" : { + "multipart/form-data" : { "schema" : { "type" : "object", "properties" : { - "details" : { - "type" : "object", - "properties" : { } + "collection_id" : { + "type" : "integer", + "minimum" : 1 }, - "type" : { - "description" : "Must be a namespaced channel. E.g: channel/http" + "file" : { + "type" : "object", + "properties" : { + "filename" : { + "type" : "string" + }, + "tempfile" : { } + }, + "required" : [ "filename", "tempfile" ] } }, - "required" : [ "type", "details" ] + "required" : [ "file" ] } } } }, - "tags" : [ "/api/channel" ] + "tags" : [ "/api/card" ] } }, - "/api/channel/{id}" : { - "get" : { - "summary" : "GET /api/channel/{id}", - "description" : "Get a channel", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/channel" ] - }, - "put" : { - "summary" : "PUT /api/channel/{id}", - "description" : "Update a channel", + "/api/card/pivot/{card-id}/query" : { + "post" : { + "summary" : "POST /api/card/pivot/{card-id}/query", + "description" : "Run the query associated with a Card.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "card-id", "required" : true, "schema" : { "type" : "integer", @@ -4144,167 +2654,128 @@ "schema" : { "type" : "object", "properties" : { - "active" : { + "ignore_cache" : { "type" : "boolean" - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "details" : { - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "type" : { - "description" : "Must be a namespaced channel. E.g: channel/http" } } } } } }, - "tags" : [ "/api/channel" ] + "tags" : [ "/api/card" ] } }, - "/api/cloud-migration/" : { - "post" : { - "summary" : "POST /api/cloud-migration/", - "description" : "Initiate a new cloud migration.", - "parameters" : [ ], - "tags" : [ "/api/cloud-migration" ] - }, + "/api/card/public" : { "get" : { - "summary" : "GET /api/cloud-migration/", - "description" : "Get the latest cloud migration, if any.", - "parameters" : [ ], - "tags" : [ "/api/cloud-migration" ] - } - }, - "/api/cloud-migration/cancel" : { - "put" : { - "summary" : "PUT /api/cloud-migration/cancel", - "description" : "Cancel any ongoing cloud migrations, if any.", + "summary" : "GET /api/card/public", + "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], - "tags" : [ "/api/cloud-migration" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/" : { + "/api/card/{card-id}/params/{param-key}/search/{query}" : { "get" : { - "summary" : "GET /api/collection/", - "description" : "Fetch a list of all Collections that the current user has read permissions for (`:can_write` is returned as an\n additional property of each Collection so you can tell which of these you have write permissions for.)\n\n By default, this returns non-archived Collections, but instead you can show archived ones by passing\n `?archived=true`.\n\n By default, admin users will see all collections. To hide other user's collections pass in\n `?exclude-other-user-collections=true`.\n\n If personal-only is `true`, then return only personal collections where `personal_owner_id` is not `nil`.", + "summary" : "GET /api/card/{card-id}/params/{param-key}/search/{query}", + "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`.\n\n ;; fetch values for Card 1 parameter 'abc' that contain 'Orange';\n GET /api/card/1/params/abc/search/Orange\n\n Currently limited to first 1000 results.", "parameters" : [ { - "in" : "query", - "name" : "archived", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "exclude-other-user-collections", - "required" : false, + "in" : "path", + "name" : "param-key", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { - "in" : "query", - "name" : "namespace", - "required" : false, + "in" : "path", + "name" : "query", + "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/card" ] + } + }, + "/api/card/{card-id}/params/{param-key}/values" : { + "get" : { + "summary" : "GET /api/card/{card-id}/params/{param-key}/values", + "description" : "Fetch possible values of the parameter whose ID is `:param-key`.\n\n ;; fetch values for Card 1 parameter 'abc' that are possible\n GET /api/card/1/params/abc/values", + "parameters" : [ { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "personal-only", - "required" : false, + "in" : "path", + "name" : "param-key", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], - "tags" : [ "/api/collection" ] - }, - "post" : { - "summary" : "POST /api/collection/", - "description" : "Create a new Collection.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "authority_level" : { - "type" : "string", - "enum" : [ "official" ] - }, - "description" : { - "type" : "string", - "minLength" : 1 - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "namespace" : { - "type" : "string", - "minLength" : 1 - }, - "parent_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "name" ] - } - } - } - }, - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/graph" : { - "get" : { - "summary" : "GET /api/collection/graph", - "description" : "Fetch a graph of all Collection Permissions.", + "/api/card/{card-id}/public_link" : { + "post" : { + "summary" : "POST /api/card/{card-id}/public_link", + "description" : "Generate publicly-accessible links for this Card. Returns UUID to be used in public links. (If this Card has\n already been shared, it will return the existing public link rather than creating a new one.) Public sharing must\n be enabled.", "parameters" : [ { - "in" : "query", - "name" : "namespace", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/card" ] + }, + "delete" : { + "summary" : "DELETE /api/card/{card-id}/public_link", + "description" : "Delete the publicly-accessible link to this Card.", + "parameters" : [ { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/collection" ] - }, - "put" : { - "summary" : "PUT /api/collection/graph", - "description" : "Do a batch update of Collections Permissions by passing in a modified graph. Will overwrite parts of the graph that\n are present in the request, and leave the rest unchanged.\n\n If the `force` query parameter is `true`, a `revision` number is not required. The provided graph will be persisted\n as-is, and has the potential to clobber other writes that happened since the last read.\n\n If the `skip_graph` query parameter is `true`, it will only return the current revision, not the entire permissions\n graph.", + "tags" : [ "/api/card" ] + } + }, + "/api/card/{card-id}/query" : { + "post" : { + "summary" : "POST /api/card/{card-id}/query", + "description" : "Run the query associated with a Card.", "parameters" : [ { - "in" : "query", - "name" : "force", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "skip-graph", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "requestBody" : { "content" : { @@ -4312,237 +2783,113 @@ "schema" : { "type" : "object", "properties" : { - "groups" : { - "type" : "object", - "properties" : { } + "collection_preview" : { + "type" : "boolean" }, - "namespace" : { - "type" : "string", - "minLength" : 1 + "dashboard_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "revision" : { - "description" : "value must be an integer.", - "type" : "integer" + "ignore_cache" : { + "default" : false, + "type" : "boolean" } }, - "required" : [ "groups" ] + "required" : [ "ignore_cache" ] } } } }, - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/root" : { - "get" : { - "summary" : "GET /api/collection/root", - "description" : "Return the 'Root' Collection object with standard details added", - "parameters" : [ { - "in" : "query", - "name" : "namespace", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/root/dashboard-question-candidates" : { - "get" : { - "summary" : "GET /api/collection/root/dashboard-question-candidates", - "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", - "parameters" : [ ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/root/items" : { - "get" : { - "summary" : "GET /api/collection/root/items", - "description" : "Fetch objects that the current user should see at their root level. As mentioned elsewhere, the 'Root' Collection\n doesn't actually exist as a row in the application DB: it's simply a virtual Collection where things with no\n `collection_id` exist. It does, however, have its own set of Permissions.\n\n This endpoint will actually show objects with no `collection_id` for Users that have Root Collection\n permissions, but for people without Root Collection perms, we'll just show the objects that have an effective\n location of `/`.\n\n This endpoint is intended to power a 'Root Folder View' for the Current User, so regardless you'll see all the\n top-level objects you're allowed to access.\n\n By default, this will show the 'normal' Collections namespace; to view a different Collections namespace, such as\n `snippets`, you can pass the `?namespace=` parameter.\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", + "/api/card/{card-id}/query/{export-format}" : { + "post" : { + "summary" : "POST /api/card/{card-id}/query/{export-format}", + "description" : "Run the query associated with a Card, and return its results as a file in the specified format.\n\n `parameters`, `pivot-results?` and `format-rows?` should be passed as application/x-www-form-urlencoded form content\n or json in the body. This is because this endpoint is normally used to power 'Download Results' buttons that use\n HTML `form` actions).", "parameters" : [ { - "in" : "query", - "name" : "models", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] - } - } - }, { - "in" : "query", - "name" : "include_can_run_adhoc_query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "namespace", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "pinned_state", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "is_not_pinned", "is_pinned", "all" ] - } - }, { - "in" : "query", - "name" : "sort_column", - "required" : false, + "in" : "path", + "name" : "card-id", + "required" : true, "schema" : { - "type" : "string", - "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "sort_direction", - "required" : false, + "in" : "path", + "name" : "export-format", + "required" : true, "schema" : { "type" : "string", - "enum" : [ "desc", "asc" ] - } - }, { - "in" : "query", - "name" : "official_collections_first", - "required" : false, - "schema" : { - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "show_dashboard_questions", - "required" : false, - "schema" : { - "type" : "boolean" + "enum" : [ "csv", "api", "xlsx", "json" ] } } ], - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/root/move-dashboard-question-candidates" : { - "post" : { - "summary" : "POST /api/collection/root/move-dashboard-question-candidates", - "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", - "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "card_ids" : { + "format_rows" : { + "default" : false, + "type" : "boolean" + }, + "parameters" : { "type" : "array", "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "uniqueItems" : true + "type" : "object", + "additionalProperties" : { } + } + }, + "pivot_results" : { + "default" : false, + "type" : "boolean" } }, - "optional" : true + "required" : [ "format_rows", "pivot_results" ] } } } }, - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/trash" : { - "get" : { - "summary" : "GET /api/collection/trash", - "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", - "parameters" : [ ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/tree" : { + "/api/card/{id}" : { "get" : { - "summary" : "GET /api/collection/tree", - "description" : "Similar to `GET /`, but returns Collections in a tree structure, e.g.\n\n ```\n [{:name \"A\"\n :below #{:card :dataset}\n :children [{:name \"B\"}\n {:name \"C\"\n :here #{:dataset :card}\n :below #{:dataset :card}\n :children [{:name \"D\"\n :here #{:dataset}\n :children [{:name \"E\"}]}\n {:name \"F\"\n :here #{:card}\n :children [{:name \"G\"}]}]}]}\n {:name \"H\"}]\n ```\n\n The here and below keys indicate the types of items at this particular level of the tree (here) and in its\n subtree (below).\n\n TODO: for historical reasons this returns Saved Questions AS 'card' AND Models as 'dataset'; we should fix this at\n some point in the future.", + "summary" : "GET /api/card/{id}", + "description" : "Get `Card` with ID.", "parameters" : [ { - "in" : "query", - "name" : "exclude-archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "exclude-other-user-collections", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "namespace", - "required" : false, + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", - "name" : "shallow", + "name" : "ignore_view", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "boolean" } }, { "in" : "query", - "name" : "collection-id", + "name" : "context", "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/collection" ] - } - }, - "/api/collection/{id}" : { - "get" : { - "summary" : "GET /api/collection/{id}", - "description" : "Fetch a specific Collection with standard details added", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "string", + "enum" : [ "collection" ] + } } ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] }, "put" : { - "summary" : "PUT /api/collection/{id}", - "description" : "Modify an existing Collection, including archiving or unarchiving it, or moving it.", + "summary" : "PUT /api/card/{id}", + "description" : "Update a `Card`.", "parameters" : [ { "in" : "path", "name" : "id", @@ -4552,6 +2899,13 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "delete_old_dashcards", + "required" : false, + "schema" : { + "type" : "boolean" + } } ], "requestBody" : { "content" : { @@ -4559,40 +2913,157 @@ "schema" : { "type" : "object", "properties" : { - "archived" : { - "type" : "boolean", - "default" : false + "enable_embedding" : { + "type" : "boolean" }, - "authority_level" : { - "type" : "string", - "enum" : [ "official" ] + "visualization_settings" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } }, - "description" : { - "type" : "string", - "minLength" : 1 + "dashboard_tab_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_preview" : { + "type" : "boolean" + }, + "dataset_query" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "parent_id" : { + "archived" : { + "type" : "boolean" + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "embedding_params" : { + "type" : "object", + "additionalProperties" : { + "type" : "string", + "enum" : [ "disabled", "enabled", "locked" ] + }, + "description" : "value must be a valid embedding params map." + }, + "result_metadata" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultsMetadata" + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "type" : { + "$ref" : "#/components/schemas/metabase.api.card~1card-type" + }, + "display" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + }, + "description" : { + "type" : "string" + }, + "dashboard_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 } - }, - "required" : [ ] + } } } } }, - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] + }, + "delete" : { + "summary" : "DELETE /api/card/{id}", + "description" : "Hard delete a Card. To soft delete, use `PUT /api/card/:id`", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/card" ] } }, - "/api/collection/{id}/dashboard-question-candidates" : { - "get" : { - "summary" : "GET /api/collection/{id}/dashboard-question-candidates", - "description" : "Find cards in this collection that can be moved into dashboards in this collection.\n\n To be eligible, a card must only appear in one dashboard (which is also in this collection), and must not already be a\n dashboard question.", + "/api/card/{id}/copy" : { + "post" : { + "summary" : "POST /api/card/{id}/copy", + "description" : "Copy a `Card`, with the new name 'Copy of _name_'", "parameters" : [ { "in" : "path", "name" : "id", @@ -4603,13 +3074,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/{id}/items" : { + "/api/card/{id}/dashboards" : { "get" : { - "summary" : "GET /api/collection/{id}/items", - "description" : "Fetch a specific Collection's items with the following options:\n\n * `models` - only include objects of a specific set of `models`. If unspecified, returns objects of all models\n * `archived` - when `true`, return archived objects *instead* of unarchived ones. Defaults to `false`.\n * `pinned_state` - when `is_pinned`, return pinned objects only.\n when `is_not_pinned`, return non pinned objects only.\n when `all`, return everything. By default returns everything.\n * `include_can_run_adhoc_query` - when this is true hydrates the `can_run_adhoc_query` flag on card models\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", + "summary" : "GET /api/card/{id}/dashboards", + "description" : "Get a list of `{:name ... :id ...}` pairs for all the dashboards this card appears in.", "parameters" : [ { "in" : "path", "name" : "id", @@ -4619,90 +3090,69 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "models", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] - } - } - }, { - "in" : "query", - "name" : "archived", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_can_run_adhoc_query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "pinned_state", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "is_not_pinned", "is_pinned", "all" ] - } - }, { - "in" : "query", - "name" : "sort_column", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] - } - }, { - "in" : "query", - "name" : "sort_direction", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "desc", "asc" ] - } - }, { - "in" : "query", - "name" : "official_collections_first", - "required" : false, - "schema" : { - "type" : "boolean" - } - }, { - "in" : "query", - "name" : "show_dashboard_questions", - "required" : false, + } ], + "tags" : [ "/api/card" ] + } + }, + "/api/card/{id}/query_metadata" : { + "get" : { + "summary" : "GET /api/card/{id}/query_metadata", + "description" : "Get all of the required query metadata for a card.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/collection" ] + "tags" : [ "/api/card" ] } }, - "/api/collection/{id}/move-dashboard-question-candidates" : { - "post" : { - "summary" : "POST /api/collection/{id}/move-dashboard-question-candidates", - "description" : "Move candidate cards to the dashboards they appear in.", + "/api/card/{id}/series" : { + "get" : { + "summary" : "GET /api/card/{id}/series", + "description" : "Fetches a list of compatible series with the card with id `card_id`.\n\n - `last_cursor` with value is the id of the last card from the previous page to fetch the next page.\n - `query` to search card by name.\n - `exclude_ids` to filter out a list of card ids", "parameters" : [ { "in" : "path", "name" : "id", "required" : true, + "schema" : { + "type" : "integer" + } + }, { + "in" : "query", + "name" : "last_cursor", + "required" : false, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "query", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "exclude_ids", + "required" : false, + "schema" : { } } ], + "tags" : [ "/api/card" ] + } + }, + "/api/cards/dashboards" : { + "post" : { + "summary" : "POST /api/cards/dashboards", + "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { @@ -4715,36 +3165,21 @@ "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 - }, - "uniqueItems" : true + } } }, - "optional" : true + "required" : [ "card_ids" ] } } } }, - "tags" : [ "/api/collection" ] + "tags" : [ "/api/cards" ] } }, - "/api/dashboard/" : { - "get" : { - "summary" : "GET /api/dashboard/", - "description" : "This endpoint is currently unused by the Metabase frontend and may be out of date with the rest of the application.\n It only exists for backwards compatibility and may be removed in the future.\n\n Get `Dashboards`. With filter option `f` (default `all`), restrict results as follows:\n * `all` - Return all Dashboards.\n * `mine` - Return Dashboards created by the current user.\n * `archived` - Return Dashboards that have been archived. (By default, these are *excluded*.)", - "parameters" : [ { - "in" : "query", - "name" : "f", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "all", "mine", "archived" ] - } - } ], - "tags" : [ "/api/dashboard" ] - }, + "/api/cards/move" : { "post" : { - "summary" : "POST /api/dashboard/", - "description" : "Create a new Dashboard.", + "summary" : "POST /api/cards/move", + "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", "parameters" : [ ], "requestBody" : { "content" : { @@ -4752,384 +3187,142 @@ "schema" : { "type" : "object", "properties" : { - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "card_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } }, "collection_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, - "collection_position" : { + "dashboard_id" : { "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 - }, - "description" : { - "type" : "string" - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } } }, - "required" : [ "name" ] + "required" : [ "card_ids" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/cards" ] } }, - "/api/dashboard/embeddable" : { + "/api/channel/" : { "get" : { - "summary" : "GET /api/dashboard/embeddable", - "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", + "summary" : "GET /api/channel/", + "description" : "Get all channels", "parameters" : [ ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/params/valid-filter-fields" : { - "get" : { - "summary" : "GET /api/dashboard/params/valid-filter-fields", - "description" : "Utility endpoint for powering Dashboard UI. Given some set of `filtered` Field IDs (presumably Fields used in\n parameters) and a set of `filtering` Field IDs that will be used to restrict values of `filtered` Fields, for each\n `filtered` Field ID return the subset of `filtering` Field IDs that would actually be used in a chain filter query\n with these Fields.\n\n e.g. in a chain filter query like\n\n GET /api/dashboard/10/params/PARAM_1/values?PARAM_2=100\n\n Assume `PARAM_1` maps to Field 1 and `PARAM_2` maps to Fields 2 and 3. The underlying MBQL query may or may not\n filter against Fields 2 and 3, depending on whether an FK relationship that lets us create a join against Field 1\n can be found. You can use this endpoint to determine which of those Fields is actually used:\n\n GET /api/dashboard/params/valid-filter-fields?filtered=1&filtering=2&filtering=3\n ;; ->\n {1 [2 3]}\n\n Results are returned as a map of\n\n `filtered` Field ID -> subset of `filtering` Field IDs that would be used in chain filter query", - "parameters" : [ { - "in" : "query", - "name" : "filtered", - "required" : true, - "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - }, { - "in" : "query", - "name" : "filtering", - "required" : false, - "schema" : { - "type" : "array", - "items" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - } - } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { - "post" : { - "summary" : "POST /api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", - "description" : "Run a pivot table query for a specific DashCard.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "parameters" : { - "type" : "array", - "items" : { - "description" : "value must be a parameter map with an 'id' key", - "allOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id" ] - }, { - "type" : "object", - "additionalProperties" : { } - } ] - } + "include_inactive" : { + "type" : "boolean", + "default" : false } } } } } }, - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/public" : { - "get" : { - "summary" : "GET /api/dashboard/public", - "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", - "parameters" : [ ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/save" : { + "tags" : [ "/api/channel" ] + }, "post" : { - "summary" : "POST /api/dashboard/save", - "description" : "Save a denormalized description of dashboard.", + "summary" : "POST /api/channel/", + "description" : "Create a channel", "parameters" : [ ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/save/collection/{parent-collection-id}" : { - "post" : { - "summary" : "POST /api/dashboard/save/collection/{parent-collection-id}", - "description" : "Save a denormalized description of dashboard into collection with ID `:parent-collection-id`.", - "parameters" : [ { - "in" : "path", - "name" : "parent-collection-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { - "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", - "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "dashboard_load_id" : { - "type" : "string", - "minLength" : 1 + "active" : { + "type" : "boolean", + "default" : true }, - "parameters" : { - "type" : "array", - "items" : { - "description" : "value must be a parameter map with an 'id' key", - "allOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id" ] - }, { - "type" : "object", - "additionalProperties" : { } - } ] - } + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { + "type" : "object", + "properties" : { } + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "type" : { + "description" : "Must be a namespaced channel. E.g: channel/http" } - } + }, + "required" : [ "name", "type", "details" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] } }, - "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}" : { + "/api/channel/test" : { "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}", - "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it, and return\n its results as a file in the specified format.\n\n `parameters` should be passed as query parameter encoded as a serialized JSON string (this is because this endpoint\n is normally used to power 'Download Results' buttons that use HTML `form` actions).", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "card-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "export-format", - "required" : true, - "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" - } - } ], + "summary" : "POST /api/channel/test", + "description" : "Test a channel connection", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "format_rows" : { - "default" : false, - "type" : "boolean" - }, - "parameters" : { - "anyOf" : [ { - "type" : "array", - "items" : { - "description" : "value must be a parameter map with an 'id' key", - "allOf" : [ { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id" ] - }, { - "type" : "object", - "additionalProperties" : { } - } ] - } - }, { - "description" : "value must be a valid JSON string.", - "type" : "string" - } ] + "details" : { + "type" : "object", + "properties" : { } }, - "pivot_results" : { - "default" : false, - "type" : "boolean" + "type" : { + "description" : "Must be a namespaced channel. E.g: channel/http" } }, - "required" : [ "format_rows", "pivot_results" ] + "required" : [ "type", "details" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] } }, - "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute" : { + "/api/channel/{id}" : { "get" : { - "summary" : "GET /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", - "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", + "summary" : "GET /api/channel/{id}", + "description" : "Get a channel", "parameters" : [ { "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", + "name" : "id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "parameters", - "required" : false, - "schema" : { - "type" : "string" - }, - "description" : "value must be a valid JSON string." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] }, - "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", - "description" : "Execute the associated Action in the context of a `Dashboard` and `DashboardCard` that includes it.\n\n `parameters` should be the mapped dashboard parameters with values.\n `extra_parameters` should be the extra, user entered parameter values.", + "put" : { + "summary" : "PUT /api/channel/{id}", + "description" : "Update a channel", "parameters" : [ { "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "dashcard-id", + "name" : "id", "required" : true, "schema" : { "type" : "integer", @@ -5143,143 +3336,167 @@ "schema" : { "type" : "object", "properties" : { - "parameters" : { + "active" : { + "type" : "boolean" + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { "type" : "object", - "additionalProperties" : { } + "properties" : { } + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "type" : { + "description" : "Must be a namespaced channel. E.g: channel/http" } } } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/channel" ] } }, - "/api/dashboard/{dashboard-id}/public_link" : { + "/api/cloud-migration/" : { "post" : { - "summary" : "POST /api/dashboard/{dashboard-id}/public_link", - "description" : "Generate publicly-accessible links for this Dashboard. Returns UUID to be used in public links. (If this\n Dashboard has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] + "summary" : "POST /api/cloud-migration/", + "description" : "Initiate a new cloud migration.", + "parameters" : [ ], + "tags" : [ "/api/cloud-migration" ] }, - "delete" : { - "summary" : "DELETE /api/dashboard/{dashboard-id}/public_link", - "description" : "Delete the publicly-accessible link to this Dashboard.", - "parameters" : [ { - "in" : "path", - "name" : "dashboard-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] + "get" : { + "summary" : "GET /api/cloud-migration/", + "description" : "Get the latest cloud migration, if any.", + "parameters" : [ ], + "tags" : [ "/api/cloud-migration" ] } }, - "/api/dashboard/{from-dashboard-id}/copy" : { - "post" : { - "summary" : "POST /api/dashboard/{from-dashboard-id}/copy", - "description" : "Copy a Dashboard.", + "/api/cloud-migration/cancel" : { + "put" : { + "summary" : "PUT /api/cloud-migration/cancel", + "description" : "Cancel any ongoing cloud migrations, if any.", + "parameters" : [ ], + "tags" : [ "/api/cloud-migration" ] + } + }, + "/api/collection/" : { + "get" : { + "summary" : "GET /api/collection/", + "description" : "Fetch a list of all Collections that the current user has read permissions for (`:can_write` is returned as an\n additional property of each Collection so you can tell which of these you have write permissions for.)\n\n By default, this returns non-archived Collections, but instead you can show archived ones by passing\n `?archived=true`.\n\n By default, admin users will see all collections. To hide other user's collections pass in\n `?exclude-other-user-collections=true`.\n\n If personal-only is `true`, then return only personal collections where `personal_owner_id` is not `nil`.", "parameters" : [ { - "in" : "path", - "name" : "from-dashboard-id", - "required" : true, + "in" : "query", + "name" : "archived", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "exclude-other-user-collections", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "namespace", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "personal-only", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } } ], + "tags" : [ "/api/collection" ] + }, + "post" : { + "summary" : "POST /api/collection/", + "description" : "Create a new Collection.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "authority_level" : { + "type" : "string", + "enum" : [ "official" ] }, "description" : { - "type" : "string" - }, - "is_deep_copy" : { - "type" : "boolean", - "default" : false + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "namespace" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parent_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } }, - "required" : [ ] + "required" : [ "name" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}" : { + "/api/collection/graph" : { "get" : { - "summary" : "GET /api/dashboard/{id}", - "description" : "Get Dashboard with ID.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] - }, - "delete" : { - "summary" : "DELETE /api/dashboard/{id}", - "description" : "Hard delete a Dashboard. To soft delete, use `PUT /api/dashboard/:id`\n\n This will remove also any questions/models/segments/metrics that use this database.", + "summary" : "GET /api/collection/graph", + "description" : "Fetch a graph of all Collection Permissions.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "namespace", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] }, "put" : { - "summary" : "PUT /api/dashboard/{id}", - "description" : "Update a Dashboard, and optionally the `dashcards` and `tabs` of a Dashboard. The request body should be a JSON object with the same\n structure as the response from `GET /api/dashboard/:id`.", + "summary" : "PUT /api/collection/graph", + "description" : "Do a batch update of Collections Permissions by passing in a modified graph. Will overwrite parts of the graph that\n are present in the request, and leave the rest unchanged.\n\n If the `force` query parameter is `true`, a `revision` number is not required. The provided graph will be persisted\n as-is, and has the potential to clobber other writes that happened since the last read.\n\n If the `skip_graph` query parameter is `true`, it will only return the current revision, not the entire permissions\n graph.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "force", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "skip-graph", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } } ], "requestBody" : { "content" : { @@ -5287,311 +3504,214 @@ "schema" : { "type" : "object", "properties" : { - "points_of_interest" : { - "type" : "string" - }, - "enable_embedding" : { - "type" : "boolean" - }, - "width" : { - "type" : "string", - "enum" : [ "fixed", "full" ] - }, - "show_in_getting_started" : { - "type" : "boolean" - }, - "position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "archived" : { - "type" : "boolean" - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "embedding_params" : { + "groups" : { "type" : "object", - "additionalProperties" : { - "type" : "string", - "enum" : [ "disabled", "enabled", "locked" ] - }, - "description" : "value must be a valid embedding params map." - }, - "tabs" : { - "description" : "value must be seq of maps in which ids are unique", - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "id" : { - "description" : "value must be an integer.", - "type" : "integer" - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id", "name" ] - } - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "caveats" : { - "type" : "string" - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } + "properties" : { } }, - "dashcards" : { - "description" : "value must be seq of maps in which ids are unique", - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "col" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "id" : { - "type" : "integer" - }, - "inline_parameters" : { - "type" : "array", - "items" : { - "type" : "string", - "minLength" : 1 - } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "parameter_id" : { - "type" : "string", - "minLength" : 1 - }, - "target" : { } - }, - "required" : [ "parameter_id", "target" ] - } - }, - "row" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "series" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "size_x" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "size_y" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "id", "size_x", "size_y", "row", "col" ] - } + "namespace" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : { - "type" : "string" + "revision" : { + "description" : "value must be an integer.", + "type" : "integer" } - } + }, + "required" : [ "groups" ] } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/cards" : { - "put" : { - "summary" : "PUT /api/dashboard/{id}/cards", - "description" : "(DEPRECATED -- Use the `PUT /api/dashboard/:id` endpoint instead.)\n Update `Cards` and `Tabs` on a Dashboard. Request body should have the form:\n\n {:cards [{:id ... ; DashboardCard ID\n :size_x ...\n :size_y ...\n :row ...\n :col ...\n :parameter_mappings ...\n :series [{:id 123\n ...}]}\n ...]\n :tabs [{:id ... ; DashboardTab ID\n :name ...}]}", + "/api/collection/root" : { + "get" : { + "summary" : "GET /api/collection/root", + "description" : "Return the 'Root' Collection object with standard details added", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "namespace", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/root/dashboard-question-candidates" : { + "get" : { + "summary" : "GET /api/collection/root/dashboard-question-candidates", + "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", + "parameters" : [ ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/root/items" : { + "get" : { + "summary" : "GET /api/collection/root/items", + "description" : "Fetch objects that the current user should see at their root level. As mentioned elsewhere, the 'Root' Collection\n doesn't actually exist as a row in the application DB: it's simply a virtual Collection where things with no\n `collection_id` exist. It does, however, have its own set of Permissions.\n\n This endpoint will actually show objects with no `collection_id` for Users that have Root Collection\n permissions, but for people without Root Collection perms, we'll just show the objects that have an effective\n location of `/`.\n\n This endpoint is intended to power a 'Root Folder View' for the Current User, so regardless you'll see all the\n top-level objects you're allowed to access.\n\n By default, this will show the 'normal' Collections namespace; to view a different Collections namespace, such as\n `snippets`, you can pass the `?namespace=` parameter.\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", + "parameters" : [ { + "in" : "query", + "name" : "models", + "required" : false, + "schema" : { + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] + } + } + }, { + "in" : "query", + "name" : "archived", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "namespace", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "description" : "value must be an integer greater than zero." + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "pinned_state", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "is_not_pinned", "is_pinned", "all" ] + } + }, { + "in" : "query", + "name" : "sort_column", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] + } + }, { + "in" : "query", + "name" : "sort_direction", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "desc", "asc" ] + } + }, { + "in" : "query", + "name" : "official_collections_first", + "required" : false, + "schema" : { + "type" : "boolean" + } + }, { + "in" : "query", + "name" : "show_dashboard_questions", + "required" : false, + "schema" : { + "type" : "boolean" + } } ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/root/move-dashboard-question-candidates" : { + "post" : { + "summary" : "POST /api/collection/root/move-dashboard-question-candidates", + "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "cards" : { - "description" : "value must be seq of maps in which ids are unique", - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "col" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "id" : { - "type" : "integer" - }, - "inline_parameters" : { - "type" : "array", - "items" : { - "type" : "string", - "minLength" : 1 - } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "parameter_id" : { - "type" : "string", - "minLength" : 1 - }, - "target" : { } - }, - "required" : [ "parameter_id", "target" ] - } - }, - "row" : { - "description" : "value must be an integer greater or equal to than zero.", - "type" : "integer", - "minimum" : 0 - }, - "series" : { - "type" : "array", - "items" : { - "type" : "object" - } - }, - "size_x" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "size_y" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "id", "size_x", "size_y", "row", "col" ] - } - }, - "tabs" : { - "description" : "value must be seq of maps in which ids are unique", + "card_ids" : { "type" : "array", "items" : { - "type" : "object", - "properties" : { - "id" : { - "description" : "value must be an integer.", - "type" : "integer" - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "id", "name" ] - } + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "uniqueItems" : true } }, - "required" : [ "cards" ] + "optional" : true } } } }, - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/items" : { + "/api/collection/trash" : { "get" : { - "summary" : "GET /api/dashboard/{id}/items", - "description" : "Get Dashboard with ID.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] + "summary" : "GET /api/collection/trash", + "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", + "parameters" : [ ], + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/params/{param-key}/remapping" : { + "/api/collection/tree" : { "get" : { - "summary" : "GET /api/dashboard/{id}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for a given value of the parameter with ID `:param-key`.\n\n ;; fetch the remapped value for Dashboard 1 parameter 'abc' for value 100\n GET /api/dashboard/1/params/abc/remapping?value=100", + "summary" : "GET /api/collection/tree", + "description" : "Similar to `GET /`, but returns Collections in a tree structure, e.g.\n\n ```\n [{:name \"A\"\n :below #{:card :dataset}\n :children [{:name \"B\"}\n {:name \"C\"\n :here #{:dataset :card}\n :below #{:dataset :card}\n :children [{:name \"D\"\n :here #{:dataset}\n :children [{:name \"E\"}]}\n {:name \"F\"\n :here #{:card}\n :children [{:name \"G\"}]}]}]}\n {:name \"H\"}]\n ```\n\n The here and below keys indicate the types of items at this particular level of the tree (here) and in its\n subtree (below).\n\n TODO: for historical reasons this returns Saved Questions AS 'card' AND Models as 'dataset'; we should fix this at\n some point in the future.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "exclude-archived", + "required" : false, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "boolean", + "default" : false + } }, { - "in" : "path", - "name" : "param-key", - "required" : true, + "in" : "query", + "name" : "exclude-other-user-collections", + "required" : false, "schema" : { - "type" : "string" + "type" : "boolean", + "default" : false } }, { "in" : "query", - "name" : "value", - "required" : true, + "name" : "namespace", + "required" : false, "schema" : { - "type" : "string" + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "shallow", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } + }, { + "in" : "query", + "name" : "collection-id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/params/{param-key}/search/{query}" : { + "/api/collection/{id}" : { "get" : { - "summary" : "GET /api/dashboard/{id}/params/{param-key}/search/{query}", - "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`. Optionally restrict\n these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that contain 'Cam' and are possible when parameter 'def' is set\n ;; to 100\n GET /api/dashboard/1/params/abc/search/Cam?def=100\n\n Currently limited to first 1000 results.", + "summary" : "GET /api/collection/{id}", + "description" : "Fetch a specific Collection with standard details added", "parameters" : [ { "in" : "path", "name" : "id", @@ -5601,22 +3721,12 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "path", - "name" : "query", - "required" : true, - "schema" : { - "type" : "string", - "minLength" : 1 - } } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/dashboard/{id}/params/{param-key}/values" : { - "get" : { - "summary" : "GET /api/dashboard/{id}/params/{param-key}/values", - "description" : "Fetch possible values of the parameter whose ID is `:param-key`. If the values come directly from a query, optionally\n restrict these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that are possible when parameter 'def' is set to 100\n GET /api/dashboard/1/params/abc/values?def=100", + "tags" : [ "/api/collection" ] + }, + "put" : { + "summary" : "PUT /api/collection/{id}", + "description" : "Modify an existing Collection, including archiving or unarchiving it, or moving it.", "parameters" : [ { "in" : "path", "name" : "id", @@ -5627,13 +3737,46 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/dashboard" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "archived" : { + "type" : "boolean", + "default" : false + }, + "authority_level" : { + "type" : "string", + "enum" : [ "official" ] + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parent_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ ] + } + } + } + }, + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/query_metadata" : { + "/api/collection/{id}/dashboard-question-candidates" : { "get" : { - "summary" : "GET /api/dashboard/{id}/query_metadata", - "description" : "Get all of the required query metadata for the cards on dashboard.", + "summary" : "GET /api/collection/{id}/dashboard-question-candidates", + "description" : "Find cards in this collection that can be moved into dashboards in this collection.\n\n To be eligible, a card must only appear in one dashboard (which is also in this collection), and must not already be a\n dashboard question.", "parameters" : [ { "in" : "path", "name" : "id", @@ -5644,13 +3787,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/dashboard" ] + "tags" : [ "/api/collection" ] } }, - "/api/dashboard/{id}/related" : { + "/api/collection/{id}/items" : { "get" : { - "summary" : "GET /api/dashboard/{id}/related", - "description" : "Return related entities.", + "summary" : "GET /api/collection/{id}/items", + "description" : "Fetch a specific Collection's items with the following options:\n\n * `models` - only include objects of a specific set of `models`. If unspecified, returns objects of all models\n * `archived` - when `true`, return archived objects *instead* of unarchived ones. Defaults to `false`.\n * `pinned_state` - when `is_pinned`, return pinned objects only.\n when `is_not_pinned`, return non pinned objects only.\n when `all`, return everything. By default returns everything.\n\n Note that this endpoint should return results in a similar shape to `/api/dashboard/:id/items`, so if this is\n changed, that should too.", "parameters" : [ { "in" : "path", "name" : "id", @@ -5660,25 +3803,20 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/dashboard" ] - } - }, - "/api/database/" : { - "get" : { - "summary" : "GET /api/database/", - "description" : "Fetch all `Databases`.\n\n * `include=tables` means we should hydrate the Tables belonging to each DB. Default: `false`.\n\n * `saved` means we should include the saved questions virtual database. Default: `false`.\n\n * `include_editable_data_model` will only include DBs for which the current user has data model editing\n permissions. (If `include=tables`, this also applies to the list of tables in each DB). Should only be used if\n Enterprise Edition code is available the advanced-permissions feature is enabled.\n\n * `exclude_uneditable_details` will only include DBs for which the current user can edit the DB details. Has no\n effect unless Enterprise Edition code is available and the advanced-permissions feature is enabled.\n\n * `include_only_uploadable` will only include DBs into which Metabase can insert new data.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.warehouses.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.warehouses.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", - "parameters" : [ { + }, { "in" : "query", - "name" : "include", + "name" : "models", "required" : false, "schema" : { - "const" : "tables" - }, - "description" : "include must be either empty or the value 'tables'" + "type" : "array", + "items" : { + "type" : "string", + "enum" : [ "dashboard", "dataset", "no_models", "timeline", "snippet", "collection", "pulse", "metric", "card" ] + } + } }, { "in" : "query", - "name" : "include_analytics", + "name" : "archived", "required" : false, "schema" : { "type" : "boolean", @@ -5686,155 +3824,410 @@ } }, { "in" : "query", - "name" : "saved", + "name" : "pinned_state", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "string", + "enum" : [ "is_not_pinned", "is_pinned", "all" ] } }, { "in" : "query", - "name" : "include_editable_data_model", + "name" : "sort_column", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "string", + "enum" : [ "model", "name", "last_edited_by", "last_edited_at" ] } }, { "in" : "query", - "name" : "exclude_uneditable_details", + "name" : "sort_direction", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "string", + "enum" : [ "desc", "asc" ] } }, { "in" : "query", - "name" : "include_only_uploadable", + "name" : "official_collections_first", "required" : false, "schema" : { - "type" : "boolean", - "default" : false + "type" : "boolean" } }, { "in" : "query", - "name" : "router_database_id", + "name" : "show_dashboard_questions", "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + } ], + "tags" : [ "/api/collection" ] + } + }, + "/api/collection/{id}/move-dashboard-question-candidates" : { + "post" : { + "summary" : "POST /api/collection/{id}/move-dashboard-question-candidates", + "description" : "Move candidate cards to the dashboards they appear in.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "card_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "uniqueItems" : true + } + }, + "optional" : true + } + } + } + }, + "tags" : [ "/api/collection" ] + } + }, + "/api/dashboard/" : { + "get" : { + "summary" : "GET /api/dashboard/", + "description" : "This endpoint is currently unused by the Metabase frontend and may be out of date with the rest of the application.\n It only exists for backwards compatibility and may be removed in the future.\n\n Get `Dashboards`. With filter option `f` (default `all`), restrict results as follows:\n * `all` - Return all Dashboards.\n * `mine` - Return Dashboards created by the current user.\n * `archived` - Return Dashboards that have been archived. (By default, these are *excluded*.)", + "parameters" : [ { + "in" : "query", + "name" : "f", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "all", "mine", "archived" ] + } + } ], + "tags" : [ "/api/dashboard" ] }, "post" : { - "summary" : "POST /api/database/", - "description" : "Add a new `Database`.", + "summary" : "POST /api/dashboard/", + "description" : "Create a new Dashboard.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "description" : { + "type" : "string" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + } + }, + "required" : [ "name" ] + } + } + } + }, + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/embeddable" : { + "get" : { + "summary" : "GET /api/dashboard/embeddable", + "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", "parameters" : [ ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/params/valid-filter-fields" : { + "get" : { + "summary" : "GET /api/dashboard/params/valid-filter-fields", + "description" : "Utility endpoint for powering Dashboard UI. Given some set of `filtered` Field IDs (presumably Fields used in\n parameters) and a set of `filtering` Field IDs that will be used to restrict values of `filtered` Fields, for each\n `filtered` Field ID return the subset of `filtering` Field IDs that would actually be used in a chain filter query\n with these Fields.\n\n e.g. in a chain filter query like\n\n GET /api/dashboard/10/params/PARAM_1/values?PARAM_2=100\n\n Assume `PARAM_1` maps to Field 1 and `PARAM_2` maps to Fields 2 and 3. The underlying MBQL query may or may not\n filter against Fields 2 and 3, depending on whether an FK relationship that lets us create a join against Field 1\n can be found. You can use this endpoint to determine which of those Fields is actually used:\n\n GET /api/dashboard/params/valid-filter-fields?filtered=1&filtering=2&filtering=3\n ;; ->\n {1 [2 3]}\n\n Results are returned as a map of\n\n `filtered` Field ID -> subset of `filtering` Field IDs that would be used in chain filter query", + "parameters" : [ { + "in" : "query", + "name" : "filtered", + "required" : true, + "schema" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + } + }, { + "in" : "query", + "name" : "filtering", + "required" : false, + "schema" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + } + } ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { + "post" : { + "summary" : "POST /api/dashboard/pivot/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", + "description" : "Run a pivot table query for a specific DashCard.", + "parameters" : [ { + "in" : "path", + "name" : "dashboard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "dashcard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "name" : { - "type" : "string", - "minLength" : 1 - }, - "is_on_demand" : { - "type" : "boolean", - "default" : false - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "engine" : { - "description" : "value must be a valid database engine.", - "type" : "string", - "minLength" : 1 - }, - "details" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "is_full_sync" : { - "type" : "boolean", - "default" : true - }, - "connection_source" : { - "type" : "string", - "enum" : [ "admin", "setup" ], - "default" : "admin" - }, - "auto_run_queries" : { - "type" : "boolean" - }, - "schedules" : { - "$ref" : "#/components/schemas/metabase.sync.schedules.ExpandedSchedulesMap" + "parameters" : { + "type" : "array", + "items" : { + "description" : "value must be a parameter map with an 'id' key", + "allOf" : [ { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "type" : "object", + "additionalProperties" : { } + } ] + } } - }, - "required" : [ "name", "engine", "details" ] + } } } } }, - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/sample_database" : { - "post" : { - "summary" : "POST /api/database/sample_database", - "description" : "Add the sample database as a new `Database`.", + "/api/dashboard/public" : { + "get" : { + "summary" : "GET /api/dashboard/public", + "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", "parameters" : [ ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/validate" : { + "/api/dashboard/save" : { "post" : { - "summary" : "POST /api/database/validate", - "description" : "Validate that we can connect to a database given a set of details.", + "summary" : "POST /api/dashboard/save", + "description" : "Save a denormalized description of dashboard.", "parameters" : [ ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/save/collection/{parent-collection-id}" : { + "post" : { + "summary" : "POST /api/dashboard/save/collection/{parent-collection-id}", + "description" : "Save a denormalized description of dashboard into collection with ID `:parent-collection-id`.", + "parameters" : [ { + "in" : "path", + "name" : "parent-collection-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query" : { + "post" : { + "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query", + "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it.", + "parameters" : [ { + "in" : "path", + "name" : "dashboard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "dashcard-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "card-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "details" : { - "type" : "object", - "properties" : { - "details" : { + "dashboard_load_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "value must be a parameter map with an 'id' key", + "allOf" : [ { "type" : "object", - "properties" : { } - }, - "engine" : { - "description" : "value must be a valid database engine.", - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "engine", "details" ] + "properties" : { + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "type" : "object", + "additionalProperties" : { } + } ] + } } - }, - "required" : [ "details" ] + } } } } }, - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}" : { - "get" : { - "summary" : "GET /api/database/{id}", - "description" : "Get a single Database with `id`. Optionally pass `?include=tables` or `?include=tables.fields` to include the Tables\n belonging to this database, or the Tables and Fields, respectively. If the requestor has write permissions for the\n DB\n (i.e. is an admin or has data model permissions), then certain inferred secret values will also be included in the\n returned details (see [[metabase.secrets.models.secret/expand-db-details-inferred-secret-values]] for full details).\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.warehouses.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.warehouses.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", + "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}" : { + "post" : { + "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/card/{card-id}/query/{export-format}", + "description" : "Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it, and return\n its results as a file in the specified format.\n\n `parameters` should be passed as query parameter encoded as a serialized JSON string (this is because this endpoint\n is normally used to power 'Download Results' buttons that use HTML `form` actions).", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -5842,42 +4235,31 @@ }, "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "include", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "tables", "tables.fields" ] - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, + "in" : "path", + "name" : "dashcard-id", + "required" : true, "schema" : { - "type" : "boolean" - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "exclude_uneditable_details", - "required" : false, - "schema" : { - "type" : "boolean" - } - } ], - "tags" : [ "/api/database" ] - }, - "put" : { - "summary" : "PUT /api/database/{id}", - "description" : "Update a `Database`.", - "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "card-id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "export-format", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] + } } ], "requestBody" : { "content" : { @@ -5885,78 +4267,63 @@ "schema" : { "type" : "object", "properties" : { - "points_of_interest" : { - "type" : "string" - }, - "settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "engine" : { - "description" : "value must be a valid database engine.", - "type" : "string", - "minLength" : 1 - }, - "details" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "auto_run_queries" : { + "format_rows" : { + "default" : false, "type" : "boolean" }, - "caveats" : { - "type" : "string" + "parameters" : { + "anyOf" : [ { + "type" : "array", + "items" : { + "description" : "value must be a parameter map with an 'id' key", + "allOf" : [ { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "type" : "object", + "additionalProperties" : { } + } ] + } + }, { + "description" : "value must be a valid JSON string.", + "type" : "string" + } ] }, - "refingerprint" : { + "pivot_results" : { + "default" : false, "type" : "boolean" - }, - "schedules" : { - "$ref" : "#/components/schemas/metabase.sync.schedules.ExpandedSchedulesMap" - }, - "description" : { - "type" : "string" } - } + }, + "required" : [ "format_rows", "pivot_results" ] } } } }, - "tags" : [ "/api/database" ] - }, - "delete" : { - "summary" : "DELETE /api/database/{id}", - "description" : "Delete a `Database`.", + "tags" : [ "/api/dashboard" ] + } + }, + "/api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute" : { + "get" : { + "summary" : "GET /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", + "description" : "Fetches the values for filling in execution parameters. Pass PK parameters and values to select.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/autocomplete_suggestions" : { - "get" : { - "summary" : "GET /api/database/{id}/autocomplete_suggestions", - "description" : "Return a list of autocomplete suggestions for a given `prefix`, or `substring`. Should only specify one, but\n `substring` will have priority if both are present.\n\n This is intended for use with the ACE Editor when the User is typing raw SQL. Suggestions include matching `Tables`\n and `Fields` in this `Database`.\n\n Tables are returned in the format `[table_name \"Table\"]`;\n When Fields have a semantic_type, they are returned in the format `[field_name \"table_name base_type semantic_type\"]`\n When Fields lack a semantic_type, they are returned in the format `[field_name \"table_name base_type\"]`", - "parameters" : [ { + }, { "in" : "path", - "name" : "id", + "name" : "dashcard-id", "required" : true, "schema" : { "type" : "integer", @@ -5965,31 +4332,21 @@ "description" : "value must be an integer greater than zero." }, { "in" : "query", - "name" : "prefix", - "required" : false, - "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "substring", + "name" : "parameters", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "type" : "string" + }, + "description" : "value must be a valid JSON string." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/card_autocomplete_suggestions" : { - "get" : { - "summary" : "GET /api/database/{id}/card_autocomplete_suggestions", - "description" : "Return a list of `Card` autocomplete suggestions for a given `query` in a given `Database`.\n\n This is intended for use with the ACE Editor when the User is typing in a template tag for a `Card`, e.g. .", + "tags" : [ "/api/dashboard" ] + }, + "post" : { + "summary" : "POST /api/dashboard/{dashboard-id}/dashcard/{dashcard-id}/execute", + "description" : "Execute the associated Action in the context of a `Dashboard` and `DashboardCard` that includes it.\n\n `parameters` should be the mapped dashboard parameters with values.\n `extra_parameters` should be the extra, user entered parameter values.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -5997,31 +4354,40 @@ }, "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "query", + "in" : "path", + "name" : "dashcard-id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "include_dashboard_questions", - "required" : false, - "schema" : { - "type" : "boolean" - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "parameters" : { + "type" : "object", + "additionalProperties" : { } + } + } + } + } + } + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/discard_values" : { + "/api/dashboard/{dashboard-id}/public_link" : { "post" : { - "summary" : "POST /api/database/{id}/discard_values", - "description" : "Discards all saved field values for this `Database`.", + "summary" : "POST /api/dashboard/{dashboard-id}/public_link", + "description" : "Generate publicly-accessible links for this Dashboard. Returns UUID to be used in public links. (If this\n Dashboard has already been shared, it will return the existing public link rather than creating a new one.) Public\n sharing must be enabled.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -6029,16 +4395,14 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/dismiss_spinner" : { - "post" : { - "summary" : "POST /api/database/{id}/dismiss_spinner", - "description" : "Manually set the initial sync status of the `Database` and corresponding\n tables to be `complete` (see #20863)", + "tags" : [ "/api/dashboard" ] + }, + "delete" : { + "summary" : "DELETE /api/dashboard/{dashboard-id}/public_link", + "description" : "Delete the publicly-accessible link to this Dashboard.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -6046,16 +4410,16 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/fields" : { - "get" : { - "summary" : "GET /api/database/{id}/fields", - "description" : "Get a list of all `Fields` in `Database`.", + "/api/dashboard/{from-dashboard-id}/copy" : { + "post" : { + "summary" : "POST /api/dashboard/{from-dashboard-id}/copy", + "description" : "Copy a Dashboard.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "from-dashboard-id", "required" : true, "schema" : { "type" : "integer", @@ -6063,13 +4427,46 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "description" : { + "type" : "string" + }, + "is_deep_copy" : { + "type" : "boolean", + "default" : false + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ ] + } + } + } + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/healthcheck" : { + "/api/dashboard/{id}" : { "get" : { - "summary" : "GET /api/database/{id}/healthcheck", - "description" : "Reports whether the database can currently connect", + "summary" : "GET /api/dashboard/{id}", + "description" : "Get Dashboard with ID.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6080,13 +4477,11 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/idfields" : { - "get" : { - "summary" : "GET /api/database/{id}/idfields", - "description" : "Get a list of all primary key `Fields` for `Database`.", + "tags" : [ "/api/dashboard" ] + }, + "delete" : { + "summary" : "DELETE /api/dashboard/{id}", + "description" : "Hard delete a Dashboard. To soft delete, use `PUT /api/dashboard/:id`\n\n This will remove also any questions/models/segments/metrics that use this database.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6097,13 +4492,11 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/metadata" : { - "get" : { - "summary" : "GET /api/database/{id}/metadata", - "description" : "Get metadata about a `Database`, including all of its `Tables` and `Fields`. Returns DB, fields, and field values.\n By default only non-hidden tables and fields are returned. Passing include_hidden=true includes them.\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.", + "tags" : [ "/api/dashboard" ] + }, + "put" : { + "summary" : "PUT /api/dashboard/{id}", + "description" : "Update a Dashboard, and optionally the `dashcards` and `tabs` of a Dashboard. The request body should be a JSON object with the same\n structure as the response from `GET /api/dashboard/:id`.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6113,46 +4506,205 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "remove_inactive", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "skip_fields", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "points_of_interest" : { + "type" : "string" + }, + "enable_embedding" : { + "type" : "boolean" + }, + "width" : { + "type" : "string", + "enum" : [ "fixed", "full" ] + }, + "show_in_getting_started" : { + "type" : "boolean" + }, + "position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "archived" : { + "type" : "boolean" + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "embedding_params" : { + "type" : "object", + "additionalProperties" : { + "type" : "string", + "enum" : [ "disabled", "enabled", "locked" ] + }, + "description" : "value must be a valid embedding params map." + }, + "tabs" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be an integer.", + "type" : "integer" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id", "name" ] + } + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "caveats" : { + "type" : "string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } + }, + "required" : [ "id", "type" ] + } + }, + "dashcards" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "col" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "id" : { + "type" : "integer" + }, + "parameter_mappings" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] + } + }, + "row" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "series" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "size_x" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "size_y" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "id", "size_x", "size_y", "row", "col" ] + } + }, + "description" : { + "type" : "string" + } + } + } + } } - } ], - "tags" : [ "/api/database" ] + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/rescan_values" : { - "post" : { - "summary" : "POST /api/database/{id}/rescan_values", - "description" : "Trigger a manual scan of the field values for this `Database`.", + "/api/dashboard/{id}/cards" : { + "put" : { + "summary" : "PUT /api/dashboard/{id}/cards", + "description" : "(DEPRECATED -- Use the `PUT /api/dashboard/:id` endpoint instead.)\n Update `Cards` and `Tabs` on a Dashboard. Request body should have the form:\n\n {:cards [{:id ... ; DashboardCard ID\n :size_x ...\n :size_y ...\n :row ...\n :col ...\n :parameter_mappings ...\n :series [{:id 123\n ...}]}\n ...]\n :tabs [{:id ... ; DashboardTab ID\n :name ...}]}", "parameters" : [ { "in" : "path", "name" : "id", @@ -6163,46 +4715,96 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{id}/schema/" : { - "get" : { - "summary" : "GET /api/database/{id}/schema/", - "description" : "Return a list of Tables for a Database whose `schema` is `nil` or an empty string.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "cards" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "col" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "id" : { + "type" : "integer" + }, + "parameter_mappings" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] + } + }, + "row" : { + "description" : "value must be an integer greater or equal to than zero.", + "type" : "integer", + "minimum" : 0 + }, + "series" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "size_x" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "size_y" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "id", "size_x", "size_y", "row", "col" ] + } + }, + "tabs" : { + "description" : "value must be seq of maps in which ids are unique", + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "id" : { + "description" : "value must be an integer.", + "type" : "integer" + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "id", "name" ] + } + } + }, + "required" : [ "cards" ] + } + } } - } ], - "tags" : [ "/api/database" ] + }, + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/schema/{schema}" : { + "/api/dashboard/{id}/items" : { "get" : { - "summary" : "GET /api/database/{id}/schema/{schema}", - "description" : "Returns a list of Tables for the given Database `id` and `schema`", + "summary" : "GET /api/dashboard/{id}/items", + "description" : "Get Dashboard with ID.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6212,30 +4814,14 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/schemas" : { + "/api/dashboard/{id}/params/{param-key}/search/{query}" : { "get" : { - "summary" : "GET /api/database/{id}/schemas", - "description" : "Returns a list of all the schemas with tables found for the database `id`. Excludes schemas with no tables.", + "summary" : "GET /api/dashboard/{id}/params/{param-key}/search/{query}", + "description" : "Fetch possible values of the parameter whose ID is `:param-key` that contain `:query`. Optionally restrict\n these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that contain 'Cam' and are possible when parameter 'def' is set\n ;; to 100\n GET /api/dashboard/1/params/abc/search/Cam?def=100\n\n Currently limited to first 1000 results.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6246,29 +4832,21 @@ }, "description" : "value must be an integer greater than zero." }, { - "in" : "query", - "name" : "include_editable_data_model", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "in" : "query", - "name" : "include_hidden", - "required" : false, + "in" : "path", + "name" : "query", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/sync_schema" : { - "post" : { - "summary" : "POST /api/database/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Database`.", + "/api/dashboard/{id}/params/{param-key}/values" : { + "get" : { + "summary" : "GET /api/dashboard/{id}/params/{param-key}/values", + "description" : "Fetch possible values of the parameter whose ID is `:param-key`. If the values come directly from a query, optionally\n restrict these values by passing query parameters like `other-parameter=value` e.g.\n\n ;; fetch values for Dashboard 1 parameter 'abc' that are possible when parameter 'def' is set to 100\n GET /api/dashboard/1/params/abc/values?def=100", "parameters" : [ { "in" : "path", "name" : "id", @@ -6279,13 +4857,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/syncable_schemas" : { + "/api/dashboard/{id}/query_metadata" : { "get" : { - "summary" : "GET /api/database/{id}/syncable_schemas", - "description" : "Returns a list of all syncable schemas found for the database `id`.", + "summary" : "GET /api/dashboard/{id}/query_metadata", + "description" : "Get all of the required query metadata for the cards on dashboard.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6296,13 +4874,13 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{id}/usage_info" : { + "/api/dashboard/{id}/related" : { "get" : { - "summary" : "GET /api/database/{id}/usage_info", - "description" : "Get usage info for a database.\n Returns a map with keys are models and values are the number of entities that use this database.", + "summary" : "GET /api/dashboard/{id}/related", + "description" : "Return related entities.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6313,171 +4891,76 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/datasets" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/datasets", - "description" : "Returns a list of all the datasets found for the saved questions virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/datasets/{schema}" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", - "description" : "Returns a list of Tables for the datasets virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/metadata" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/metadata", - "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/database/{virtual-db}/schema/{schema}" : { - "get" : { - "summary" : "GET /api/database/{virtual-db}/schema/{schema}", - "description" : "Returns a list of Tables for the saved questions virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] + "tags" : [ "/api/dashboard" ] } }, - "/api/database/{virtual-db}/schemas" : { + "/api/database/" : { "get" : { - "summary" : "GET /api/database/{virtual-db}/schemas", - "description" : "Returns a list of all the schemas found for the saved questions virtual database.", - "parameters" : [ ], - "tags" : [ "/api/database" ] - } - }, - "/api/dataset/" : { - "post" : { - "summary" : "POST /api/dataset/", - "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database" : { - "type" : "integer" - } - } - } - } - } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/native" : { - "post" : { - "summary" : "POST /api/dataset/native", - "description" : "Fetch a native version of an MBQL query.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "pretty" : { - "type" : "boolean", - "default" : true - } - }, - "required" : [ "database" ] - } - } + "summary" : "GET /api/database/", + "description" : "Fetch all `Databases`.\n\n * `include=tables` means we should hydrate the Tables belonging to each DB. Default: `false`.\n\n * `saved` means we should include the saved questions virtual database. Default: `false`.\n\n * `include_editable_data_model` will only include DBs for which the current user has data model editing\n permissions. (If `include=tables`, this also applies to the list of tables in each DB). Should only be used if\n Enterprise Edition code is available the advanced-permissions feature is enabled.\n\n * `exclude_uneditable_details` will only include DBs for which the current user can edit the DB details. Has no\n effect unless Enterprise Edition code is available and the advanced-permissions feature is enabled.\n\n * `include_only_uploadable` will only include DBs into which Metabase can insert new data.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", + "parameters" : [ { + "in" : "query", + "name" : "include", + "required" : false, + "schema" : { + "const" : "tables" + }, + "description" : "include must be either empty or the value 'tables'" + }, { + "in" : "query", + "name" : "include_analytics", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/parameter/remapping" : { - "post" : { - "summary" : "POST /api/dataset/parameter/remapping", - "description" : "Return the remapped parameter values for cards or dashboards that are being edited.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "field_ids" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - } - }, - "parameter" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - }, - "value" : { } - }, - "required" : [ "parameter", "value" ] - } - } + }, { + "in" : "query", + "name" : "saved", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/parameter/search/{query}" : { - "post" : { - "summary" : "POST /api/dataset/parameter/search/{query}", - "description" : "Return parameter values for cards or dashboards that are being edited. Expects a query string at `?query=foo`.", - "parameters" : [ { - "in" : "path", - "name" : "query", - "required" : true, + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 + "type" : "boolean", + "default" : false } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "field_ids" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - } - }, - "parameter" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } - }, - "required" : [ "parameter" ] - } - } + }, { + "in" : "query", + "name" : "exclude_uneditable_details", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/dataset" ] - } - }, - "/api/dataset/parameter/values" : { + }, { + "in" : "query", + "name" : "include_only_uploadable", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "router_database_id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] + }, "post" : { - "summary" : "POST /api/dataset/parameter/values", - "description" : "Return parameter values for cards or dashboards that are being edited.", + "summary" : "POST /api/database/", + "description" : "Add a new `Database`.", "parameters" : [ ], "requestBody" : { "content" : { @@ -6485,53 +4968,64 @@ "schema" : { "type" : "object", "properties" : { - "field_ids" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - } + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, - "parameter" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" + "is_on_demand" : { + "type" : "boolean", + "default" : false + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "engine" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "is_full_sync" : { + "type" : "boolean", + "default" : true + }, + "connection_source" : { + "type" : "string", + "enum" : [ "admin", "setup" ], + "default" : "admin" + }, + "auto_run_queries" : { + "type" : "boolean" + }, + "schedules" : { + "$ref" : "#/components/schemas/metabase.sync.schedules~1ExpandedSchedulesMap" } }, - "required" : [ "parameter" ] + "required" : [ "name", "engine", "details" ] } } } }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] } }, - "/api/dataset/pivot" : { + "/api/database/sample_database" : { "post" : { - "summary" : "POST /api/dataset/pivot", - "description" : "Generate a pivoted dataset for an ad-hoc query", + "summary" : "POST /api/database/sample_database", + "description" : "Add the sample database as a new `Database`.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "database" ] - } - } - } - }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] } }, - "/api/dataset/query_metadata" : { + "/api/database/validate" : { "post" : { - "summary" : "POST /api/dataset/query_metadata", - "description" : "Get all of the required query metadata for an ad-hoc query.", + "summary" : "POST /api/database/validate", + "description" : "Validate that we can connect to a database given a set of details.", "parameters" : [ ], "requestBody" : { "content" : { @@ -6539,112 +5033,191 @@ "schema" : { "type" : "object", "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 + "details" : { + "type" : "object", + "properties" : { + "details" : { + "type" : "object", + "properties" : { } + }, + "engine" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "engine", "details" ] } }, - "required" : [ "database" ] + "required" : [ "details" ] } } } }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] } }, - "/api/dataset/{export-format}" : { - "post" : { - "summary" : "POST /api/dataset/{export-format}", - "description" : "Execute a query and download the result data as a file in the specified format.", + "/api/database/{id}" : { + "get" : { + "summary" : "GET /api/database/{id}", + "description" : "Get a single Database with `id`. Optionally pass `?include=tables` or `?include=tables.fields` to include the Tables\n belonging to this database, or the Tables and Fields, respectively. If the requestor has write permissions for the DB\n (i.e. is an admin or has data model permissions), then certain inferred secret values will also be included in the\n returned details (see [[metabase.models.secret/expand-db-details-inferred-secret-values]] for full details).\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.\n\n Independently of these flags, the implementation of [[metabase.models.interface/to-json]] for `:model/Database` in\n [[metabase.models.database]] uses the implementation of [[metabase.models.interface/can-write?]] for `:model/Database`\n in [[metabase.models.database]] to exclude the `details` field, if the requesting user lacks permission to change the\n database details.", "parameters" : [ { "in" : "path", - "name" : "export-format", + "name" : "id", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "include", + "required" : false, + "schema" : { + "type" : "string", + "enum" : [ "tables", "tables.fields" ] + } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean" + } + }, { + "in" : "query", + "name" : "exclude_uneditable_details", + "required" : false, + "schema" : { + "type" : "boolean" } } ], + "tags" : [ "/api/database" ] + }, + "put" : { + "summary" : "PUT /api/database/{id}", + "description" : "Update a `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "format_rows" : { - "default" : false, - "type" : "boolean" - }, - "pivot_results" : { - "default" : false, - "type" : "boolean" + "points_of_interest" : { + "type" : "string" }, - "query" : { + "settings" : { + "description" : "Value must be a map.", "type" : "object", "properties" : { } }, - "visualization_settings" : { - "default" : { }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "engine" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "details" : { + "description" : "Value must be a map.", "type" : "object", "properties" : { } + }, + "auto_run_queries" : { + "type" : "boolean" + }, + "caveats" : { + "type" : "string" + }, + "refingerprint" : { + "type" : "boolean" + }, + "schedules" : { + "$ref" : "#/components/schemas/metabase.sync.schedules~1ExpandedSchedulesMap" + }, + "description" : { + "type" : "string" } - }, - "required" : [ "query", "visualization_settings", "format_rows", "pivot_results" ] + } } } } }, - "tags" : [ "/api/dataset" ] + "tags" : [ "/api/database" ] + }, + "delete" : { + "summary" : "DELETE /api/database/{id}", + "description" : "Delete a `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/advanced-permissions/application/graph" : { + "/api/database/{id}/autocomplete_suggestions" : { "get" : { - "summary" : "GET /api/ee/advanced-permissions/application/graph", - "description" : "Fetch a graph of Application Permissions.", - "parameters" : [ ], - "tags" : [ "/api/ee/advanced-permissions/application" ] - }, - "put" : { - "summary" : "PUT /api/ee/advanced-permissions/application/graph", - "description" : "Do a batch update of Application Permissions by passing a modified graph.", + "summary" : "GET /api/database/{id}/autocomplete_suggestions", + "description" : "Return a list of autocomplete suggestions for a given `prefix`, or `substring`. Should only specify one, but\n `substring` will have priority if both are present.\n\n This is intended for use with the ACE Editor when the User is typing raw SQL. Suggestions include matching `Tables`\n and `Fields` in this `Database`.\n\n Tables are returned in the format `[table_name \"Table\"]`;\n When Fields have a semantic_type, they are returned in the format `[field_name \"table_name base_type semantic_type\"]`\n When Fields lack a semantic_type, they are returned in the format `[field_name \"table_name base_type\"]`", "parameters" : [ { - "in" : "query", - "name" : "skip-graph", - "required" : false, + "in" : "path", + "name" : "id", + "required" : true, "schema" : { - "type" : "boolean", - "default" : false - } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "prefix", + "required" : false, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", - "name" : "force", + "name" : "substring", "required" : false, "schema" : { - "type" : "boolean", - "default" : false - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { } - } - } - } - }, - "tags" : [ "/api/ee/advanced-permissions/application" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/advanced-permissions/impersonation/" : { + "/api/database/{id}/card_autocomplete_suggestions" : { "get" : { - "summary" : "GET /api/ee/advanced-permissions/impersonation/", - "description" : "Fetch a list of all Impersonation policies currently in effect, or a single policy if both `group_id` and `db_id`\n are provided.", + "summary" : "GET /api/database/{id}/card_autocomplete_suggestions", + "description" : "Return a list of `Card` autocomplete suggestions for a given `query` in a given `Database`.\n\n This is intended for use with the ACE Editor when the User is typing in a template tag for a `Card`, e.g. .", "parameters" : [ { - "in" : "query", - "name" : "group_id", - "required" : false, + "in" : "path", + "name" : "id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 @@ -6652,21 +5225,44 @@ "description" : "value must be an integer greater than zero." }, { "in" : "query", - "name" : "db_id", + "name" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "include_dashboard_questions", "required" : false, + "schema" : { + "type" : "boolean" + } + } ], + "tags" : [ "/api/database" ] + } + }, + "/api/database/{id}/discard_values" : { + "post" : { + "summary" : "POST /api/database/{id}/discard_values", + "description" : "Discards all saved field values for this `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, "schema" : { "type" : "integer", "minimum" : 1 }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/advanced-permissions/impersonation" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/advanced-permissions/impersonation/{id}" : { - "delete" : { - "summary" : "DELETE /api/ee/advanced-permissions/impersonation/{id}", - "description" : "Delete a Connection Impersonation entry.", + "/api/database/{id}/dismiss_spinner" : { + "post" : { + "summary" : "POST /api/database/{id}/dismiss_spinner", + "description" : "Manually set the initial sync status of the `Database` and corresponding\n tables to be `complete` (see #20863)", "parameters" : [ { "in" : "path", "name" : "id", @@ -6677,131 +5273,30 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/advanced-permissions/impersonation" ] - } - }, - "/api/ee/ai-entity-analysis/analyze-chart" : { - "post" : { - "summary" : "POST /api/ee/ai-entity-analysis/analyze-chart", - "description" : "Analyze a chart image using an AI vision model. This function sends the image data to a separate external AI service for analysis.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "image_base64" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "timeline_events" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "description" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "timestamp" : { - "type" : "string" - } - }, - "required" : [ "name", "timestamp" ] - } - } - }, - "required" : [ "image_base64" ] - } - } - } - }, - "tags" : [ "/api/ee/ai-entity-analysis" ] - } - }, - "/api/ee/ai-sql-fixer/fix" : { - "post" : { - "summary" : "POST /api/ee/ai-sql-fixer/fix", - "description" : "Suggest fixes for a SQL query.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "error_message" : { - "type" : "string" - }, - "query" : { - "type" : "object", - "properties" : { - "database" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "database" ] - } - }, - "required" : [ "query", "error_message" ] - } - } - } - }, - "tags" : [ "/api/ee/ai-sql-fixer" ] - } - }, - "/api/ee/ai-sql-generation/generate" : { - "post" : { - "summary" : "POST /api/ee/ai-sql-generation/generate", - "description" : "Generate a SQL query.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "database_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "prompt" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "prompt", "database_id" ] - } - } - } - }, - "tags" : [ "/api/ee/ai-sql-generation" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/audit-app/user/audit-info" : { + "/api/database/{id}/fields" : { "get" : { - "summary" : "GET /api/ee/audit-app/user/audit-info", - "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", - "parameters" : [ ], - "tags" : [ "/api/ee/audit-app/user" ] + "summary" : "GET /api/database/{id}/fields", + "description" : "Get a list of all `Fields` in `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/audit-app/user/{id}/subscriptions" : { - "delete" : { - "summary" : "DELETE /api/ee/audit-app/user/{id}/subscriptions", - "description" : "Delete all Alert and DashboardSubscription subscriptions for a User (i.e., so they will no longer receive them).\n Archive all Alerts and DashboardSubscriptions created by the User. Only allowed for admins or for the current user.", + "/api/database/{id}/healthcheck" : { + "get" : { + "summary" : "GET /api/database/{id}/healthcheck", + "description" : "Reports whether the database can currently connect", "parameters" : [ { "in" : "path", "name" : "id", @@ -6812,84 +5307,30 @@ }, "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/audit-app/user" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/autodescribe/card/summarize" : { - "post" : { - "summary" : "POST /api/ee/autodescribe/card/summarize", - "description" : "Summarize a question.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "visualization_settings" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "dataset" : { - "type" : "boolean" - }, - "dataset_query" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "parameter_mappings" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter-mapping" - } - }, - "collection_position" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "result_metadata" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultsMetadata" - }, - "collection_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "cache_ttl" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "display" : { - "type" : "string", - "minLength" : 1 - }, - "parameters" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.parameters.schema.parameter" - } - }, - "description" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "dataset_query", "display", "visualization_settings" ] - } - } - } - }, - "tags" : [ "/api/ee/autodescribe" ] + "/api/database/{id}/idfields" : { + "get" : { + "summary" : "GET /api/database/{id}/idfields", + "description" : "Get a list of all primary key `Fields` for `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/autodescribe/dashboard/summarize/{id}" : { - "post" : { - "summary" : "POST /api/ee/autodescribe/dashboard/summarize/{id}", - "description" : "Provide a summary of a dashboard.", + "/api/database/{id}/metadata" : { + "get" : { + "summary" : "GET /api/database/{id}/metadata", + "description" : "Get metadata about a `Database`, including all of its `Tables` and `Fields`. Returns DB, fields, and field values.\n By default only non-hidden tables and fields are returned. Passing include_hidden=true includes them.\n\n Passing include_editable_data_model will only return tables for which the current user has data model editing\n permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.\n In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID\n and tables, with no additional metadata.", "parameters" : [ { "in" : "path", "name" : "id", @@ -6899,125 +5340,129 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "include_hidden", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "remove_inactive", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "skip_fields", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } } ], - "tags" : [ "/api/ee/autodescribe" ] - } - }, - "/api/ee/billing/" : { - "get" : { - "summary" : "GET /api/ee/billing/", - "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", - "parameters" : [ ], - "tags" : [ "/api/ee/billing" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/content-translation/csv" : { - "get" : { - "summary" : "GET /api/ee/content-translation/csv", - "description" : "Provides content translation dictionary in CSV", - "parameters" : [ ], - "tags" : [ "/api/ee/content-translation" ] + "/api/database/{id}/rescan_values" : { + "post" : { + "summary" : "POST /api/database/{id}/rescan_values", + "description" : "Trigger a manual scan of the field values for this `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/content-translation/dictionary/{token}" : { + "/api/database/{id}/schema/" : { "get" : { - "summary" : "GET /api/ee/content-translation/dictionary/{token}", - "description" : "Fetch the content translation dictionary via a JSON Web Token signed with the `embedding-secret-key`.", + "summary" : "GET /api/database/{id}/schema/", + "description" : "Return a list of Tables for a Database whose `schema` is `nil` or an empty string.", "parameters" : [ { "in" : "path", - "name" : "token", + "name" : "id", "required" : true, "schema" : { - "type" : "string" + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "include_hidden", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - } ], - "tags" : [ "/api/ee/content-translation" ] - } - }, - "/api/ee/content-translation/upload-dictionary" : { - "post" : { - "summary" : "POST /api/ee/content-translation/upload-dictionary", - "description" : "Upload a CSV of content translations", - "parameters" : [ ], - "requestBody" : { - "content" : { - "multipart/form-data" : { - "schema" : { - "type" : "object", - "properties" : { - "file" : { - "type" : "object", - "properties" : { - "filename" : { - "type" : "string" - }, - "tempfile" : { } - }, - "required" : [ "filename", "tempfile" ] - } - }, - "required" : [ "file" ] - } - } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/content-translation" ] + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/database-routing/destination-database" : { - "post" : { - "summary" : "POST /api/ee/database-routing/destination-database", - "description" : "Create new Destination Databases.\n\n Note that unlike the normal `POST /api/database` endpoint, does NOT check the details before adding the Database.\n\n This is OK, it's not an invariant that all database details are always valid, but it's something to note.", + "/api/database/{id}/schema/{schema}" : { + "get" : { + "summary" : "GET /api/database/{id}/schema/{schema}", + "description" : "Returns a list of Tables for the given Database `id` and `schema`", "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { "in" : "query", - "name" : "check_connection_details", + "name" : "include_hidden", "required" : false, "schema" : { - "type" : "boolean" + "type" : "boolean", + "default" : false } - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "destinations" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "details" : { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, - "name" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "name", "details" ] - } - }, - "router_database_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - } - }, - "required" : [ "router_database_id", "destinations" ] - } - } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/database-routing" ] + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/database-routing/router-database/{id}" : { - "put" : { - "summary" : "PUT /api/ee/database-routing/router-database/{id}", - "description" : "Updates an existing Database with the `user_attribute` to route on. Will either:\n - turn an existing Database into a Router database\n - change the `user_attribute` used to route for an existing Router database, or\n - turn a Router database into a regular Database\n depending on the value of `user_attribute`", + "/api/database/{id}/schemas" : { + "get" : { + "summary" : "GET /api/database/{id}/schemas", + "description" : "Returns a list of all the schemas with tables found for the database `id`. Excludes schemas with no tables.", "parameters" : [ { "in" : "path", "name" : "id", @@ -7027,244 +5472,121 @@ "minimum" : 1 }, "description" : "value must be an integer greater than zero." - } ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "user_attribute" : { - "type" : "string", - "minLength" : 1 - } - } - } - } + }, { + "in" : "query", + "name" : "include_editable_data_model", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/database-routing" ] - } - }, - "/api/ee/gsheets/connection" : { - "post" : { - "summary" : "POST /api/ee/gsheets/connection", - "description" : "Hook up a new google drive folder or sheet that will be watched and have its content ETL'd into Metabase.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "url" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "url" ] - } - } + }, { + "in" : "query", + "name" : "include_hidden", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false } - }, - "tags" : [ "/api/ee/gsheets" ] - }, - "get" : { - "summary" : "GET /api/ee/gsheets/connection", - "description" : "Check the status of a connection. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/gsheets/connection", - "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/gsheets/connection/sync" : { + "/api/database/{id}/sync_schema" : { "post" : { - "summary" : "POST /api/ee/gsheets/connection/sync", - "description" : "Force a sync of the connection now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] + "summary" : "POST /api/database/{id}/sync_schema", + "description" : "Trigger a manual update of the schema metadata for this `Database`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/gsheets/service-account" : { + "/api/database/{id}/syncable_schemas" : { "get" : { - "summary" : "GET /api/ee/gsheets/service-account", - "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", - "parameters" : [ ], - "tags" : [ "/api/ee/gsheets" ] + "summary" : "GET /api/database/{id}/syncable_schemas", + "description" : "Returns a list of all syncable schemas found for the database `id`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/database" ] } }, - "/api/ee/logs/query_execution/{yyyy-mm}" : { + "/api/database/{id}/usage_info" : { "get" : { - "summary" : "GET /api/ee/logs/query_execution/{yyyy-mm}", - "description" : "Fetch rows for the month specified by `:yyyy-mm` from the query_execution logs table.\n Must be a superuser.", + "summary" : "GET /api/database/{id}/usage_info", + "description" : "Get usage info for a database.\n Returns a map with keys are models and values are the number of entities that use this database.", "parameters" : [ { "in" : "path", - "name" : "yyyy-mm", + "name" : "id", "required" : true, "schema" : { - "type" : "string", - "pattern" : "\\d{4}-\\d{2}" + "type" : "integer", + "minimum" : 1 }, - "description" : "Must be a string like 2020-04 or 2222-11." + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/logs" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/answer-sources" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/answer-sources", - "description" : "Return top level meta information about available information sources.", + "/api/database/{virtual-db}/datasets" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/datasets", + "description" : "Returns a list of all the datasets found for the saved questions virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.answer-sources-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/create-dashboard-subscription" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/create-dashboard-subscription", - "description" : "Create a dashboard subscription.", + "/api/database/{virtual-db}/datasets/{schema}" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", + "description" : "Returns a list of Tables for the datasets virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/field-values" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/field-values", - "description" : "Return statistics and/or values for a given field of a given entity.", + "/api/database/{virtual-db}/metadata" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/metadata", + "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/filter-records" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/filter-records", - "description" : "Construct a query from a metric.", + "/api/database/{virtual-db}/schema/{schema}" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/schema/{schema}", + "description" : "Returns a list of Tables for the saved questions virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.filter-records-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/find-metric" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/find-metric", - "description" : "Find a metric matching a description.", + "/api/database/{virtual-db}/schemas" : { + "get" : { + "summary" : "GET /api/database/{virtual-db}/schemas", + "description" : "Returns a list of all the schemas found for the saved questions virtual database.", "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "type" : "object", - "properties" : { - "message" : { - "type" : "string" - } - }, - "required" : [ "message" ] - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/database" ] } }, - "/api/ee/metabot-tools/find-outliers" : { + "/api/dataset/" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/find-outliers", - "description" : "Find outliers in the values provided by a data source for a given column.", + "summary" : "POST /api/dataset/", + "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7272,27 +5594,21 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "database" : { + "type" : "integer" } - }, - "required" : [ "arguments", "conversation_id" ] + } } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/generate-insights" : { + "/api/dataset/native" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/generate-insights", - "description" : "Generate insights.", + "summary" : "POST /api/dataset/native", + "description" : "Fetch a native version of an MBQL query.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7300,106 +5616,116 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" + "database" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "pretty" : { + "type" : "boolean", + "default" : true } }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-tools/get-current-user" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/get-current-user", - "description" : "Get information about user that started the conversation.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.tool-request" + "required" : [ "database" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-dashboard-details" : { + "/api/dataset/parameter/search/{query}" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-dashboard-details", - "description" : "Get information about a given dashboard.", - "parameters" : [ ], + "summary" : "POST /api/dataset/parameter/search/{query}", + "description" : "Return parameter values for cards or dashboards that are being edited. Expects a query string at `?query=foo`.", + "parameters" : [ { + "in" : "path", + "name" : "query", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "arguments" : { + "field_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "parameter" : { + "description" : "parameter must be a map with :id and :type keys", "type" : "object", "properties" : { - "dashboard_id" : { - "type" : "integer" - } + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } }, - "required" : [ "dashboard_id" ] - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] - } - } - } - }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-tools/get-metric-details" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/get-metric-details", - "description" : "Get information about a given metric.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "required" : [ "id", "type" ] } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "parameter" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-query-details" : { + "/api/dataset/parameter/values" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-query-details", - "description" : "Get information about a given query.", + "summary" : "POST /api/dataset/parameter/values", + "description" : "Return parameter values for cards or dashboards that are being edited.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7407,34 +5733,79 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { + "field_ids" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "parameter" : { + "description" : "parameter must be a map with :id and :type keys", "type" : "object", "properties" : { - "query" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { "type" : "object", - "properties" : { } - } + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } }, - "required" : [ "query" ] - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "required" : [ "id", "type" ] } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "parameter" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-report-details" : { + "/api/dataset/pivot" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-report-details", - "description" : "Get information about a given report.", + "summary" : "POST /api/dataset/pivot", + "description" : "Generate a pivoted dataset for an ad-hoc query", "parameters" : [ ], "requestBody" : { "content" : { @@ -7442,27 +5813,23 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "database" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } - }, - "required" : [ "arguments", "conversation_id" ] + } } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/get-table-details" : { + "/api/dataset/query_metadata" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/get-table-details", - "description" : "Get information about a given table or model.", + "summary" : "POST /api/dataset/query_metadata", + "description" : "Get all of the required query metadata for an ad-hoc query.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7470,107 +5837,135 @@ "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "database" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "database" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/query-metric" : { + "/api/dataset/{export-format}" : { "post" : { - "summary" : "POST /api/ee/metabot-tools/query-metric", - "description" : "Construct a query from a metric.", - "parameters" : [ ], + "summary" : "POST /api/dataset/{export-format}", + "description" : "Execute a query and download the result data as a file in the specified format.", + "parameters" : [ { + "in" : "path", + "name" : "export-format", + "required" : true, + "schema" : { + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] + } + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" + "format_rows" : { + "default" : false, + "type" : "boolean" }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + "pivot_results" : { + "default" : false, + "type" : "boolean" + }, + "query" : { + "type" : "object", + "properties" : { } + }, + "visualization_settings" : { + "default" : { }, + "type" : "object", + "properties" : { } } }, - "required" : [ "arguments", "conversation_id" ] + "required" : [ "query", "visualization_settings", "format_rows", "pivot_results" ] } } } }, - "tags" : [ "/api/ee/metabot-tools" ] + "tags" : [ "/api/dataset" ] } }, - "/api/ee/metabot-tools/query-model" : { - "post" : { - "summary" : "POST /api/ee/metabot-tools/query-model", - "description" : "Construct a query from a model.", + "/api/ee/advanced-permissions/application/graph" : { + "get" : { + "summary" : "GET /api/ee/advanced-permissions/application/graph", + "description" : "Fetch a graph of Application Permissions.", "parameters" : [ ], + "tags" : [ "/api/ee/advanced-permissions/application" ] + }, + "put" : { + "summary" : "PUT /api/ee/advanced-permissions/application/graph", + "description" : "Do a batch update of Application Permissions by passing a modified graph.", + "parameters" : [ { + "in" : "query", + "name" : "skip-graph", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + }, { + "in" : "query", + "name" : "force", + "required" : false, + "schema" : { + "type" : "boolean", + "default" : false + } + } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", - "properties" : { - "arguments" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.query-model-arguments" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - } - }, - "required" : [ "arguments", "conversation_id" ] + "properties" : { } } } } }, - "tags" : [ "/api/ee/metabot-tools" ] - } - }, - "/api/ee/metabot-v3/metabot/" : { - "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/", - "description" : "List configured metabot instances", - "parameters" : [ ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/advanced-permissions/application" ] } }, - "/api/ee/metabot-v3/metabot/{id}" : { + "/api/ee/advanced-permissions/impersonation/" : { "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/{id}", - "description" : "Retrieve one metabot instance", + "summary" : "GET /api/ee/advanced-permissions/impersonation/", + "description" : "Fetch a list of all Impersonation policies currently in effect, or a single policy if both `group_id` and `db_id`\n are provided.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, + "in" : "query", + "name" : "group_id", + "required" : false, "schema" : { "type" : "integer", "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "db_id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, - "/api/ee/metabot-v3/metabot/{id}/entities" : { - "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/{id}/entities", - "description" : "List the entities this metabot has access to", + "/api/ee/advanced-permissions/impersonation/{id}" : { + "delete" : { + "summary" : "DELETE /api/ee/advanced-permissions/impersonation/{id}", + "description" : "Delete a Connection Impersonation entry.", "parameters" : [ { "in" : "path", "name" : "id", @@ -7578,13 +5973,24 @@ "schema" : { "type" : "integer", "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - }, - "put" : { - "summary" : "PUT /api/ee/metabot-v3/metabot/{id}/entities", - "description" : "Update the entities this metabot has access to", + "tags" : [ "/api/ee/advanced-permissions/impersonation" ] + } + }, + "/api/ee/audit-app/user/audit-info" : { + "get" : { + "summary" : "GET /api/ee/audit-app/user/audit-info", + "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", + "parameters" : [ ], + "tags" : [ "/api/ee/audit-app/user" ] + } + }, + "/api/ee/audit-app/user/{id}/subscriptions" : { + "delete" : { + "summary" : "DELETE /api/ee/audit-app/user/{id}/subscriptions", + "description" : "Delete all Alert and DashboardSubscription subscriptions for a User (i.e., so they will no longer receive them).\n Archive all Alerts and DashboardSubscriptions created by the User. Only allowed for admins or for the current user.", "parameters" : [ { "in" : "path", "name" : "id", @@ -7592,44 +5998,150 @@ "schema" : { "type" : "integer", "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], + "tags" : [ "/api/ee/audit-app/user" ] + } + }, + "/api/ee/autodescribe/card/summarize" : { + "post" : { + "summary" : "POST /api/ee/autodescribe/card/summarize", + "description" : "Summarize a question.", + "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "items" : { + "visualization_settings" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "dataset" : { + "type" : "boolean" + }, + "dataset_query" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "parameter_mappings" : { "type" : "array", "items" : { + "description" : "parameter_mapping must be a map with :parameter_id and :target keys", "type" : "object", "properties" : { - "id" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", "type" : "integer", "minimum" : 1 }, - "model" : { - "type" : "string", - "enum" : [ "dataset", "metric", "collection" ] - } + "parameter_id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "target" : { } + }, + "required" : [ "parameter_id", "target" ] + } + }, + "collection_position" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "result_metadata" : { + "$ref" : "#/components/schemas/metabase.analyze.query-results~1ResultsMetadata" + }, + "collection_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "cache_ttl" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "display" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "parameters" : { + "type" : "array", + "items" : { + "description" : "parameter must be a map with :id and :type keys", + "type" : "object", + "properties" : { + "sectionId" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "values_source_config" : { + "type" : "object", + "properties" : { + "card_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "label_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "value_field" : { + "description" : "value must an array with :field id-or-name and an options map" + }, + "values" : { } + } + }, + "id" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "name" : { + "type" : "string" + }, + "slug" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "minLength" : 1 + }, + "temporal_units" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing~1unit" + } + }, + "values_source_type" : { + "enum" : [ "static-list", "card", null ] + }, + "default" : { } }, - "required" : [ "id", "model" ] + "required" : [ "id", "type" ] } + }, + "description" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, - "required" : [ "items" ] + "required" : [ "dataset_query", "display", "visualization_settings" ] } } } }, - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/autodescribe" ] } }, - "/api/ee/metabot-v3/metabot/{id}/entities/{model}/{model-id}" : { - "delete" : { - "summary" : "DELETE /api/ee/metabot-v3/metabot/{id}/entities/{model}/{model-id}", - "description" : "Remove an entity from this metabot's access list", + "/api/ee/autodescribe/dashboard/summarize/{id}" : { + "post" : { + "summary" : "POST /api/ee/autodescribe/dashboard/summarize/{id}", + "description" : "Provide a summary of a dashboard.", "parameters" : [ { "in" : "path", "name" : "id", @@ -7637,100 +6149,74 @@ "schema" : { "type" : "integer", "minimum" : 1 - } - }, { - "in" : "path", - "name" : "model", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "dataset", "metric", "collection" ] - } - }, { - "in" : "path", - "name" : "model-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + "tags" : [ "/api/ee/autodescribe" ] } }, - "/api/ee/metabot-v3/metabot/{id}/prompt-suggestions" : { + "/api/ee/billing/" : { "get" : { - "summary" : "GET /api/ee/metabot-v3/metabot/{id}/prompt-suggestions", - "description" : "Return the prompt suggestions for the metabot instance with `id`.", + "summary" : "GET /api/ee/billing/", + "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", + "parameters" : [ ], + "tags" : [ "/api/ee/billing" ] + } + }, + "/api/ee/database-routing/destination-database" : { + "post" : { + "summary" : "POST /api/ee/database-routing/destination-database", + "description" : "Create new destination Databases.\n\n Note that unlike the normal `POST /api/database` endpoint, does NOT check the details before adding the Database.\n\n This is OK, it's not an invariant that all database details are always valid, but it's something to note.", "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } - }, { "in" : "query", - "name" : "sample", + "name" : "check_connection_details", "required" : false, "schema" : { "type" : "boolean" } - }, { - "in" : "query", - "name" : "model", - "required" : false, - "schema" : { - "type" : "string", - "enum" : [ "metric", "model" ] - } - }, { - "in" : "query", - "name" : "model_id", - "required" : false, - "schema" : { - "type" : "integer", - "minimum" : 1 - } - } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - }, - "delete" : { - "summary" : "DELETE /api/ee/metabot-v3/metabot/{id}/prompt-suggestions", - "description" : "Delete all prompt suggestions for the metabot instance with `id`.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - } - }, - "/api/ee/metabot-v3/metabot/{id}/prompt-suggestions/regenerate" : { - "post" : { - "summary" : "POST /api/ee/metabot-v3/metabot/{id}/prompt-suggestions/regenerate", - "description" : "Remove any existing prompt suggestions for the Metabot instance with `id` and generate new ones.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "destinations" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "details" : { + "description" : "Value must be a map.", + "type" : "object", + "properties" : { } + }, + "name" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "name", "details" ] + } + }, + "router_database_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "router_database_id", "destinations" ] + } + } } - } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] + }, + "tags" : [ "/api/ee/database-routing" ] } }, - "/api/ee/metabot-v3/metabot/{id}/prompt-suggestions/{prompt-id}" : { - "delete" : { - "summary" : "DELETE /api/ee/metabot-v3/metabot/{id}/prompt-suggestions/{prompt-id}", - "description" : "Delete the prompt suggestion with ID `prompt-id` for the metabot instance with `id`.", + "/api/ee/database-routing/router-database/{id}" : { + "put" : { + "summary" : "PUT /api/ee/database-routing/router-database/{id}", + "description" : "Updates an existing Database with the `user_attribute` to route on. Will either:\n - turn an existing Database into a Router database\n - change the `user_attribute` used to route for an existing Router database, or\n - turn a Router database into a regular Database\n depending on the value of `user_attribute`", "parameters" : [ { "in" : "path", "name" : "id", @@ -7738,65 +6224,31 @@ "schema" : { "type" : "integer", "minimum" : 1 - } - }, { - "in" : "path", - "name" : "prompt-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/metabot-v3/metabot" ] - } - }, - "/api/ee/metabot-v3/v2/agent" : { - "post" : { - "summary" : "POST /api/ee/metabot-v3/v2/agent", - "description" : "Send a chat message to the LLM via the AI Service.", - "parameters" : [ ], "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", "properties" : { - "context" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.context.context" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "history" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.messages" - }, - "message" : { - "type" : "string", - "minLength" : 1 - }, - "metabot_id" : { - "type" : "string" - }, - "state" : { - "type" : "object", - "properties" : { } + "user_attribute" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } - }, - "required" : [ "message", "context", "conversation_id", "state" ] + } } } } }, - "tags" : [ "/api/ee/metabot-v3" ] + "tags" : [ "/api/ee/database-routing" ] } }, - "/api/ee/metabot-v3/v2/agent-streaming" : { + "/api/ee/gsheets/connection" : { "post" : { - "summary" : "POST /api/ee/metabot-v3/v2/agent-streaming", - "description" : "Send a chat message to the LLM via the AI Proxy.", + "summary" : "POST /api/ee/gsheets/connection", + "description" : "Hook up a new google drive folder that will be watched and have its content ETL'd into Metabase.", "parameters" : [ ], "requestBody" : { "content" : { @@ -7804,66 +6256,95 @@ "schema" : { "type" : "object", "properties" : { - "context" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.context.context" - }, - "conversation_id" : { - "description" : "value must be a valid UUID.", - "type" : "string", - "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" - }, - "history" : { - "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.client.schema.messages" - }, - "message" : { - "type" : "string", - "minLength" : 1 - }, - "metabot_id" : { - "type" : "string" - }, - "state" : { - "type" : "object", - "properties" : { } + "url" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, - "required" : [ "message", "context", "conversation_id", "state" ] + "required" : [ "url" ] } } } }, - "tags" : [ "/api/ee/metabot-v3" ] + "tags" : [ "/api/ee/gsheets" ] + }, + "get" : { + "summary" : "GET /api/ee/gsheets/connection", + "description" : "Check the status of a newly created gsheets folder creation. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] + }, + "delete" : { + "summary" : "DELETE /api/ee/gsheets/connection", + "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] + } + }, + "/api/ee/gsheets/folder/sync" : { + "post" : { + "summary" : "POST /api/ee/gsheets/folder/sync", + "description" : "Force a sync of the folder now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] + } + }, + "/api/ee/gsheets/service-account" : { + "get" : { + "summary" : "GET /api/ee/gsheets/service-account", + "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", + "parameters" : [ ], + "tags" : [ "/api/ee/gsheets" ] } }, - "/api/ee/permission_debug/" : { + "/api/ee/logs/query_execution/{yyyy-mm}" : { "get" : { - "summary" : "GET /api/ee/permission_debug/", - "description" : "This endpoint expects a `user_id`, a `model_id` to debug permissions against, and `action_type`.\n The type of model we are debugging against is inferred by the `action_type`.\n\n It will return:\n - `decision`: The overall permission decision (\"allow\", \"denied\", or \"limited\")\n - `model-type`: The type of model being checked (e.g., \"question\")\n - `model-id`: The ID of the model being checked\n - `segment`: A set of segmentation types applied (e.g., \"sandboxed\", \"impersonated\", \"routed\")\n - `message`: A sequence of strings explaining the decision\n - `data`: A map containing details about permissions (table or collection names to group names)\n - `suggestions`: A map of group IDs to group names that could provide access\n\n Example requests:\n - Check if user can read a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/read`\n - Check if user can query a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/query`\n - Check if user can download data: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/download-data`\n\n Example responses:\n - Allowed access:\n ```json\n {\n \"decision\": \"allow\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to read this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```\n - Denied access with blocked table:\n ```json\n {\n \"decision\": \"denied\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User does not have permission to query this card\"],\n \"data\": {\"sample-db.PUBLIC.ORDERS\": [\"All Users\"]},\n \"suggestions\": {}\n }\n ```\n - Limited access:\n ```json\n {\n \"decision\": \"limited\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to download some data from this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```", + "summary" : "GET /api/ee/logs/query_execution/{yyyy-mm}", + "description" : "Fetch rows for the month specified by `:yyyy-mm` from the query_execution logs table.\n Must be a superuser.", "parameters" : [ { - "in" : "query", - "name" : "user_id", + "in" : "path", + "name" : "yyyy-mm", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - } - }, { + "type" : "string", + "pattern" : "\\d{4}-\\d{2}" + }, + "description" : "Must be a string like 2020-04 or 2222-11." + } ], + "tags" : [ "/api/ee/logs" ] + } + }, + "/api/ee/query-reference-validation/invalid-cards" : { + "get" : { + "summary" : "GET /api/ee/query-reference-validation/invalid-cards", + "description" : "List of cards that have an invalid reference in their query. Shape of each card is standard, with the addition of an\n `errors` key. Supports pagination (`offset` and `limit`), so it returns something in the shape:\n\n ```\n {:total 200\n :data [card1, card2, ...]\n :limit 50\n :offset 100\n ```", + "parameters" : [ { "in" : "query", - "name" : "model_id", - "required" : true, + "name" : "sort_column", + "required" : false, "schema" : { - "type" : "string" + "type" : "string", + "enum" : [ "collection", "created_by", "name", "last_edited_at" ] } }, { "in" : "query", - "name" : "action_type", - "required" : true, + "name" : "sort_direction", + "required" : false, "schema" : { "type" : "string", - "enum" : [ "card/read", "card/query", "card/download-data" ] + "enum" : [ "desc", "asc" ] } + }, { + "in" : "query", + "name" : "collection_id", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], - "tags" : [ "/api/ee/permission_debug" ] + "tags" : [ "/api/ee/query-reference-validation" ] } }, "/api/ee/scim/api_key" : { @@ -7907,9 +6388,9 @@ "name" : "filter", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -7924,12 +6405,12 @@ "type" : "object", "properties" : { "displayName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "members" : { "type" : "array", @@ -7937,12 +6418,12 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -7951,8 +6432,8 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -7973,9 +6454,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -7990,12 +6471,12 @@ "type" : "object", "properties" : { "displayName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "members" : { "type" : "array", @@ -8003,12 +6484,12 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -8017,8 +6498,8 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -8037,9 +6518,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] } @@ -8071,9 +6552,9 @@ "name" : "filter", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -8099,12 +6580,12 @@ "type" : "boolean" }, "type" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -8116,28 +6597,28 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "display" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value", "display" ] } }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "locale" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "name" : { "type" : "object", @@ -8154,13 +6635,13 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "userName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "schemas", "userName", "name", "emails" ] @@ -8180,9 +6661,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/ee/scim/v2" ] }, @@ -8208,12 +6689,12 @@ "type" : "boolean" }, "type" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value" ] @@ -8225,28 +6706,28 @@ "type" : "object", "properties" : { "$ref" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "display" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "value", "display" ] } }, "id" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "locale" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "name" : { "type" : "object", @@ -8263,13 +6744,13 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "userName" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "schemas", "userName", "name", "emails" ] @@ -8287,9 +6768,9 @@ "name" : "id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "requestBody" : { "content" : { @@ -8303,13 +6784,13 @@ "type" : "object", "properties" : { "op" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "value" : { "anyOf" : [ { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, { "type" : "boolean" } ] @@ -8321,8 +6802,8 @@ "schemas" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -8568,30 +7049,6 @@ "tags" : [ "/api/ee/upload-management" ] } }, - "/api/eid-translation/translate" : { - "post" : { - "summary" : "POST /api/eid-translation/translate", - "description" : "Translate entity IDs to model IDs.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "entity_ids" : { - "type" : "object", - "properties" : { } - } - }, - "required" : [ "entity_ids" ] - } - } - } - }, - "tags" : [ "/api/eid-translation" ] - } - }, "/api/email/" : { "put" : { "summary" : "PUT /api/email/", @@ -8639,10 +7096,10 @@ "tags" : [ "/api/embed" ] } }, - "/api/embed/card/{token}/params/{param-key}/remapping" : { + "/api/embed/card/{token}/field/{field-id}/remapping/{remapped-id}" : { "get" : { - "summary" : "GET /api/embed/card/{token}/params/{param-key}/remapping", - "description" : "Embedded version of api.card filter values endpoint.", + "summary" : "GET /api/embed/card/{token}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with\n embedded Cards.", "parameters" : [ { "in" : "path", "name" : "token", @@ -8652,18 +7109,104 @@ } }, { "in" : "path", - "name" : "param-key", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/card/{token}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/embed/card/{token}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by an embedded Card.", + "parameters" : [ { + "in" : "path", + "name" : "token", "required" : true, "schema" : { "type" : "string" } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "value", "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/card/{token}/field/{field-id}/values" : { + "get" : { + "summary" : "GET /api/embed/card/{token}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is referenced by an embedded Card.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, "schema" : { "type" : "string" } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/embed" ] } @@ -8729,7 +7272,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } }, { "in" : "query", @@ -8826,7 +7370,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } }, { "in" : "query", @@ -8848,11 +7393,118 @@ "tags" : [ "/api/embed" ] } }, - "/api/embed/dashboard/{token}/params/{param-key}/remapping" : { + "/api/embed/dashboard/{token}/field/{field-id}/remapping/{remapped-id}" : { "get" : { - "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/remapping", - "description" : "Embedded version of the remapped dashboard param value endpoint.", - "parameters" : [ ], + "summary" : "GET /api/embed/dashboard/{token}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with\n embedded Dashboards.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/dashboard/{token}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/embed/dashboard/{token}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by a Card in an embedded Dashboard.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/embed" ] + } + }, + "/api/embed/dashboard/{token}/field/{field-id}/values" : { + "get" : { + "summary" : "GET /api/embed/dashboard/{token}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is used as a param in an embedded Dashboard.", + "parameters" : [ { + "in" : "path", + "name" : "token", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], "tags" : [ "/api/embed" ] } }, @@ -9118,8 +7770,8 @@ "type" : "object", "properties" : { "points_of_interest" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "settings" : { "description" : "Value must be a map.", @@ -9140,26 +7792,26 @@ "description" : "value must be a valid field semantic or relation type (keyword or string)." }, "has_field_values" : { - "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" + "$ref" : "#/components/schemas/metabase.lib.schema.metadata~1column.has-field-values" }, "display_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "nfc_path" : { "type" : "array", "items" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "caveats" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "description" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "fk_target_field_id" : { "description" : "value must be an integer greater than zero.", @@ -9200,8 +7852,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "type" : { "type" : "string", @@ -9292,9 +7944,9 @@ "name" : "value", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/field" ] } @@ -9319,7 +7971,7 @@ "/api/field/{id}/search/{search-id}" : { "get" : { "summary" : "GET /api/field/{id}/search/{search-id}", - "description" : "Search for values of a Field with `search-id` that start with `value`. See docstring for\n [[metabase.parameters.field/search-values]] for a more detailed explanation.", + "description" : "Search for values of a Field with `search-id` that start with `value`. See docstring for\n `metabase.api.field/search-values` for a more detailed explanation.", "parameters" : [ { "in" : "path", "name" : "id", @@ -9343,9 +7995,9 @@ "name" : "value", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/field" ] } @@ -9407,13 +8059,15 @@ "items" : { "anyOf" : [ { "type" : "array", - "prefixItems" : [ { } ] + "items" : [ { } ], + "additionalItems" : false }, { "type" : "array", - "prefixItems" : [ { }, { - "type" : "string", - "minLength" : 1 - } ] + "items" : [ { }, { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } ], + "additionalItems" : false } ] } } @@ -9435,9 +8089,9 @@ "name" : "url", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/geojson" ] } @@ -9445,15 +8099,15 @@ "/api/geojson/{key}" : { "get" : { "summary" : "GET /api/geojson/{key}", - "description" : "Fetch a custom GeoJSON file as defined in the [[metabase.geojson.settings/custom-geojson]] setting. (This just acts\n as a simple proxy for the file specified for `key`).", + "description" : "Fetch a custom GeoJSON file as defined in the `custom-geojson` setting. (This just acts as a simple proxy for the\n file specified for `key`).", "parameters" : [ { "in" : "path", "name" : "key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/geojson" ] } @@ -9533,9 +8187,14 @@ "type" : "integer" }, "duration_unit" : { - "$ref" : "#/components/schemas/metabase.logger.api.time-unit" + "$ref" : "#/components/schemas/metabase.api.logger~1time-unit" }, - "log_levels" : { } + "log_levels" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/metabase.api.logger~1log-level" + } + } }, "required" : [ "duration", "duration_unit", "log_levels" ] } @@ -9551,14 +8210,6 @@ "tags" : [ "/api/logger" ] } }, - "/api/logger/logs" : { - "get" : { - "summary" : "GET /api/logger/logs", - "description" : "Logs.", - "parameters" : [ ], - "tags" : [ "/api/logger" ] - } - }, "/api/logger/presets" : { "get" : { "summary" : "GET /api/logger/presets", @@ -10053,7 +8704,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.models.FullyHydratedNotification" + "$ref" : "#/components/schemas/metabase.notification.models~1FullyHydratedNotification" } } } @@ -10070,7 +8721,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.models.FullyHydratedNotification" + "$ref" : "#/components/schemas/metabase.notification.models~1FullyHydratedNotification" } } } @@ -10173,7 +8824,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.models.FullyHydratedNotification" + "$ref" : "#/components/schemas/metabase.notification.models~1FullyHydratedNotification" } } } @@ -10253,8 +8904,8 @@ "default" : false }, "table_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ ] @@ -10295,8 +8946,8 @@ "minimum" : 1 }, "table_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } } @@ -10327,12 +8978,12 @@ "type" : "object", "properties" : { "schema_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "table_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "schema_name", "table_name" ] @@ -10435,8 +9086,8 @@ "type" : "object", "properties" : { "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "name" ] @@ -10468,8 +9119,8 @@ "type" : "object", "properties" : { "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "name" ] @@ -10754,9 +9405,8 @@ "type" : "object", "properties" : { "cron" : { - "description" : "Value must be a string representing a cron schedule of format ", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "cron" ] @@ -10801,38 +9451,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - } ], - "tags" : [ "/api/preview_embed" ] - } - }, - "/api/preview_embed/card/{token}/params/{param-key}/remapping" : { - "get" : { - "summary" : "GET /api/preview_embed/card/{token}/params/{param-key}/remapping", - "description" : "Embedded version of api.card filter values endpoint.", - "parameters" : [ { - "in" : "path", - "name" : "token", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "path", - "name" : "param-key", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "value", - "required" : true, - "schema" : { - "type" : "string" - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10846,9 +9467,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10862,9 +9483,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10878,9 +9499,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "dashcard-id", @@ -10903,14 +9524,6 @@ "tags" : [ "/api/preview_embed" ] } }, - "/api/preview_embed/dashboard/{token}/params/{param-key}/remapping" : { - "get" : { - "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/remapping", - "description" : "Embedded version of the remapped dashboard param value endpoint.", - "parameters" : [ ], - "tags" : [ "/api/preview_embed" ] - } - }, "/api/preview_embed/dashboard/{token}/params/{param-key}/values" : { "get" : { "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/values", @@ -10928,9 +9541,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/preview_embed" ] } @@ -10944,9 +9557,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "dashcard-id", @@ -10969,38 +9582,6 @@ "tags" : [ "/api/preview_embed" ] } }, - "/api/product-feedback/" : { - "post" : { - "summary" : "POST /api/product-feedback/", - "description" : "Endpoint to provide feedback from the product", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "comments" : { - "type" : "string", - "minLength" : 1 - }, - "email" : { - "type" : "string", - "minLength" : 1 - }, - "source" : { - "type" : "string", - "minLength" : 1 - } - }, - "required" : [ "source" ] - } - } - } - }, - "tags" : [ "/api/product-feedback" ] - } - }, "/api/public/action/{uuid}" : { "get" : { "summary" : "GET /api/public/action/{uuid}", @@ -11067,10 +9648,10 @@ "tags" : [ "/api/public" ] } }, - "/api/public/card/{uuid}/params/{param-key}/remapping" : { + "/api/public/card/{uuid}/field/{field-id}/remapping/{remapped-id}" : { "get" : { - "summary" : "GET /api/public/card/{uuid}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for the given `value` of parameter with ID `:param-key` of card with UUID `uuid`.", + "summary" : "GET /api/public/card/{uuid}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with public\n Cards.", "parameters" : [ { "in" : "path", "name" : "uuid", @@ -11082,17 +9663,108 @@ "description" : "value must be a valid UUID." }, { "in" : "path", - "name" : "param-key", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/card/{uuid}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/public/card/{uuid}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by a public Card.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", "required" : true, "schema" : { "type" : "string", - "minLength" : 1 - } + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." }, { "in" : "query", "name" : "value", "required" : true, - "schema" : { } + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/card/{uuid}/field/{field-id}/values" : { + "get" : { + "summary" : "GET /api/public/card/{uuid}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is referenced by a public Card.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", + "required" : true, + "schema" : { + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/public" ] } @@ -11115,17 +9787,17 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "query", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11148,9 +9820,9 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11198,7 +9870,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } }, { "in" : "query", @@ -11324,7 +9997,8 @@ "name" : "export-format", "required" : true, "schema" : { - "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" + "type" : "string", + "enum" : [ "csv", "api", "xlsx", "json" ] } } ], "requestBody" : { @@ -11430,10 +10104,105 @@ "tags" : [ "/api/public" ] } }, - "/api/public/dashboard/{uuid}/params/{param-key}/remapping" : { + "/api/public/dashboard/{uuid}/field/{field-id}/remapping/{remapped-id}" : { + "get" : { + "summary" : "GET /api/public/dashboard/{uuid}/field/{field-id}/remapping/{remapped-id}", + "description" : "Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:remapped-id`, but for use with public\n Dashboards.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", + "required" : true, + "schema" : { + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "remapped-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/dashboard/{uuid}/field/{field-id}/search/{search-field-id}" : { + "get" : { + "summary" : "GET /api/public/dashboard/{uuid}/field/{field-id}/search/{search-field-id}", + "description" : "Search for values of a Field that is referenced by a Card in a public Dashboard.", + "parameters" : [ { + "in" : "path", + "name" : "uuid", + "required" : true, + "schema" : { + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "description" : "value must be a valid UUID." + }, { + "in" : "path", + "name" : "field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "path", + "name" : "search-field-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + }, { + "in" : "query", + "name" : "value", + "required" : true, + "schema" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." + }, { + "in" : "query", + "name" : "limit", + "required" : false, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "tags" : [ "/api/public" ] + } + }, + "/api/public/dashboard/{uuid}/field/{field-id}/values" : { "get" : { - "summary" : "GET /api/public/dashboard/{uuid}/params/{param-key}/remapping", - "description" : "Fetch the remapped value for the given `value` of parameter with ID `:param-key` of dashboard with UUID `uuid`.", + "summary" : "GET /api/public/dashboard/{uuid}/field/{field-id}/values", + "description" : "Fetch FieldValues for a Field that is referenced by a Card in a public Dashboard.", "parameters" : [ { "in" : "path", "name" : "uuid", @@ -11445,17 +10214,13 @@ "description" : "value must be a valid UUID." }, { "in" : "path", - "name" : "param-key", + "name" : "field-id", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } - }, { - "in" : "query", - "name" : "value", - "required" : true, - "schema" : { } + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." } ], "tags" : [ "/api/public" ] } @@ -11478,17 +10243,17 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "query", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11511,9 +10276,9 @@ "name" : "param-key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/public" ] } @@ -11527,9 +10292,9 @@ "name" : "url", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "format", @@ -11833,8 +10598,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "parameters" : { "type" : "array", @@ -11961,8 +10726,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "skip_if_empty" : { "type" : "boolean", @@ -12086,8 +10851,8 @@ "minimum" : 1 }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "parameters" : { "type" : "array", @@ -12220,9 +10985,9 @@ "name" : "q", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "context", @@ -12271,9 +11036,9 @@ "name" : "created_at", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "created_by", @@ -12291,9 +11056,9 @@ "name" : "last_edited_at", "required" : false, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "query", "name" : "last_edited_by", @@ -12450,8 +11215,8 @@ "type" : "string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "table_id" : { "description" : "value must be an integer greater than zero.", @@ -12522,15 +11287,15 @@ "type" : "string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "points_of_interest" : { "type" : "string" }, "revision_message" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "show_in_getting_started" : { "type" : "boolean" @@ -12560,9 +11325,9 @@ "name" : "revision_message", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/segment" ] } @@ -12596,12 +11361,12 @@ "type" : "object", "properties" : { "password" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "username" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "username", "password" ] @@ -12654,8 +11419,8 @@ "type" : "object", "properties" : { "token" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "token" ] @@ -12666,30 +11431,6 @@ "tags" : [ "/api/session" ] } }, - "/api/session/password-check" : { - "post" : { - "summary" : "POST /api/session/password-check", - "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "object", - "properties" : { - "password" : { - "description" : "password is too common.", - "type" : "string" - } - }, - "required" : [ "password" ] - } - } - } - }, - "tags" : [ "/api/session" ] - } - }, "/api/session/password_reset_token_valid" : { "get" : { "summary" : "GET /api/session/password_reset_token_valid", @@ -12699,9 +11440,9 @@ "name" : "token", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/session" ] } @@ -12730,8 +11471,8 @@ "type" : "string" }, "token" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "token", "password" ] @@ -12813,12 +11554,12 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } }, @@ -12826,21 +11567,19 @@ "type" : "object", "properties" : { "site_locale" : { - "description" : "String must be a valid two-letter ISO language or language-country code e.g. 'en' or 'en_US'.", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "site_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "site_name" ] }, "token" : { - "description" : "Token does not match the setup token.", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "user" : { "type" : "object", @@ -12850,12 +11589,12 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "password" : { "description" : "password is too common.", @@ -12924,8 +11663,8 @@ "type" : "object", "properties" : { "slack-app-token" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "slack-bug-report-channel" : { "type" : "string" @@ -12962,8 +11701,8 @@ "type" : "string" }, "display_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "entity_type" : { "description" : "value must be a valid entity type (keyword or string)." @@ -13078,8 +11817,8 @@ "type" : "string" }, "display_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "entity_type" : { "description" : "value must be a valid entity type (keyword or string)." @@ -13324,23 +12063,6 @@ "tags" : [ "/api/table" ] } }, - "/api/table/{id}/sync_schema" : { - "post" : { - "summary" : "POST /api/table/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Table`.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/table" ] - } - }, "/api/table/{table-id}/data" : { "get" : { "summary" : "GET /api/table/{table-id}/data", @@ -13583,8 +12305,8 @@ "type" : "string" }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "archived" : { "type" : "boolean" @@ -13663,8 +12385,8 @@ "enum" : [ "star", "cake", "mail", "warning", "bell", "cloud" ] }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "time_matters" : { "type" : "boolean" @@ -13734,8 +12456,8 @@ "enum" : [ "star", "cake", "mail", "warning", "bell", "cloud" ] }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } }, "required" : [ "name" ] @@ -13753,7 +12475,7 @@ "name" : "include", "required" : false, "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.include" + "$ref" : "#/components/schemas/metabase.timeline.api.timeline~1include" } }, { "in" : "query", @@ -13840,7 +12562,7 @@ "name" : "include", "required" : false, "schema" : { - "$ref" : "#/components/schemas/metabase.timeline.api.timeline.include" + "$ref" : "#/components/schemas/metabase.timeline.api.timeline~1include" } }, { "in" : "query", @@ -13907,8 +12629,8 @@ "enum" : [ "star", "cake", "mail", "warning", "bell", "cloud" ] }, "name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" } } } @@ -13933,40 +12655,6 @@ "tags" : [ "/api/timeline" ] } }, - "/api/upload/csv" : { - "post" : { - "summary" : "POST /api/upload/csv", - "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", - "parameters" : [ ], - "requestBody" : { - "content" : { - "multipart/form-data" : { - "schema" : { - "type" : "object", - "properties" : { - "collection_id" : { - "type" : "integer", - "minimum" : 1 - }, - "file" : { - "type" : "object", - "properties" : { - "filename" : { - "type" : "string" - }, - "tempfile" : { } - }, - "required" : [ "filename", "tempfile" ] - } - }, - "required" : [ "file" ] - } - } - } - }, - "tags" : [ "/api/upload" ] - } - }, "/api/user-key-value/namespace/{namespace}" : { "get" : { "summary" : "GET /api/user-key-value/namespace/{namespace}", @@ -13976,9 +12664,9 @@ "name" : "namespace", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/user-key-value" ] } @@ -13992,17 +12680,17 @@ "name" : "key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "namespace", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "requestBody" : { "content" : { @@ -14011,7 +12699,7 @@ "type" : "object", "properties" : { "expires_at" : { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.datetime" + "$ref" : "#/components/schemas/metabase.lib.schema.literal~1string.datetime" }, "value" : { } } @@ -14029,17 +12717,17 @@ "name" : "key", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." }, { "in" : "path", "name" : "namespace", "required" : true, "schema" : { - "type" : "string", - "minLength" : 1 - } + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "description" : "value must be a non-blank string." } ], "tags" : [ "/api/user-key-value" ] }, @@ -14103,12 +12791,12 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "login_attributes" : { "description" : "login attribute keys must be a keyword or string", @@ -14118,7 +12806,7 @@ "user_group_memberships" : { "type" : "array", "items" : { - "$ref" : "#/components/schemas/metabase.users.api.user-group-membership" + "$ref" : "#/components/schemas/metabase.api.user~1user-group-membership" } } }, @@ -14186,8 +12874,8 @@ "type" : "string" }, "first_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "is_group_manager" : { "type" : "boolean" @@ -14196,13 +12884,12 @@ "type" : "boolean" }, "last_name" : { - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "locale" : { - "description" : "String must be a valid two-letter ISO language or language-country code e.g. 'en' or 'en_US'.", - "type" : "string", - "minLength" : 1 + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" }, "login_attributes" : { "description" : "login attribute keys must be a keyword or string", @@ -14212,7 +12899,7 @@ "user_group_memberships" : { "type" : "array", "items" : { - "$ref" : "#/components/schemas/metabase.users.api.user-group-membership" + "$ref" : "#/components/schemas/metabase.api.user~1user-group-membership" } } } @@ -14305,6 +12992,110 @@ "tags" : [ "/api/user" ] } }, + "/api/util/bug_report_details" : { + "get" : { + "summary" : "GET /api/util/bug_report_details", + "description" : "Returns version and system information relevant to filing a bug report against Metabase.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } + }, + "/api/util/diagnostic_info/connection_pool_info" : { + "get" : { + "summary" : "GET /api/util/diagnostic_info/connection_pool_info", + "description" : "Returns database connection pool info for the current Metabase instance.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } + }, + "/api/util/entity_id" : { + "post" : { + "summary" : "POST /api/util/entity_id", + "description" : "Translate entity IDs to model IDs.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "entity_ids" : { + "type" : "object", + "properties" : { } + } + }, + "required" : [ "entity_ids" ] + } + } + } + }, + "tags" : [ "/api/util" ] + } + }, + "/api/util/logs" : { + "get" : { + "summary" : "GET /api/util/logs", + "description" : "Logs.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } + }, + "/api/util/password_check" : { + "post" : { + "summary" : "POST /api/util/password_check", + "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "password" : { + "description" : "password is too common.", + "type" : "string" + } + }, + "required" : [ "password" ] + } + } + } + }, + "tags" : [ "/api/util" ] + } + }, + "/api/util/product-feedback" : { + "post" : { + "summary" : "POST /api/util/product-feedback", + "description" : "Endpoint to provide feedback from the product", + "parameters" : [ ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "comments" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "email" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + }, + "source" : { + "description" : "value must be a non-blank string.", + "$ref" : "#/components/schemas/metabase.lib.schema.common~1non-blank-string" + } + }, + "required" : [ "source" ] + } + } + } + }, + "tags" : [ "/api/util" ] + } + }, "/api/util/random_token" : { "get" : { "summary" : "GET /api/util/random_token", @@ -14312,6 +13103,14 @@ "parameters" : [ ], "tags" : [ "/api/util" ] } + }, + "/api/util/stats" : { + "get" : { + "summary" : "GET /api/util/stats", + "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", + "parameters" : [ ], + "tags" : [ "/api/util" ] + } } }, "servers" : [ { diff --git a/_site/docs/master/configuring-metabase/config-template.html b/_site/docs/master/configuring-metabase/config-template.html index 34a179bf43..558e38205b 100644 --- a/_site/docs/master/configuring-metabase/config-template.html +++ b/_site/docs/master/configuring-metabase/config-template.html @@ -4718,49 +4718,48 @@

      Metabase config file template

      version: 1 config: users: - - first_name: First - last_name: Person - password: metabot1 - email: first@example.com - - first_name: Normal - last_name: Person - password: metabot1 - email: normal@example.com - - first_name: Admin - last_name: Person - password: metabot1 - is_superuser: true - email: admin@example.com + - first_name: First + last_name: Person + password: metabot1 + email: first@example.com + - first_name: Normal + last_name: Person + password: metabot1 + email: normal@example.com + - first_name: Admin + last_name: Person + password: metabot1 + is_superuser: true + email: admin@example.com databases: - - name: Sample PostgreSQL - engine: postgres - details: - host: postgres-data - port: 5432 - user: metabase - password: metasample123 - dbname: sample - - name: Sample MySQL - engine: mysql - details: - host: mysql-data - port: 3306 - user: metabase - password: metasample123 - dbname: sample + - name: Sample PostgreSQL + engine: postgres + details: + host: postgres-data + port: 5432 + user: metabase + password: metasample123 + dbname: sample + - name: Sample MySQL + engine: mysql + details: + host: mysql-data + port: 3306 + user: metabase + password: metasample123 + dbname: sample api-keys: - - name: Admin API key - group: admin - creator: first@example.com - key: mb_firsttestapikey123 - - name: All Users API key - group: all-users - creator: first@example.com - key: mb_secondtestapikey456 + - name: Admin API key + group: admin + creator: first@example.com + key: mb_firsttestapikey123 + - name: All Users API key + group: all-users + creator: first@example.com + key: mb_secondtestapikey456 settings: admin-email: null aggregated-query-row-limit: null - ai-service-base-url: http://localhost:8000 allowed-iframe-hosts: |- youtube.com, youtu.be, @@ -4794,6 +4793,7 @@

      Metabase config file template

      application-name: Metabase attachment-row-limit: null attachment-table-row-limit: 20 + backfill-entity-ids-repeat-ms: 3000 bcc-enabled: true breakout-bin-width: 10.0 breakout-bins-num: 8 @@ -4804,7 +4804,6 @@

      Metabase config file template

      custom-geojson-enabled: true custom-homepage: false custom-homepage-dashboard: null - dashboards-save-last-used-parameters: true db-connection-timeout-ms: 10000 db-query-timeout-minutes: 20 default-maps-enabled: true @@ -4840,7 +4839,7 @@

      Metabase config file template

      gsheets: null health-check-logging-enabled: true help-link: metabase - help-link-custom-destination: https://www.metabase.com/help/premium + help-link-custom-destination: https://www.metabase.com/help-premium humanization-strategy: simple jdbc-data-warehouse-max-connection-pool-size: 15 jwt-attribute-email: email @@ -4853,7 +4852,7 @@

      Metabase config file template

      jwt-identity-provider-uri: null jwt-shared-secret: null jwt-user-provisioning-enabled: true - landing-page: '' + landing-page: "" landing-page-illustration: default landing-page-illustration-custom: null ldap-attribute-email: mail @@ -4874,7 +4873,6 @@

      Metabase config file template

      ldap-user-base: null ldap-user-filter: (&(objectClass=inetOrgPerson)(|(uid={login})(mail={login}))) ldap-user-provisioning-enabled: true - license-token-missing-banner-dismissal-timestamp: [] loading-message: doing-science login-page-illustration: default login-page-illustration-custom: null @@ -4885,10 +4883,8 @@

      Metabase config file template

      no-data-illustration-custom: null no-object-illustration: default no-object-illustration-custom: null - non-table-chart-generated: false not-behind-proxy: false notification-link-base-url: null - notification-system-event-thread-pool-size: 5 notification-thread-pool-size: 3 persisted-model-refresh-cron-schedule: 0 0 0/6 * * ? * persisted-models-enabled: false @@ -4906,7 +4902,7 @@

      Metabase config file template

      saml-application-name: Metabase saml-attribute-email: null saml-attribute-firstname: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname - saml-attribute-group: null + saml-attribute-group: member_of saml-attribute-lastname: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname saml-enabled: false saml-group-mappings: {} @@ -4915,15 +4911,13 @@

      Metabase config file template

      saml-identity-provider-issuer: null saml-identity-provider-slo-uri: null saml-identity-provider-uri: null - saml-keystore-alias: null + saml-keystore-alias: metabase saml-keystore-password: changeit saml-keystore-path: null saml-slo-enabled: false saml-user-provisioning-enabled: true scim-enabled: null - sdk-encryption-validation-key: null - search-engine: appdb - search-language: null + search-engine: in-place search-typeahead-enabled: true send-new-sso-user-admin-email: null session-cookie-samesite: lax @@ -4952,7 +4946,6 @@

      Metabase config file template

      unaggregated-query-row-limit: null update-channel: latest uploads-settings: null - use-tenants: false user-visibility: all diff --git a/_site/docs/master/configuring-metabase/environment-variables.html b/_site/docs/master/configuring-metabase/environment-variables.html index 900ef9cd04..c930b3a77d 100644 --- a/_site/docs/master/configuring-metabase/environment-variables.html +++ b/_site/docs/master/configuring-metabase/environment-variables.html @@ -4762,14 +4762,14 @@

      MB_AI_SERVICE_BASE_URL

      +

      MB_AI_PROXY_BASE_URL

      • Type: string
      • Default: http://localhost:8000
      -

      URL for the a AI Service.

      +

      URL for the a AI Proxy service.

      MB_ALLOWED_IFRAME_HOSTS

      @@ -4981,7 +4981,7 @@

        -
      • Be conservative with what comments you add to the codebase. Comments shouldn’t be used as reminders or as todos–record those by creating a new issue in GitHub. Ideally, code should be written in such a way that it explains itself clearly. When it does not, you should first try rewriting the code. If for whatever reason you are unable to write something clearly, add a comment to explain the “why”.
      • +
      • Be conservative with what comments you add to the codebase. Comments shouldn’t be used as reminders or as todos–record those by creating a new issue in Github. Ideally, code should be written in such a way that it explains itself clearly. When it does not, you should first try rewriting the code. If for whatever reason you are unable to write something clearly, add a comment to explain the “why”.
      
      diff --git a/_site/docs/master/developers-guide/security-token-scanner.html b/_site/docs/master/developers-guide/security-token-scanner.html
      deleted file mode 100644
      index 9236d730b6..0000000000
      --- a/_site/docs/master/developers-guide/security-token-scanner.html
      +++ /dev/null
      @@ -1,5140 +0,0 @@
      -
      -  
      -  
      -  
      -
      -  
      -  
      -    
      -  
      -  
      -
      -  
      -
      -  
      -    
      -
      -   
      -
      -Security Token Scanner | Metabase Documentation
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -  
      -
      -  
      -
      - 
      -
      -
      -  
      -    
      -  
      -  
      -  
      -  
      -  
      -  
      -  
      -  
      -  
      -  
      -  
      -    
      -  
      -  
      -  
      -
      -  
      -
      -  
      -
      -  
      -
      -  
      -  
      -
      -  
      -  
      -  
      -
      -  
      -
      -  
      -  
      -  
      -
      -  
      -  
      -  
      -
      -  
      -  
      -
      -  
      -  
      -  
      -  
      -
      -  
      -
      -
      -
      -  
      -    
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - -
      - - - - -
      - - - - -
      -
      - - - -
      -
      -
      - -
      - - - - - - - - - -
      - - - -
      - - -
      - -
      - -
      - - - -
      - - - master - - - - - - - - -
      - - - - - What’s new - - - - - -
      - - - - -
      -
      - - -
      - - -
      - - -
      - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
      - - -
      - - -

      Security Token Scanner

      - -

      Security token scanner detects potentially leaked API keys and secrets in the Metabase codebase. Runs automatically as a git precommit hook on staged files.

      - -

      Usage

      - -
      # Scan specific files
      -./bin/mage -token-scan deps.edn bb.edn
      -
      -# Scan all files
      -./bin/mage -token-scan -a
      -
      -# Verbose output
      -./bin/mage -token-scan -v deps.edn
      -
      - -

      Token Types Detected

      - -
        -
      • Airgap tokens (airgap_)
      • -
      • Dev tokens (mb_dev_, 64-char hex)
      • -
      • OpenAI API keys (sk-)
      • -
      • JWT/JWE tokens
      • -
      • GitHub tokens (gh[pousr]_)
      • -
      • Slack bot tokens (xoxb-)
      • -
      • AWS access keys (AKIA)
      • -
      - -

      The scanner uses .gitignore to filter files and will block commits containing detected tokens.

      - -

      False positives

      - -

      If the scanner flags a non-token string, you should exclude the literal token string by adding it to: mage/resources/token_scanner/token_whitelist.txt.

      - -
      echo 'my-token-string' >> mage/resources/token_scanner/token_whitelist.txt && git add mage/resources/token_scanner/token_whitelist.txt
      -
      - - - -
      git commit --no-verify -m "commit message"
      -
      - - -
      -
      - -

      - Read docs for other versions of Metabase. -

      - -
      -
      - -
      - -
      -
      -
      Was this helpful?
      - - -
      - -
      -

      - -
      - - - -
      -
      - -
      -
      Thanks for your feedback!
      -
      - - - - Want to improve these docs? Propose a change. - - -
      - - - -
      -
      -
      -
      - - - - - - - - - - - - - - - -
      - -
      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/developers-guide/versioning.html b/_site/docs/master/developers-guide/versioning.html index 2b5222633a..4c2ac8feb6 100644 --- a/_site/docs/master/developers-guide/versioning.html +++ b/_site/docs/master/developers-guide/versioning.html @@ -4760,7 +4760,7 @@

      Release Candidates

      Further reading

      diff --git a/_site/docs/master/embedding/images/04-preview.png b/_site/docs/master/embedding/images/04-preview.png index 2c094660f3..6a3f0899c3 100644 Binary files a/_site/docs/master/embedding/images/04-preview.png and b/_site/docs/master/embedding/images/04-preview.png differ diff --git a/_site/docs/master/embedding/images/05-code.png b/_site/docs/master/embedding/images/05-code.png index ad5452e2e6..a5ffd69820 100644 Binary files a/_site/docs/master/embedding/images/05-code.png and b/_site/docs/master/embedding/images/05-code.png differ diff --git a/_site/docs/master/embedding/images/action-buttons.png b/_site/docs/master/embedding/images/action-buttons.png index 32282cca33..772559e2ed 100644 Binary files a/_site/docs/master/embedding/images/action-buttons.png and b/_site/docs/master/embedding/images/action-buttons.png differ diff --git a/_site/docs/master/embedding/images/additional-info.png b/_site/docs/master/embedding/images/additional-info.png index 86910c5a20..04b0b02be0 100644 Binary files a/_site/docs/master/embedding/images/additional-info.png and b/_site/docs/master/embedding/images/additional-info.png differ diff --git a/_site/docs/master/embedding/images/all-users.png b/_site/docs/master/embedding/images/all-users.png index 82b59fed3a..8148f8493b 100644 Binary files a/_site/docs/master/embedding/images/all-users.png and b/_site/docs/master/embedding/images/all-users.png differ diff --git a/_site/docs/master/embedding/images/create-a-public-link.png b/_site/docs/master/embedding/images/create-a-public-link.png index da4c9844b4..0f4f8e810e 100644 Binary files a/_site/docs/master/embedding/images/create-a-public-link.png and b/_site/docs/master/embedding/images/create-a-public-link.png differ diff --git a/_site/docs/master/embedding/images/dashboard-sharing.png b/_site/docs/master/embedding/images/dashboard-sharing.png index d4033342d1..488a650988 100644 Binary files a/_site/docs/master/embedding/images/dashboard-sharing.png and b/_site/docs/master/embedding/images/dashboard-sharing.png differ diff --git a/_site/docs/master/embedding/images/data-picker.png b/_site/docs/master/embedding/images/data-picker.png index 31aa99c04c..c4aabbbf29 100644 Binary files a/_site/docs/master/embedding/images/data-picker.png and b/_site/docs/master/embedding/images/data-picker.png differ diff --git a/_site/docs/master/embedding/images/embedded-example-dashboard.png b/_site/docs/master/embedding/images/embedded-example-dashboard.png index dda21e391d..65c0fd3984 100644 Binary files a/_site/docs/master/embedding/images/embedded-example-dashboard.png and b/_site/docs/master/embedding/images/embedded-example-dashboard.png differ diff --git a/_site/docs/master/embedding/images/enable-public-sharing.png b/_site/docs/master/embedding/images/enable-public-sharing.png index d07f32f7bf..13a96abea8 100644 Binary files a/_site/docs/master/embedding/images/enable-public-sharing.png and b/_site/docs/master/embedding/images/enable-public-sharing.png differ diff --git a/_site/docs/master/embedding/images/full-app-embedding-sso.png b/_site/docs/master/embedding/images/full-app-embedding-sso.png deleted file mode 100644 index 109ff12385..0000000000 Binary files a/_site/docs/master/embedding/images/full-app-embedding-sso.png and /dev/null differ diff --git a/_site/docs/master/embedding/images/full-data-picker.png b/_site/docs/master/embedding/images/full-data-picker.png index 31aa99c04c..11cff5e4df 100644 Binary files a/_site/docs/master/embedding/images/full-data-picker.png and b/_site/docs/master/embedding/images/full-data-picker.png differ diff --git a/_site/docs/master/embedding/images/interactive-question-sample-app.png b/_site/docs/master/embedding/images/interactive-question-sample-app.png index 82b59fed3a..f492bbcb86 100644 Binary files a/_site/docs/master/embedding/images/interactive-question-sample-app.png and b/_site/docs/master/embedding/images/interactive-question-sample-app.png differ diff --git a/_site/docs/master/embedding/images/interactive-question.png b/_site/docs/master/embedding/images/interactive-question.png index 2789fb4304..a46e7cae66 100644 Binary files a/_site/docs/master/embedding/images/interactive-question.png and b/_site/docs/master/embedding/images/interactive-question.png differ diff --git a/_site/docs/master/embedding/images/jwt-setup.png b/_site/docs/master/embedding/images/jwt-setup.png index 0c639d1032..539d36e1d1 100644 Binary files a/_site/docs/master/embedding/images/jwt-setup.png and b/_site/docs/master/embedding/images/jwt-setup.png differ diff --git a/_site/docs/master/embedding/images/map-user-attribute.png b/_site/docs/master/embedding/images/map-user-attribute.png index d4033342d1..366ac30e9b 100644 Binary files a/_site/docs/master/embedding/images/map-user-attribute.png and b/_site/docs/master/embedding/images/map-user-attribute.png differ diff --git a/_site/docs/master/embedding/images/no-top-no-side.png b/_site/docs/master/embedding/images/no-top-no-side.png index 2158748cfc..02977f6b73 100644 Binary files a/_site/docs/master/embedding/images/no-top-no-side.png and b/_site/docs/master/embedding/images/no-top-no-side.png differ diff --git a/_site/docs/master/embedding/images/powered-by-metabase.png b/_site/docs/master/embedding/images/powered-by-metabase.png index 32282cca33..7108cd02c4 100644 Binary files a/_site/docs/master/embedding/images/powered-by-metabase.png and b/_site/docs/master/embedding/images/powered-by-metabase.png differ diff --git a/_site/docs/master/embedding/images/public-embed.png b/_site/docs/master/embedding/images/public-embed.png index 31aa99c04c..8e87c240c7 100644 Binary files a/_site/docs/master/embedding/images/public-embed.png and b/_site/docs/master/embedding/images/public-embed.png differ diff --git a/_site/docs/master/embedding/images/public-export.png b/_site/docs/master/embedding/images/public-export.png index 4c1f391d9c..0269f83ca1 100644 Binary files a/_site/docs/master/embedding/images/public-export.png and b/_site/docs/master/embedding/images/public-export.png differ diff --git a/_site/docs/master/embedding/images/public-link-custom-destination.png b/_site/docs/master/embedding/images/public-link-custom-destination.png index 7e4d253fc1..ee4b0bd8c9 100644 Binary files a/_site/docs/master/embedding/images/public-link-custom-destination.png and b/_site/docs/master/embedding/images/public-link-custom-destination.png differ diff --git a/_site/docs/master/embedding/images/pug-and-play.png b/_site/docs/master/embedding/images/pug-and-play.png index 20ef8d0f8e..ff0ec4c14b 100644 Binary files a/_site/docs/master/embedding/images/pug-and-play.png and b/_site/docs/master/embedding/images/pug-and-play.png differ diff --git a/_site/docs/master/embedding/images/query-builder.png b/_site/docs/master/embedding/images/query-builder.png index 2789fb4304..7bc097aa39 100644 Binary files a/_site/docs/master/embedding/images/query-builder.png and b/_site/docs/master/embedding/images/query-builder.png differ diff --git a/_site/docs/master/embedding/images/sandboxed-invoices-table.png b/_site/docs/master/embedding/images/sandboxed-invoices-table.png index 9c1c729b30..0eaa36d82b 100644 Binary files a/_site/docs/master/embedding/images/sandboxed-invoices-table.png and b/_site/docs/master/embedding/images/sandboxed-invoices-table.png differ diff --git a/_site/docs/master/embedding/images/see-shared-content.png b/_site/docs/master/embedding/images/see-shared-content.png index 4039f66dd8..351bbca436 100644 Binary files a/_site/docs/master/embedding/images/see-shared-content.png and b/_site/docs/master/embedding/images/see-shared-content.png differ diff --git a/_site/docs/master/embedding/images/sharing-embed.png b/_site/docs/master/embedding/images/sharing-embed.png index 0c639d1032..06fbdac85d 100644 Binary files a/_site/docs/master/embedding/images/sharing-embed.png and b/_site/docs/master/embedding/images/sharing-embed.png differ diff --git a/_site/docs/master/embedding/images/side-nav.png b/_site/docs/master/embedding/images/side-nav.png index 7e4d253fc1..c09d33bc38 100644 Binary files a/_site/docs/master/embedding/images/side-nav.png and b/_site/docs/master/embedding/images/side-nav.png differ diff --git a/_site/docs/master/embedding/images/sidebar-without-models.png b/_site/docs/master/embedding/images/sidebar-without-models.png index 469ecef80f..fb86445b58 100644 Binary files a/_site/docs/master/embedding/images/sidebar-without-models.png and b/_site/docs/master/embedding/images/sidebar-without-models.png differ diff --git a/_site/docs/master/embedding/images/signed-embedding-jwt.png b/_site/docs/master/embedding/images/signed-embedding-jwt.png deleted file mode 100644 index 4039f66dd8..0000000000 Binary files a/_site/docs/master/embedding/images/signed-embedding-jwt.png and /dev/null differ diff --git a/_site/docs/master/embedding/images/static-question.png b/_site/docs/master/embedding/images/static-question.png index 12252d59fa..0ce9d08c73 100644 Binary files a/_site/docs/master/embedding/images/static-question.png and b/_site/docs/master/embedding/images/static-question.png differ diff --git a/_site/docs/master/embedding/images/sync-groups.png b/_site/docs/master/embedding/images/sync-groups.png index d4f0298781..8d5e5aa443 100644 Binary files a/_site/docs/master/embedding/images/sync-groups.png and b/_site/docs/master/embedding/images/sync-groups.png differ diff --git a/_site/docs/master/embedding/images/top-nav.png b/_site/docs/master/embedding/images/top-nav.png index 1db0855e4d..dd9e445a13 100644 Binary files a/_site/docs/master/embedding/images/top-nav.png and b/_site/docs/master/embedding/images/top-nav.png differ diff --git a/_site/docs/master/embedding/interactive-embedding.html b/_site/docs/master/embedding/interactive-embedding.html index 960cfd0a3b..6450677988 100644 --- a/_site/docs/master/embedding/interactive-embedding.html +++ b/_site/docs/master/embedding/interactive-embedding.html @@ -4813,7 +4813,7 @@

      Pointing an iframe to a Metabase U
      src="http://metabase.yourcompany.com/dashboard/entity/[Entity ID]"
       
      -

      To get a dashboard’s Entity ID, visit the dashboard and click on the info button. In the Overview tab, copy the Entity ID. Then in your iframe’s src attribute to:

      +

      To get a dashboard’s Entity ID, visit the dashboard and click on the info button. In the Overview tab, copy the Entity ID. Then in your iframe’s src attribute to:

      src=http://metabase.yourcompany.com/dashboard/entity/Dc_7X8N7zf4iDK9Ps1M3b
       
      @@ -4884,7 +4884,7 @@

      Embedding Metabase in a differ

      Securing interactive embeds

      -

      Metabase uses HTTP cookies to authenticate people and keep them signed into your embedded Metabase, even when someone closes their browser session. If you enjoy diagrammed auth flows, check out Interactive embedding with SSO.

      +

      Metabase uses HTTP cookies to authenticate people and keep them signed into your embedded Metabase, even when someone closes their browser session. If you enjoy diagrammed auth flows, check out Interactive embedding with SSO.

      To limit the amount of time that a person stays logged in, set MAX_SESSION_AGE to a number in minutes. The default value is 20,160 (two weeks).

      diff --git a/_site/docs/master/embedding/introduction.html b/_site/docs/master/embedding/introduction.html index 578cce004d..f2d2806988 100644 --- a/_site/docs/master/embedding/introduction.html +++ b/_site/docs/master/embedding/introduction.html @@ -4852,7 +4852,6 @@

      Further reading

    • Publishing data visualizations to the web.
    • Multi-tenant self-service analytics.
    • Customizing Metabase’s appearance.
    • -
    • Securing embedded Metabase
    • diff --git a/_site/docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html b/_site/docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html index 015313c7bb..230ac7fd42 100644 --- a/_site/docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html @@ -23,7 +23,7 @@ -

      Interface BaseInteractiveQuestionProps

      interface BaseInteractiveQuestionProps {
          children?: ReactNode;
          entityTypes?: EmbeddingEntityType[];
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          questionId: null | SdkQuestionId;
          targetCollection?: SdkCollectionId;
          withDownloads?: boolean;
      }
      Index

      Properties

      children? +

      Interface BaseInteractiveQuestionProps

      interface BaseInteractiveQuestionProps {
          children?: ReactNode;
          entityTypes?: EmbeddingEntityType[];
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          questionId: null | SdkQuestionId;
          targetCollection?: SdkCollectionId;
          withDownloads?: boolean;
      }
      Index

      Properties

      isSaveEnabled?: boolean

      Whether to show the save button.

      onBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      onRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
      onSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
      onSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      questionId: null | SdkQuestionId

      The ID of the question.
      This is either: diff --git a/_site/docs/master/embedding/sdk/api/CreateQuestion.html b/_site/docs/master/embedding/sdk/api/CreateQuestion.html index 6fb7f49748..a35f55a8d1 100644 --- a/_site/docs/master/embedding/sdk/api/CreateQuestion.html +++ b/_site/docs/master/embedding/sdk/api/CreateQuestion.html @@ -28,7 +28,7 @@

    • OptionalisSaveEnabled?: boolean

      Whether to show the save button.

    • OptionalonBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

    • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
    • OptionalonSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
    • OptionalonSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

    • Optionalplugins?: MetabasePluginsConfig
    • OptionaltargetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

    • OptionalwithDownloads?: boolean

      Enables the ability to download results in the interactive question.

    • Returns Element

      Use <InteractiveQuestion questionId="new" /> instead.

      diff --git a/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html b/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html index 2f680f9343..5a0b4e825a 100644 --- a/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/CreateQuestionProps.html @@ -23,7 +23,7 @@ -

      Interface CreateQuestionProps

      interface CreateQuestionProps {
          entityTypes?: EmbeddingEntityType[];
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          targetCollection?: SdkCollectionId;
          withDownloads?: boolean;
      }
      Index

      Properties

      entityTypes? +

      Interface CreateQuestionProps

      interface CreateQuestionProps {
          entityTypes?: EmbeddingEntityType[];
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          targetCollection?: SdkCollectionId;
          withDownloads?: boolean;
      }
      Index

      Properties

      isSaveEnabled?: boolean

      Whether to show the save button.

      onBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      onRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
      onSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
      onSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      targetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

      withDownloads?: boolean

      Enables the ability to download results in the interactive question.

      diff --git a/_site/docs/master/embedding/sdk/api/DrillThroughQuestionProps.html b/_site/docs/master/embedding/sdk/api/DrillThroughQuestionProps.html index 4edc29450e..f1d754ca45 100644 --- a/_site/docs/master/embedding/sdk/api/DrillThroughQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/DrillThroughQuestionProps.html @@ -24,7 +24,7 @@

      Interface DrillThroughQuestionProps

      Props for the drill-through question

      -
      interface DrillThroughQuestionProps {
          children?: ReactNode;
          className?: string;
          entityTypes?: EmbeddingEntityType[];
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          style?: CSSProperties;
          targetCollection?: SdkCollectionId;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
          withResetButton?: boolean;
      }
      Index

      Properties

      interface DrillThroughQuestionProps {
          children?: ReactNode;
          className?: string;
          entityTypes?: EmbeddingEntityType[];
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          style?: CSSProperties;
          targetCollection?: SdkCollectionId;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
          withResetButton?: boolean;
      }
      Index

      Properties

      isSaveEnabled?: boolean

      Whether to show the save button.

      onBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      onRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      -
      onSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
      onSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      A custom style object to be added to the root element.

      targetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

      Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

      diff --git a/_site/docs/master/embedding/sdk/api/EditableDashboard.html b/_site/docs/master/embedding/sdk/api/EditableDashboard.html index cf22fd37d6..b30608757e 100644 --- a/_site/docs/master/embedding/sdk/api/EditableDashboard.html +++ b/_site/docs/master/embedding/sdk/api/EditableDashboard.html @@ -23,9 +23,13 @@ -

      Function EditableDashboard

      • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

        -

        Parameters

        • props: EditableDashboardProps
          • OptionalclassName?: string

            A custom class name to be added to the root element.

            -
          • dashboardId: SdkDashboardId

            The ID of the dashboard. +

            Function EditableDashboard

            • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

              +

              Parameters

              • props: {
                    drillThroughQuestionHeight?: Height<string | number>;
                    drillThroughQuestionProps?: DrillThroughQuestionProps;
                    plugins?: MetabasePluginsConfig;
                    renderDrillThroughQuestion?: () => ReactNode;
                } & {
                    dashboardId: SdkDashboardId;
                    hiddenParameters?: string[];
                    initialParameters?: ParameterValues;
                    withCardTitle?: boolean;
                    withDownloads?: boolean;
                    withTitle?: boolean;
                } & { className?: string; style?: CSSProperties } & {
                    onLoad?: (dashboard: null | MetabaseDashboard) => void;
                    onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
                } & {}
                • OptionaldrillThroughQuestionHeight?: Height<string | number>

                  Height of a question component when drilled from the dashboard to a question level.

                  +
                • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

                  Props of a question component when drilled from the dashboard to a question level.

                  +
                • Optionalplugins?: MetabasePluginsConfig

                  Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

                  +
                • OptionalrenderDrillThroughQuestion?: () => ReactNode

                  A custom React component to render the question layout. +Use namespaced InteractiveQuestion components to build the layout.

                  +
                • dashboardId: SdkDashboardId

                  The ID of the dashboard.
                  This is either:

                  @@ -34,32 +38,27 @@
                • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
                -
            • OptionaldataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

              Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

              -
            • OptionaldrillThroughQuestionHeight?: Height<string | number>

              Height of a question component when drilled from the dashboard to a question level.

              -
            • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

              Props of a question component when drilled from the dashboard to a question level.

              -
            • OptionalhiddenParameters?: string[]

              A list of parameters to hide. +

            • OptionalhiddenParameters?: string[]

              A list of parameters to hide.

              -
            • OptionalinitialParameters?: ParameterValues

              Query parameters for the dashboard. For a single option, use a string value, and use a list of strings for multiple options. +

            • OptionalinitialParameters?: ParameterValues

              Query parameters for the dashboard. For a single option, use a string value, and use a list of strings for multiple options.

              -
            • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

              Callback that is called when the dashboard is loaded.

              -
            • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

              Callback that is called when the dashboard is loaded without cards.

              -
            • Optionalplugins?: MetabasePluginsConfig

              Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

              -
            • OptionalrenderDrillThroughQuestion?: () => ReactNode

              A custom React component to render the question layout. -Use namespaced InteractiveQuestion components to build the layout.

              -
            • Optionalstyle?: CSSProperties

              A custom style object to be added to the root element.

              -
            • OptionalwithCardTitle?: boolean

              Whether the dashboard cards should display a title.

              -
            • OptionalwithDownloads?: boolean

              Whether to hide the download button.

              -
            • OptionalwithTitle?: boolean

              Whether the dashboard should display a title.

              -

        Returns Element

      +
    • OptionalwithCardTitle?: boolean

      Whether the dashboard cards should display a title.

      +
    • OptionalwithDownloads?: boolean

      Whether to hide the download button.

      +
    • OptionalwithTitle?: boolean

      Whether the dashboard should display a title.

      +
      • OptionalclassName?: string

        A custom class name to be added to the root element.

        +
      • Optionalstyle?: CSSProperties

        A custom style object to be added to the root element.

        +
      • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

        Callback that is called when the dashboard is loaded.

        +
      • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

        Callback that is called when the dashboard is loaded without cards.

        +

        Returns Element

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html b/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html index 277bc8a0f7..84f46b6ace 100644 --- a/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html +++ b/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html @@ -23,9 +23,8 @@ -

        Interface EditableDashboardProps

        interface EditableDashboardProps {
            className?: string;
            dashboardId: SdkDashboardId;
            dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">;
            drillThroughQuestionHeight?: Height<string | number>;
            drillThroughQuestionProps?: DrillThroughQuestionProps;
            hiddenParameters?: string[];
            initialParameters?: ParameterValues;
            onLoad?: (dashboard: null | MetabaseDashboard) => void;
            onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
            plugins?: MetabasePluginsConfig;
            renderDrillThroughQuestion?: () => ReactNode;
            style?: CSSProperties;
            withCardTitle?: boolean;
            withDownloads?: boolean;
            withTitle?: boolean;
        }
        Index

        Properties

        className? +

        Interface EditableDashboardProps

        interface EditableDashboardProps {
            className?: string;
            dashboardId: SdkDashboardId;
            drillThroughQuestionHeight?: Height<string | number>;
            drillThroughQuestionProps?: DrillThroughQuestionProps;
            hiddenParameters?: string[];
            initialParameters?: ParameterValues;
            onLoad?: (dashboard: null | MetabaseDashboard) => void;
            onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
            plugins?: MetabasePluginsConfig;
            renderDrillThroughQuestion?: () => ReactNode;
            style?: CSSProperties;
            withCardTitle?: boolean;
            withDownloads?: boolean;
            withTitle?: boolean;
        }
        Index

        Properties

        className? dashboardId -dataPickerProps? drillThroughQuestionHeight? drillThroughQuestionProps? hiddenParameters? @@ -48,7 +47,6 @@
      • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
      • -
        dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

        Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

        drillThroughQuestionHeight?: Height<string | number>

        Height of a question component when drilled from the dashboard to a question level.

        drillThroughQuestionProps?: DrillThroughQuestionProps

        Props of a question component when drilled from the dashboard to a question level.

        Type declaration

        Props for the drill-through question

        @@ -60,7 +58,7 @@
      • OptionalisSaveEnabled?: boolean

        Whether to show the save button.

      • OptionalonBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        -
      • OptionalonSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        +
      • OptionalonSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      • Optionalplugins?: MetabasePluginsConfig
      • Optionalstyle?: CSSProperties

        A custom style object to be added to the root element.

      • OptionaltargetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

      • Optionaltitle?: SdkQuestionTitleProps

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        @@ -91,6 +89,6 @@
      • withCardTitle?: boolean

        Whether the dashboard cards should display a title.

        withDownloads?: boolean

        Whether to hide the download button.

        withTitle?: boolean

        Whether the dashboard should display a title.

        -

        +

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/IconName.html b/_site/docs/master/embedding/sdk/api/IconName.html index 091b524b08..bd3e53ebde 100644 --- a/_site/docs/master/embedding/sdk/api/IconName.html +++ b/_site/docs/master/embedding/sdk/api/IconName.html @@ -23,6 +23,6 @@ -

        Type Alias IconName

        IconName:
            | "string"
            | "number"
            | "function"
            | "model"
            | "table"
            | "question"
            | "collection"
            | "dashboard"
            | "add"
            | "add_column"
            | "add_data"
            | "add_folder"
            | "add_row"
            | "add_to_dash"
            | "ai"
            | "alert"
            | "alert_filled"
            | "alert_confirm"
            | "archive"
            | "area"
            | "attachment"
            | "arrow_up"
            | "arrow_down"
            | "arrow_left"
            | "arrow_left_to_line"
            | "arrow_right"
            | "arrow_split"
            | "audit"
            | "badge"
            | "bar"
            | "bell"
            | "birthday"
            | "bookmark"
            | "bookmark_filled"
            | "bolt"
            | "bolt_filled"
            | "breakout"
            | "bubble"
            | "burger"
            | "calendar"
            | "check"
            | "check_filled"
            | "chevrondown"
            | "chevronleft"
            | "chevronright"
            | "chevronup"
            | "click"
            | "clipboard"
            | "clock"
            | "clone"
            | "close"
            | "cloud"
            | "cloud_filled"
            | "compare"
            | "combine"
            | "connections"
            | "contract"
            | "copy"
            | "curved"
            | "database"
            | "dash"
            | "curve"
            | "document"
            | "download"
            | "dyno"
            | "edit_document"
            | "ellipsis"
            | "embed"
            | "empty"
            | "enter_or_return"
            | "expand"
            | "expand_arrow"
            | "extract"
            | "eye"
            | "eye_crossed_out"
            | "eye_outline"
            | "field"
            | "fields"
            | "filter"
            | "filter_plus"
            | "bug"
            | "format_code"
            | "formula"
            | "funnel"
            | "funnel_outline"
            | "folder"
            | "folder_filled"
            | "gauge"
            | "gear"
            | "gear_settings_filled"
            | "gem"
            | "globe"
            | "grabber"
            | "grid"
            | "group"
            | "google"
            | "google_drive"
            | "google_sheet"
            | "history"
            | "home"
            | "horizontal_bar"
            | "hourglass"
            | "info"
            | "info_filled"
            | "info_outline"
            | "insight"
            | "int"
            | "io"
            | "join_full_outer"
            | "join_inner"
            | "join_left_outer"
            | "join_right_outer"
            | "index"
            | "key"
            | "label"
            | "ldap"
            | "learn"
            | "lightbulb"
            | "link"
            | "line"
            | "lines"
            | "lineandbar"
            | "line_style_dashed"
            | "line_style_dotted"
            | "line_style_solid"
            | "list"
            | "location"
            | "lock"
            | "lock_filled"
            | "mail"
            | "mail_filled"
            | "metabot"
            | "metabot_sad"
            | "metric"
            | "model_with_badge"
            | "moon"
            | "move"
            | "move_card"
            | "new_folder"
            | "notebook"
            | "palette"
            | "pause"
            | "pencil"
            | "pencil_lines"
            | "permissions_limited"
            | "person"
            | "pie"
            | "pin"
            | "pinmap"
            | "pivot_table"
            | "play"
            | "play_outlined"
            | "popover"
            | "popular"
            | "progress"
            | "pulse"
            | "recents"
            | "revert"
            | "sankey"
            | "share"
            | "split"
            | "sql"
            | "subscription"
            | "straight"
            | "stepped"
            | "sort"
            | "sort_arrows"
            | "sum"
            | "sync"
            | "redo"
            | "return"
            | "reference"
            | "refresh"
            | "refresh_downstream"
            | "rocket"
            | "ruler"
            | "schema"
            | "search"
            | "section"
            | "segment"
            | "shield"
            | "sidebar_closed"
            | "sidebar_open"
            | "slack"
            | "slack_colorized"
            | "smartscalar"
            | "snail"
            | "snippet"
            | "sparkles"
            | "star_filled"
            | "star"
            | "stop"
            | "store"
            | "sun"
            | "t-shirt"
            | "tab"
            | "table2"
            | "time_history"
            | "trash"
            | "trash_filled"
            | "triangle_left"
            | "triangle_right"
            | "unarchive"
            | "undo"
            | "unknown"
            | "unpin"
            | "unsubscribe"
            | "upload"
            | "variable"
            | "verified"
            | "official_collection"
            | "verified_filled"
            | "view_archive"
            | "warning"
            | "warning_round_filled"
            | "warning_triangle_filled"
            | "waterfall"
            | "webhook"
            | "10k"
            | "1m"
            | "zoom_in"
            | "zoom_out"
            | "scalar"
            | "cake"
            | "external"
            | "table_spaced"
            | "beaker"
            | "eye_filled"

        +

        Type Alias IconName

        IconName:
            | "string"
            | "number"
            | "function"
            | "model"
            | "table"
            | "question"
            | "collection"
            | "dashboard"
            | "add"
            | "add_column"
            | "add_data"
            | "add_folder"
            | "add_row"
            | "add_to_dash"
            | "ai"
            | "alert"
            | "alert_filled"
            | "alert_confirm"
            | "archive"
            | "area"
            | "attachment"
            | "arrow_up"
            | "arrow_down"
            | "arrow_left"
            | "arrow_left_to_line"
            | "arrow_right"
            | "arrow_split"
            | "audit"
            | "badge"
            | "bar"
            | "bell"
            | "birthday"
            | "bookmark"
            | "bookmark_filled"
            | "bolt"
            | "bolt_filled"
            | "breakout"
            | "bubble"
            | "burger"
            | "calendar"
            | "check"
            | "check_filled"
            | "chevrondown"
            | "chevronleft"
            | "chevronright"
            | "chevronup"
            | "click"
            | "clipboard"
            | "clock"
            | "clone"
            | "close"
            | "cloud"
            | "cloud_filled"
            | "compare"
            | "combine"
            | "connections"
            | "contract"
            | "copy"
            | "curved"
            | "database"
            | "dash"
            | "curve"
            | "document"
            | "download"
            | "dyno"
            | "edit_document"
            | "ellipsis"
            | "embed"
            | "empty"
            | "enter_or_return"
            | "expand"
            | "expand_arrow"
            | "extract"
            | "eye"
            | "eye_crossed_out"
            | "eye_outline"
            | "field"
            | "fields"
            | "filter"
            | "filter_plus"
            | "bug"
            | "format_code"
            | "formula"
            | "funnel"
            | "funnel_outline"
            | "folder"
            | "folder_filled"
            | "gauge"
            | "gear"
            | "gem"
            | "globe"
            | "grabber"
            | "grid"
            | "group"
            | "google"
            | "google_drive"
            | "google_sheet"
            | "history"
            | "home"
            | "horizontal_bar"
            | "hourglass"
            | "info"
            | "info_filled"
            | "info_outline"
            | "insight"
            | "int"
            | "io"
            | "join_full_outer"
            | "join_inner"
            | "join_left_outer"
            | "join_right_outer"
            | "index"
            | "key"
            | "label"
            | "ldap"
            | "learn"
            | "lightbulb"
            | "link"
            | "line"
            | "lines"
            | "lineandbar"
            | "line_style_dashed"
            | "line_style_dotted"
            | "line_style_solid"
            | "list"
            | "location"
            | "lock"
            | "lock_filled"
            | "mail"
            | "mail_filled"
            | "metabot"
            | "metabot_sad"
            | "metric"
            | "model_with_badge"
            | "moon"
            | "move"
            | "move_card"
            | "new_folder"
            | "notebook"
            | "palette"
            | "pause"
            | "pencil"
            | "pencil_lines"
            | "permissions_limited"
            | "person"
            | "pie"
            | "pin"
            | "pinmap"
            | "pivot_table"
            | "play"
            | "play_outlined"
            | "popover"
            | "popular"
            | "progress"
            | "pulse"
            | "recents"
            | "revert"
            | "sankey"
            | "share"
            | "split"
            | "sql"
            | "subscription"
            | "straight"
            | "stepped"
            | "sort"
            | "sort_arrows"
            | "sum"
            | "sync"
            | "redo"
            | "return"
            | "reference"
            | "refresh"
            | "refresh_downstream"
            | "rocket"
            | "ruler"
            | "search"
            | "section"
            | "segment"
            | "shield"
            | "sidebar_closed"
            | "sidebar_open"
            | "slack"
            | "slack_colorized"
            | "smartscalar"
            | "snippet"
            | "sparkles"
            | "star_filled"
            | "star"
            | "stop"
            | "store"
            | "sun"
            | "t-shirt"
            | "tab"
            | "table2"
            | "time_history"
            | "trash"
            | "trash_filled"
            | "triangle_left"
            | "triangle_right"
            | "unarchive"
            | "undo"
            | "unknown"
            | "unpin"
            | "unsubscribe"
            | "upload"
            | "variable"
            | "verified"
            | "official_collection"
            | "verified_filled"
            | "view_archive"
            | "warning"
            | "warning_round_filled"
            | "waterfall"
            | "webhook"
            | "10k"
            | "1m"
            | "zoom_in"
            | "zoom_out"
            | "scalar"
            | "cake"
            | "external"
            | "table_spaced"
            | "beaker"
            | "eye_filled"

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html index f902519d01..e8fb2103ed 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -23,8 +23,8 @@ -

        Function InteractiveDashboard

        dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

        Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

        drillThroughQuestionHeight?: Height<string | number>

        Height of a question component when drilled from the dashboard to a question level.

        drillThroughQuestionProps?: DrillThroughQuestionProps

        Props of a question component when drilled from the dashboard to a question level.

        Type declaration

        Props for the drill-through question

        @@ -60,7 +58,7 @@
      • OptionalisSaveEnabled?: boolean

        Whether to show the save button.

      • OptionalonBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        -
      • OptionalonSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        +
      • OptionalonSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      • Optionalplugins?: MetabasePluginsConfig
      • Optionalstyle?: CSSProperties

        A custom style object to be added to the root element.

      • OptionaltargetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

      • Optionaltitle?: SdkQuestionTitleProps

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        @@ -91,6 +89,6 @@
      • withCardTitle?: boolean

        Whether the dashboard cards should display a title.

        withDownloads?: boolean

        Whether to hide the download button.

        withTitle?: boolean

        Whether the dashboard should display a title.

        -

        +

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html b/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html index 4ba3fbfa50..8f1e02d18d 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html @@ -32,7 +32,7 @@
      • OptionalisSaveEnabled?: boolean

        Whether to show the save button.

      • OptionalonBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        -
      • OptionalonSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        +
      • OptionalonSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      • Optionalplugins?: MetabasePluginsConfig
      • questionId: null | SdkQuestionId

        The ID of the question.
        This is either: diff --git a/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html b/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html index 57cf9c4172..d5bf1a82c7 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html @@ -23,7 +23,7 @@ -

        Interface InteractiveQuestionProps

        interface InteractiveQuestionProps {
            children?: ReactNode;
            className?: string;
            entityTypes?: EmbeddingEntityType[];
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            targetCollection?: SdkCollectionId;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
            withResetButton?: boolean;
        }
        Index

        Properties

        children? +

        Interface InteractiveQuestionProps

        interface InteractiveQuestionProps {
            children?: ReactNode;
            className?: string;
            entityTypes?: EmbeddingEntityType[];
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            targetCollection?: SdkCollectionId;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
            withResetButton?: boolean;
        }
        Index

        Properties

        isSaveEnabled?: boolean

        Whether to show the save button.

        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

        onRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        -
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        +
        onSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        questionId: null | SdkQuestionId

        The ID of the question.
        This is either: diff --git a/_site/docs/master/embedding/sdk/api/StaticDashboard.html b/_site/docs/master/embedding/sdk/api/StaticDashboard.html index 76929144aa..eb0989de67 100644 --- a/_site/docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_site/docs/master/embedding/sdk/api/StaticDashboard.html @@ -23,8 +23,8 @@ -

        Function StaticDashboard

        dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

        Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

        drillThroughQuestionHeight?: Height<string | number>

        Height of a question component when drilled from the dashboard to a question level.

        drillThroughQuestionProps?: DrillThroughQuestionProps

        Props of a question component when drilled from the dashboard to a question level.

        Type declaration

        Props for the drill-through question

        @@ -60,7 +58,7 @@
      • OptionalisSaveEnabled?: boolean

        Whether to show the save button.

      • OptionalonBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        -
      • OptionalonSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        +
      • OptionalonSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      • Optionalplugins?: MetabasePluginsConfig
      • Optionalstyle?: CSSProperties

        A custom style object to be added to the root element.

      • OptionaltargetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

      • Optionaltitle?: SdkQuestionTitleProps

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        @@ -91,6 +89,6 @@
        withCardTitle?: boolean

        Whether the dashboard cards should display a title.

        withDownloads?: boolean

        Whether to hide the download button.

        withTitle?: boolean

        Whether the dashboard should display a title.

        -

        +

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestion.html b/_site/docs/master/embedding/sdk/api/StaticQuestion.html index 9fe7eebc5e..3deb840da1 100644 --- a/_site/docs/master/embedding/sdk/api/StaticQuestion.html +++ b/_site/docs/master/embedding/sdk/api/StaticQuestion.html @@ -40,7 +40,6 @@
      • Optionalstyle?: CSSProperties

        A custom style object to be added to the root element.

      • Optionalwidth?: Width<string | number>

        A number or string specifying a CSS size value that specifies the width of the component

        -
      • OptionalwithChartTypeSelector?: boolean
      • OptionalwithDownloads?: boolean

        Enables the ability to download results in the interactive question.

        -
      • Returns ReactNode

        +
      • OptionalwithChartTypeSelector?: boolean
      • Returns ReactNode

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html b/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html index 5355f8d73b..949ad0899b 100644 --- a/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html @@ -23,14 +23,13 @@ -

        Interface StaticQuestionProps

        interface StaticQuestionProps {
            className?: string;
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
        }
        Index

        Properties

        className? +

        Interface StaticQuestionProps

        interface StaticQuestionProps {
            className?: string;
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
        }
        Index

        Properties

        className?: string

        A custom class name to be added to the root element.

        height?: Height<string | number>

        A number or string specifying a CSS size value that specifies the height of the component

        initialSqlParameters?: SqlParameterValues

        Initial values for the SQL parameters.

        @@ -47,7 +46,6 @@

        A custom style object to be added to the root element.

        width?: Width<string | number>

        A number or string specifying a CSS size value that specifies the width of the component

        -
        withChartTypeSelector?: boolean
        withDownloads?: boolean

        Enables the ability to download results in the interactive question.

        -

        +
        withChartTypeSelector?: boolean

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/assets/search.js b/_site/docs/master/embedding/sdk/api/assets/search.js index a91212dd5e..5649aeca11 100644 --- a/_site/docs/master/embedding/sdk/api/assets/search.js +++ b/_site/docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "eJy9fdGS47iR7b9Uv9b0FRIkRc2bPZ4Jj9e79rp9vQ8dExOsEquKbomUJap72hPz7xsARQlIHJAJSfc+dUcJyEyCB4lEngT468O++3J4+Pbjrw+fmnb98C3lxeNDW23rh28ffl8d6h/bvt5Xz33zuf7vY33om679677bHR4eH477zUyj92/9dvPw+PC8qQ6H+vDw7cPDb4+jJrWg7Kzq+a3ZrPd1Kxf7zuniyH982FX7uu3nzI/YUbd903/9+9ddnfCE74Ze/anX/axp2qZvqs2Hf23+Wu2rbd3X+xSzTt0P/9rs3O53tO/wofpcf99WT5t6nWLY4VB9rutzv/tZ1LW/r1+6fW3sSjCoa59st8PQ7Z72/O2YAuqu3R/vi+iuTR6Lu4/CbnN8bdoU6F563M+Kf50a/ZgC1bFTc1+c9tX+te6/6zab+tk0TrBo6Prsdr2fXV+a/u0P3Zd201XrlPdl+q2dfjdZRIvVUuV0WYeOfR8sO5e/Ta4yXNZ3b9XejHu3P4u6/GlSUnEZpct7+71ZPmtHFv8lzTje+8/NwVh23DqTZ6rRtDZnaQ+E+KOLf05Yzk2L/zL/F0h8Z1u3Q2sMnIi5Me3n1s5UnzTg/NvENE+z4fvtrv/6Xdf2ddt/1213XWukSIypTc/noeez0/MeVnXtd5vm+ZPIjq59PrW9h+Zd9Vp/aP4tA4RpfBga30P3of+6kSkeW95D6+fm0Dxt6tnp66g/dXk+d7mjHd+DyFZgiyS0nbXHdZ37uurrP1SHt6eu2q//s1tXm4s94Ee5SwOdmVeLtZA7tlNI/R30MJPix2hc5muizxKNxP+yc3ZPc6Ycut3ExilZu3Er3aGWqjeeZWh+P/22S4IBY/vrLZjA3j+qzbGO4m74NWExFYDNkSlczaDFEQvW9eF53+y8QHXCAL/5HfS3XiQRVzwdQ8xoDJzUGJ4yzeOfEx0Tzp6A3+TAQMmKmEBRjgJZek1qImpEUkYixRqYiIibIco/JOiHaYeoelG2IUm7m2SYUDuVW0jSJ33Oez0hTyBEVc7lDRJ0RrfoUeXinXmCFXhDHjVBtg+f1h/sSo+HvtueHed3ZkGs2+OPfb29GBRvk7QD9iQMQgNdE20SFlXbz/Q5iAW/Gzo1p054bKeeIOkdz1oje9dX2vP9uun/3LSf0syp102/GXrdYs0kKkx7bJX55Xq0md6DRd9v6q27W59ulqwRTiD+ww3UCRQ1T5cEpkVzO92hNo3+wpIJEb2m+bZuj3P5BLF+L3kXUXpqc5umdXPwAwqszGl2m77muWu9pBnWZ5pNRrpSfZvqqd7MKBvb3Kipfuk/sGU0oq9+6Q8zy6dUK892YY33wuW+eX0TPqRtesNTFu7W7KVp6/+s++qpOtS/O/Zv33XtS/N6tiDWQLx9+cO+2Wz+/rbvjq9veBMTbXGLE5uUKfBmUavFKes5E2az1sk2oA3djBWSbV2yHW+1AajUhHPrO2mf3FrO2JK0wUy3DG4z50wSbTaTbYFbzhlTRBvPKyxxt5+zJkxtQq/Qnfb8931yvi2dUT+3OU3W7xMbM9qnuY1k3dHt8YwZ4k1yukVNLx+NsfGddH9p1v2bVPfY+G66+zfLYZuF40NtxtUNkOds6d+eTWe7hFw639E2sLWdt0mwsb3Glr/Vh7ofagdSrNmbbk9jt+vtcQI3s8E2S8J5c3m2J/hFHKoFPf04Df98C6s/IVEQH0XMje3GxlY/TgyVo//cfoIFSbQAvOE/+qHSpEGmez90H8uKZmKn2+0TIwCatzv1vod1b816XbcgpJsyaugkiOXSbDmFiYnGnHrd3Zqu/XNXyUDdWad4V73/0/Rv3bE3W03ZMAw2fBm6PZ+63cMeHk5NGTEXS6Vp3tftut4jDy4yZuiOJtCd7PMDvSlTpqO8NK02sKj26797gdWUdhtNVPv1dHSVbkUYQsxZMR8/pFuRNg43jgHPHH+/farX66Z9vRTyXEwJf0vKSl+6/dBs+nr/H/VXZ6TBj0nSf+RpzfEP0nJLp2Q0jJbQj+KACXX2V8xoi1vCpmmhgsgpbndC8DRjhSR+SrdjPoSaMys9irqLlSmwuCKWSrYxGk7NmCaOqJItigdVMybJ46pkm1hoNWPITHR1pXYYYIksEcVYyVbxMGvGlLlIK1m/INiaMemKeCvZSj/kmjFoOupK1o0DrxkbZLHXVbaE4ZfAlvkI7Cpbksfk9vHAocgUaEU1gt6j/b56/sTyUjF5756q508zyShkZ0zzvq4+dUe4ADO9l5Z30/qHfbczSJFrX1963GzFOW0qN+OcLP1/YkeQvp23YzZpm2DHONH/p1m/1gJEjHP8y9j+zhbIX4tvyT3fjdmpSV5IPba7k0apNxj03s8fDLu8eb0vY7s7aZS/60HzPd/xf3V9/dR1n+Z1t5eWd9MqfdOj7vu96/H3D3XfN+0rXN99G8ZA63DpcXcr5Ejg1twTE+Pv/2gOx2rT/LsSLfZnkz6zbjfbg6irqBUSwipBtyHZpaoNxX5fzWObH7r9VqZ/fAkvQ4/brThut9XePb4YV+80vZ9e+ZQ467/nXIgG3b5ucag9p8+bc1LgeTPuJgQGGcyw9SVejyaGIk3TcqdAHIuc5/WjDrdaEUTOs2bgHnezY4yc5XZ4PW61A8ets8ZMdLuvRYmWCCzAafRRnBvDzuoOGiccyPUPvoqFz52BFT2SsO5YbtRcLXKiVaJ3JHw7ie/lrTqMTlwQOXAV796qw+jOrwgm3AeLvqPf7Xabr0lGdW116nOjJYLZ6++JZt8RaC5/VzbdaO8cMHXmhp27RtWQgLRizAmp5jntnaEHvmLEhCP1/2GE7jwyiXN7dhxSSUxeoD99H9BsfX7qxUSTJOpV1fmpFqDi/GkbJLX5qVa8RcnS9Mr8VN2ThfnTliTV5SfbBcvyZwwSVeWnWgKL8qcNEdXkp9vhluTPGTBVkZ+uOenZ7/rUE8TmFdX4qdrB9XLTBgiulku1IUpaJp8HSNUcPQ4wbYT4NECyPXMZC9eI1LTFDEnpHgWY1jx9EiBd89RBgDlLUs4BXGPZJIl89SmAaywRZlKZLVemVBPjtlgufDaem+yYsG+bjS/mFV0Rd0w/dtI+gItKHrmbcx+QORCbEfa6U6mhUNF1ofPEM9+MtJih18NMbuXsijpnZPIym27j7IozZ2PyMiSycWaWOF54dm7wtvIZUbXN1r0ZTir83aWjeFSCJ4qWbr6+bQx0/9L+sfs8zbVj484SuvbtJOHuVvZuhbnYslOve1gj8PUXXnIWQqzpLf6dc5Ii3UEHOYa79ruqfXau6khSYZLKY3fxa8GPmPZuOHc5P0ywxy1vyvKWs3ovre680jLB162szjNcu0ZxO5LXJGgDx8Cfu9em/dBX/fEy2s7fkvisiQtNUq8ymZVs6rN/t2v+o/46oePS6A7a/vSln1H1py9p90phKR+q7WZGkWlylSZLcf3O3+uD326V/dchSxPBQKzhdVrD5EX4k9xDoEtTI/JEN6YCMycz1T8361m9bstbtQrU3UVP6zrdmKZJJyvXddgcAeiYrlOjK3TNI9G7Iw7/fG9EOhebXYXKqTuyJMi86L8GnZP3q8nU3k3fpjr035jy3G+a9qUT6Q663MOObbeuw3UAqR9b3kPrzDy9KE2cq1M6vT3LlM7JbcqsTjfqdBp3Dh3m/1k+R83Zjtd9d2whVkdR77xms09hDJvV901w3eG04m9m7z1MtuDN2w3PqJ/e+CbrPtTPXbuu9mEQGNHvdrjJhm6/nnvqsclNevbVHKhOLW7WInmRXrs7afxm46UUZ/SeW9+i3XImk9P+3bnJLXpe/FMZSM/MgQyZnrZ+rczOb1KT0+gWXbvu0MzqchrdouvwVq27L5Oazk1u0hNUikNVs0XiMm19/Uv/zW7fbOf8Fmt4s06Ztwya3qy3r/d9I1LrtEzUGo/KTx9j+vtbDUMb9+eETFK17+tDU6GYPJD4zm0991yeuTHt0U+ZTVpx7vV07nUPa853ToiscFvfQ3t73D4JB+Dc9B56d83nrv+7iaVEum3z/tT8Lvq7XWS9BsrPbe+h2Tm2P6969ox/mu5ePOD3HOu+6zZ9s5PpPbe9UnPMk4W36AS/JPiveNrMl/ZOUOYTWhjTaj9hsf65CsM9rtVteaPWqQwKU5uSPJnVG8+bMK3ylMmsznll99AykyNhGhPTI7PaYY6C6RSlJ2Y1HXdrIV69lulaZ+f8dEYdN0vIMUY/1SHQcFnRzUUm26G3cAj8x5KMR1/9tWva/i9P/6yf0Vvxfk/yh8ctcg+hvHfntnMP6dsaHfu+kuk9tbyL1vpz3cqG793Y9C56P5sPuMn0jk2v1RvD0PnevQ/14WBo0u5THb552EqOp/qXMFqIi3w3NJ9+Umy3fB2YUC9YE+a0x0b7h7p/fvvbcLbb9vkhHGvQ5iou8Ieu7X+ots0m3GlefrpK8rT7vdXrCgQmbJtiPtVnF6rd+WjthY4NU2LAkm21G4N6e+6xOne9zi7noqZz0333uUH51fEHcXkJ7+iXlcBfE8rUNpvuy3dde+g29Z87gItA7Dvb5XnosunmGUjf7pgd8XoLZMLRnGs7tb6D9uCQ2YTu2RNmaZqDcp4p1bNlPEm66/2+24ffCJ8wwPaY/zZ4mhVmbf5j1a43NaCxkBGmw9ulwx1sMKX+ddpQDF3uPBab7rkCuQGo/tTyDlp30ytDqPzU4Z4zsIepTaB7bHidTuRX/zuWCxp/uE+hgyctaZd+NnByk/5juAb7KodmgjhpTh8IzHxN99Bhj1auZe/mdKhyLU7UzWmH23NfpcgNAz0IgTivn5rOx3UAfvK8E3jMmbT9yeHNaHJa3aDtJR4NO9pMq5ex1Y3aPiAGjek6SPizSU2bpq3Z7dNAl2k1c9Qkpi22Cfi/iGgxf0zB2XbbtT/DKXKW9M5vNW28NSqeWqh//mfXtKA85KLNb3W9tnpbNWHB0kXP+Pv1Gl6a/aH/eWOqkyf0+K1u1TbzqrxG1+sCq8JFh2BFmJJt0q+zg+Y1ulHXzJC5bW7QhKM9R40syGM6+Nw/35nwD5ONuvht9vekpMKH9SenSO3y5tnfU2Wek6q+SOfPV0s0F6J/72UM4a+p8r/nsZfzt2RZeD8W/HKbXD99gH+Wrwbb+nCoXmuJvHeXthjPEVOnn83dPbIdDP455fiThw+J3Hem4uTUZ/JK/4jpMkvgxf4JVomu95+1ELyNMd7158Plr6nInThOBX9NlW88p2/r8Jc0Oc61NMzFhj9NSnbSiOboUvMc8uXs7+IkIuvHxhL8eMuJtKg8QQYLGjqXff4xOkCObsl3ZZK0z39SZsKY9K/J3Gqb8J1f8Q2ZFMuin4+JGyT+ckyKHfGPxsQNkX8vJsUS9qmYuPqZr8Sk68TryIx+2eKRYAu/PSluwNzNSSlaBR+DiRtyxXdgUmzzz9XGzZg+TpuiEX/4Ja5Z9s2XVAvCm3qmLZi/pSfVgpTnv+nZg6U+gj5RDjpc6Kd8/rUXMUaW+avuQERWxhYMtKSm3zmYoHHyusGo/qSbBhOsAde7RW0Q3OyWoBm5oeT73BL0+dfJRPVNXxqTpG/q2rIJ/Sk3lk3b47iB46H+zlaMnn3G73bN2Rr4a9I2xexszI3wdbv+05f+b/VhZz5fcVaAf5a7h386VwtMyHo3tMNjFTHxt58eH5p2Xf/y8O2vD5/rvandefj2gd7r96uHx4eXpt6sDw/ffhxpG5N7HhIo6+75aP/706nZP+zLMo2H1v9n8fD4cfGY5+9J//TT48exr/27/cMo4vIX2089PH5Ujxm9X2TK66iCjsrrSA+PH+kxy94vlqXXkYKO5HXUD48fNdKog47a65g9PH7MkMYs6Jh5HfOHx4856pgHHXOvY/Hw+LFAHYugY+F1XD48flyijsug49LrWD48fiwfdfm+XPnvsQw6ll7H1cPjx9VjVrwvaOV1XAUdVz4ADB7UAhmrQvAohh4LH/Wol+8LBjwFAOQjSBlcKAKgVSGGlA8iZaChNOobwkj5OFIGHSp7zBfvF1nudw6hpHwsKYMQlSPFIZqUDydlQKIK1DcElPIRpQxO1PJR5+8z/ppCUCkfVcpgRZXwiUNgKR9ZyuBFrZDVIbaUDy4ycKEFwiWF4CIfXGTgQgoophBbxLyTdU/0qIv32SrzOwMH5YOLDF4IgYtCcJEPLjJwoQz1DbFFPrbIwIUQtijEFvnYIgMXQtiiEFvkY4sMWmiJ+obQIh9aZMBCEFoUQot8aJFBCyFoUQgt8qGlDVg0WvJ0iCztI0sbsGiELB0iS/vI0hSdSzpElmZrn138CK5+YPnzoaUNWjReOkNsaR9b2sBFI1zqEFvax5Y2cNEIlzrElvaxpZexOEGH2NI+tnQZDRVCaGkfWnoVixZ0CC3tQytbxAKGLIRW5kMrU7GYIQuhlfnQyigWNmQhsjIfWZmORQ5ZCKyMBVZZNATIQGzlAyvLoyFAFiIr85GVWWQhr5WFyMp8ZGUGLBp5rSxEVuYjK7PIKlHfEFmZj6xsFX/gEFqZD63cei3k8fIQWrkPrdygJVsgz5OH2Mp9bOUGLhlyeXmIrdzHVm7gkqFALQ+xlfvYyrPYBiMPoZWzuN2AJUPrcA4idx9ZuQFLhvxdHiIr95GVG7BkORzoEFq5D63coCUrYOcQW7mPrdx6LYTpPIRW7kOrMGjJEKaLEFqFD61CReO0IoRW4UOrsNBCmC5CaBU+tAqDlhyt4kUIrcKHVmHQkiu4PwuxVfjYKvIYLosQWwXbFhbRWLwAO0MfXEV0QSxCbBU+tgqDlhyGD0WIrcLHVrGKraZFiK3Cx9ZyEVtNlyG2lj62liq2mi5DaC19aC0ptpouQ2gtfWgtdXQTHkJr6UNrmcVW02WIrKWPrGUe3XosQ2gtfWgti+hSvAyhtWRZB4OWXKNZvASJBx9bS4st/I5DbC19bC0NXPIcag7BtfTBVS6iC2oZoqv00VVadEF3W4bwKn14lQYxOXK3ZQiv0odXaT0XcrdlCK/Sh1eZRR1IGeKr9PFV2nQWzPWUIb5KH1+lTWlBR1+G+Cp9fJXLqMMtQ3yVLLNlEFMoqBkkt3x8lQYxBcHOIb5KH18rg5gCTotViK+Vj6+Vjecz2DnE18rH14pibmQV4mvl42tlIFPAKbUKAbbyAbbKoj5oFQJs5QNsZSBTFFBzCLCVD7BVEZ3MqxBgKx9gKwOZYgk1hwBb+QBbWYChCbkK8bVi2VOLLxTCrED+lCdQF9GIb/jN7+787dTfgGaJYqDhJ96dZVEXdteIIvvhJ96dJVIXOp5YXIBc6oIlUxdZ1B0Nv/H+LJ+6yKMeafiN92c51UURdUrDb7w/y6sullG/NPzG+7PU6qKMuqbhN96fZVcXq6h3Gn7j/Rn6bEYeOyiFEvhBBl/FfJSCKXyGPpuXx25KoTQ+z+Pb3Dz2VAql8nku36bnsbNSKJvP0/kqnr5QKKPPU/o2TY9dlkJZfZ7Wt5n6JSRBUF6fJ/Ztrn4JeRCU2eepfZuuX6JdskLJfZbdVzZhv4RkCEjvK5bfVzZnv4R8CMjwK5biVzZrv0TRmwI5fsWS/Mom7pdovVAgza9Ynl/Z3P0S0iIg069Yql/Z9H0JnT5I9iuW7Vc2g19Cpw/y/Yol/JVN4pcElyyQ81cs6a9sHr+EsANZf8XS/sqm8ksIO5D4Vyzzr2w2v4SwA7l/xZL/yib0Swg7kP5XLP+vbEq/hLADBIBiDICySf0Swg5QAIpxAMqm9UsIO0ACKMYCKJvZX0HYAR5AMSJA2eT+CsIOUAGKcQHK5vdXGHaADlCMD1A2x7/CrC+AHaMElE3z4/2xAqyAYrSAsqn+FYQtIAYUYwaUzfavIGwBN6AYOaBswn8FYQvoAcX4AWVz/isIW8AQKEYRKJv1X0HYAo5AMZJA2bz/CsIWsASK0QQqG9IiELeAKVCMKlA2/a8WELiALVCMLlBZnOVUgDFQjDJQlgXA+VUFSAPFWAOVD0UaMEwAxIFizIGyZIBawJkDuAPFyANlCQG1gNAH/IFiBIKypIBa4LIJgD5GIqiBRVjgPRYgEhRjEpRlB9QCwh+QCYqxCSovpgwACGSUgsoHBMIJBEgFxVgFZYkCXKgFaAXFeAVluYLILg9QC4pxC8ryBTBrrQC7oBi9oCxjgBPXChAMijEMyrIGMHetAMegGMmgLHEAU5sK0AyK8QxqIBpwd4A9xjQoyx7AJLYCXINiZIOy/AHMYyvANihGNyhLIeD9HSAcFGMclCUR8O4eUA6KcQ7K8giR7R2gHRTjHdRyojoNUA+KcQ9qIB/wkg/oB8X4B2U5BZwVV4CCUIyDUJZXwIlxBWgIxXgIZbmFyPYUUBGKcRHK0gs4Pa4AG6EYHaFOfARcuAEhoRgjoQZKAk98wEkoRkooyzMoBRd+QEsoxkuo5UDWw4UfMBOKURNq4Caw3wTkhGLshConHB/gJxQjKFQZr2NTgKNQjKRQA0uB8Qt4CsWICjUwFbhIE1AVinEVqhzSKzDwAGyFYnSFKod0Mgw8AGGhGGOhLAmhFOTyFSAtFGMtVDkAEIbdgLdQjLhQ5QBAGHgA6kIx7kKtBnIMxg2AvVCMvlCroUIXl28CADIGQ62GIl04AQGJoRiLoVYT6WXAYyhGZKgJJkMBKkMxLkNZekLBKlIF2AzF6Aw18BkEJwAgNBRjNJQlKRQsJlWA01CM1FCWqFCwoFQBXkMxYkNZskLBolIFuA3FyA2yZIXChaWA3CBGbpBlKxQuLgXsBjF2gxYD/hD+CdAbxOgNWsQrLgnQG8ToDbJ0hSIYARHgN4jxG2T5CqUXj9nivc4KJgDU9TKCgyxhgcs+CRAcxAgOsoSFgtWuBAgOYgQHWcJCaTQDCBAcxAgOsoRF7A2AMl9GcNBwQCHyBgDDQYzhoOGQQuQNAI6DGMdBw0EFrR9p+X65Wj4qnV3+m5/+y8QCaDLqg05nGODUAtQHMeqDVLwemAD1QYz6oBP1AddGAtwHMe6DhvMMsASTAPdBjPug4UyDLuEpIsB+EGM/yNIZWW4Wl2VGj0aUVu+zkg8GQCljQmg45XAW8Kj06lHr93pBTBZALD/0YHkOV1a2OJnoy0JHIPgZCEt6KFi4SegYRHAOwmI3g/wkwaMQDKU0oHQcjUcjCw0MOhrBz0ZYEsTIovz9yko6/Uc/6sX7YskmEToxwY9MWGJEwUJPQqcm+LGJgUiBKWlCJyf40QnLjKgMHtpApyf48QlLjagMOgF0gIKfoLDciIIlo4QOUTAuhSw5glPyBMgUYmQK6QGf5QUeq0e9ep8FsgBWGbNCw9GK82R5vIhlsgBsGc1Cljdx7coX2C50oofB1pIoKodzEJAuxEgX0sOZMbiCAtaFGOtClkbBB9YI0C7EaBeyNIrKNRYAQMp4F7JEisrhJAPECzHihSyRonI4SQDxQox4IcukqBxOEsC8EGNeyFIpChb6EaBeiFEvZLkUBYv9CHAvxLgXsmSKyuFBJ0C+ECNfaDigUaBNGAH2hRj7QsMZjQICGNAvxOgXGuiXAgIY0C/E6BcajmrgEBDQL8ToF8rKiRAQ8C/E+BcazmxEQkBAwBAjYGggYJJCQMDLEONlyPIskRAO8DLEeBkaeJkCHlUEvAwxXoYGXqaAExvwMsR4GbI0Cz6SQoCWIUbL0EDLFPjIIzrzyIA50DIFdAyAlSHGytDAyhTQMQBWhhgrQwMrA4sOCdAyxGgZGmgZWHhIgJYhRstQMaQnoWMAvAwxXoYsz6Jg8SABXoYYL0MFTcwrwMwQY2aoGNJD0LMAaoYYNUPFUEkNJwDgZohxMzQcA4EVUATIGWLkDA1HQSJLK6BniNEzVAznuuEMAPwMMX6GLOGiYBEVAYKGGEFDxUAMwhkACBpiBA0NBA0soyJA0BAjaGg5IBDOAEDQECNoyBIukBclwM8Q42doGU9PEuBniPEzNPAzsI6LAD9DjJ8hy7coWMhFgJ8hxs/QwM+UcP4AfoYYP0OWb1Elxi8gaIgRNDQQNLCWiwBBQ4ygoYGggcVcBAgaYgQNDQQNrOYiQNAQI2jIEi6R0AQQNMQIGiqH4+Bw/gCChhhBQ6We8KCAoSHG0NDA0MCCMgIMDTGGhizjEglBAENDjKGhgaGBFWkEGBpiDA0NDA0sSSNA0BAjaGggaGBNGgGChhhBQwNBs4IzCBA0xAgaGggaWJRGgKAhRtDQQNDAqjICBA0xgoYGggaWlREgaIgRNDQQNLCujABBQ4ygIUu4KFhYRoCgIUbQ0EDQwMoyAgQNMYKGBoIGlpYRIGiIETRkCReCpWUECBpiBA0NBE1kAgOGhhhDQ6uhNgwCGDA0xBgavRjuWEEA1oCh0Yyh0QNDg5cADSgazSgabSkXgsVlGlA0mlE02lIuBIvLNKBoNKNotGVcCBaXacDQaMbQaEu40ALNAA0IGs0IGm0JF4K1ZRoQNJoRNHoxIBDNAA0IGs0IGm0JF4I1GhoQNJoRNNoSLgRrLDQgaDQjaLTlWwjWWGjAz2jGz2g13PMDAQzoGc3oGW15FYI1BhrwMJrxMHo4ggJrDDTgYTTjYbTlVQjeCaUBD6MZD6MtrUKwxEADGkYzGkZbWoVgiYEGNIxmNIy2rArBEgMNWBjNWBhtqRSCJQYaUC+aUS9axWsTNaBbNKNbtKVM8Ak0DSgWzSgWbSkTfAJNA4pFM4pFW8YEn0DTgGHRjGHRliXBJ9A0YFU0Y1W0pUTwCTQNKBTNKBRtKRF8Ak0DCkUzCkVbSgSfQNOAQtGMQtEUrVDUgEHRjEHRlhHBJ9A0YFA0Y1A0xUsUNWBQNL+HyjIi+ASaRldR8buodPwOPY2uo+L3UVnmA59A0+hGquBKquEEHnT/8FIqBj89VOhA94/upeIXUw3sCJ7+6G4qfjmVZTtwiZ1G91PxC6os2YFvmUJXVPE7qnS0QFajW6r4NVV6An3opipGjejhrip80RWgRjSjRrSlOnCBqgbUiGbUiM6GAkW4eANqRDNqRGcD+uDiDagRzagRnQ3og4s3oEbGv9mbWD/X+75e/zjcyPrx40PwQdhfH34+3ddqMlxWo7m61SSxvv31t98uN7R+++tvziWt5jejtWqbbdXXnhylL3JMtaNIjvOVWNeklWuSEol6qp4/PR373tzPfRG1dI1SpVjS6747tmvPKO2Ok1oOnWmQaf6zOv2HZENoPgvVtH29N182/lyzzzhc9C4uWoWCu739qLFjeqYc00k4nvuKDUBGrhQaH1eP/8mEcuvqU3fsvbeUuW9plSRnve925pZ5T17uyJO+D4udYPgVuaJEkp6rfV8fmsozybnn+dcHw4OLJJk7rO03IX0kOiZpuSD/ubLMfZsJ9pg7teGgF+5IyUAGLul2BC5dgcKxP3/62XlUR8zQLc+Gf4t8+NccKhpAvBSquVyf77otR9HJPxTF8G950mgumTipPPkLU1g//Gc1zqTl6T969ClaipdNd6i3dXs8fTTdtS5zUJMLxZ2/E+c9ZuF6kyxV1NO++3Lg/skZuNNAmVKPqwRvmoOZMsdt6+PddQlX2hw6BxfyqfY2vnct3dXz9NqFYOQOwp3audgs++FZx6CVs/KY3LRQzHHL0OKMEYmtcT5N6prkyloJXZ/zoVtXlAviUhYYPNvr/dc/V73/hK5nz4RPOIgavxSw7dbVxhVKuTtqV4sMEEvuCF5l6ufT99MuMrUzlFro963Myxd5HGEOdqVezxMWPLJ2hlLqVI6HvtueH9l8Rsd41aavt55kZzCl791KNoJ8G53Zn8nAeLbO93LajTLGILWQGec98GApfGxnnctkfiEYSs9dOY4mP63QlMuiyUDwYHa9qW0zV4uD0lzmWL3P0V0k5c7upBwjiEU2+mxZuGlkx3DlBtq5zMutq77yndLSdSDSt+R8o9n1la6slfDF1C9NW29P37/F+7zcefGF8Dnrw/O+2QVewxkxPYZRi/N/xq1ZNk6IUuam1s2hetr4o5E57iT3d4Hz8k5fw/rSrF9rfwfkLv8kHAtPGgzJV65U4Yub+OzhRXLhvLqyGOdAPs4B4fDGP2PogMSZt8VpkpXLUWMxapTN6Hrd+Gu3u9yQGve0uWwOG2kWH8gV586kKeXWefLCwXBgUspQYoT64WG5cFEhW2MHKWF+pXQ3V8KA4vSJdtfBuKmVldCi7VO9Xjfta22/5Ww2kR5AHZEr2eyst7v+63PX9nXbP1++8eza6TysLEsxGPczi/XJzW+NK4c53XVyU0J7rWy+jXB9tRR35xF8aTZ9vf9Uf/VQVzjmrlKe2+7svfDTMe40c8eN8jilC+HcM5+hxm/JxbcpSxOJ+8yluACiXPhGjJS309eYfZvc7cZSiPBfdn56wZVRyFzs8EK9GesltMYFTDh1B3FoqSndpBTJhuul2R/6nzfda+NvGVfu9FhJLTOy+I7RVL84omRh0EvX9i/Vttl89a1ywVvKpoERdWj+zXaxboy+ksH9rTp8bg7HatP8uw69sLn/yMluyKARLupuirIox/l4isjNBRanhNXpL1q4mwo/Duy4FgfT5ahysRxXddkS99a8vm3Mw3TtW/eZ5Za85FIptDiQol1IXlL9ibnv5rlrOUQzZxOZn0dAhgrm+7UL9jEYM2d+T8vKaHYxxjnlaL9whWzal87XmN8QPp0+xxnLiJG7kslmLvj6swM1B93lmHxdnFNtwjcIPyHqbEScfchJ8klDMaocR19r6UOdSSIYaC7dcG4hm/tIZhBsuuuNuVw5UTDK7izdxUclP/8o8sL1BUav3DxvljwaZw2MXQr1uKnf7OrBCRiVUJHLKmQyhzilaGRaQkXuFjSTTodAEd6VhtrcWFpIIsxqCxP07vqvhDk6oMbd/gAl7kQRZsSiSoB4d9KIfWsg3o/dgBqPIbkaaIMaIN7FsZCAkvDj5uZBR/DVoz/+e6j7vmlfDxMD5UJ3eTWmuMJQkXLBu5Qu0VFFYwBZ4XFULoqXsvgWaNvXh7qPzRSPTS+v9jGH6nMdVeE6ZiGxE1FxhnS33wJFLqCF+wGk6LjdVvvm3/EVQPl5h6vXtL7pNzUocHBRthKuZIdu55Ps5G6XxzBWmMhoDma01yhgMMd/HLlCxFh5dRvmbh3i4hSEnaKy5UjCC/PQ9hvZztOTS1sJF89N9VR7ebDMQVQuA9SmOrCEpr4hIjfSwv04uesbCRNAVlS4HXfz9MJNzqZ+6Q9hGULmAEOYM9rwDa9yiyKkm7hN09bh3tmcc3IGSTZJTeRSx7JYbrpBuMpsuudq4ycb3LwMjVt4LdwmWCgc+qo/MpfhLhXCfO222p1jUVObUtk36st167aokC3l2/pwqF59mLkLp17IADtNVZl78pxHlr2OUOSXpn+rds2n2k8tkZu+EWapsHDml5Trl5Rwl48lH6qtn7R3SxSU0CuMoh0E+DLd8gShfwAyd5ujAS56jW5SQTgLzgpwOZS38gm3yaFIzgErl9KkRdqbA9U8LmlPwlqli7iTg+rfalaR47Jz5nagFLG4gsFlFkm4kgYS4wAoXDct3OVcxPfVrmvavnv6Z/3M6AKvYEfoEk9yz1TWoT4cTKDWfWIVjG6Oh4Sr3Sj9pe6f3/ZDFGglvzDZLtCE4c9ZNk6Vu1XXVKS9w/irc6uEqUgb4t2++9zwsuilVwyVNsVGgWE87ZatUpHmF3EI7JpZpr38cMaWbiZbmA8fpR154aabbSPh3mHbrf2wV7l1VCSsaOahpRv36pFRHcsD6FxVeq4vEh5QaOvXyuyh/KjRfWpharrt+vqp67yS3NJdnEmGlFEOoOLd9VjLYNIet0/slebuLNOySdG11W7HfMDCfThhwVXXPtUv3b422zePmHL2RUPX7LRfW47slNDLdO1z1T4z/Hm1t0JCDlRYk0e/DP3O7Fkme71GbHfwo1mPDZVKsTWR3gTxYmKhmPOCanYqfojt7uSULJBi8kxU2R17UwXnFwm4Bxy08NBF13ITC0fKatzej6VgWlj30rVTlrrBxGp802MZhxZy6l27P3oT2fGGJ/+VnWQvaUS71Ho+k5y16bQXzE4yx0MHSlgsuqtea05tu/tCYQ3YmUb7HNQVk8tqa2FkvWs+d72tovK9muuytWwWnSIRz8c6FOJp+E7DtjytMKvxFamzZzqz2bKVIh4AuesFCfPBu24XkNm5u95mMl+w6w5NuBC6goRFH7t9s632/lqRuS5OWEIOQyW36I6E7N8oyGef3ZKn8UWOXLFwVeQJfg9IbpY68Yk5Q+HJdZPSwvMjkB/whLrro5bFZ/u6XRu2Kazw9FydMy3H409qzFpqIaIcxsGz2s2aC7eme5PWQ8lGR1YhG9ULR+HByk22C883cCrCk+dm4oT1OIf1p2jNhRu16YXsVR/WnyKV8uRyinoheweuOJsg5aV55kIbR6pwENefUL0kubSkXogHMF5+SC4fqRcynx9IDA/uuKyjFuaDjFi3JDFcU0h5h3dka8Fh/Qk7TXKLrbRwJ+dIwwwVuWf3tBKjyOxWuX0ucoTHAE3+q10HS5Yb7I/RPgk97uGtWndffHnuyiUM8w+box8guCexSAo9p5QJxGAuy6mFeUPDGDTPML1H7l5LCyuAmDwAEHduCM9iDELRokTuRk4L1ztfXGiiGxpr4Wp06L/6YSx5J/BPgedpR7waTxircyB/PmE8xqSr8yGl88FiIdJGktpbe1xK5HzWTLi3DGhvT7J3wl32PkHM7ybmhSVafbV/rftIpt8rtBsEZKcRXY5nYIQXaPT1vm+4T3HPQ5EQd339C6M03afWY7pLj0ywVGyYN3R3UMLyEOvPvUSO82LP9cQjB6+EN330XbfpG7823j2TR8IqOX5kRHlnxMvz2S7ZMnHcreHhYDcVLkyDHQ81O3Rb7RrfD7jZFyG0zXJoCifrdv3PL/2+PuzMVsIX6yVRZaNo1wz/kd13Iaxj+NwcmqdNDQ7uk3eiNUVY7AyKu4uWOWJvZwSCeu/+ApkD+NKs+zdvajhClmMBzTnhM1Zqa7H43h4vDWagexx/NR5eHdPjWui8rfSpqzvcdMvyPL3PzyCb51aLBYQhR03tvO+N3S30eKOHEt4wYGSPtaOs2MqRevKe2Zh0Pj3JeGPHanT6ahzI5Xkg5Y9oyj43Teulkt3jBsLaHSMqshN28z3l+TiHzK0ZsSGInKBwNbpxNZ7FlATBPz0+7JpdbWppHr79+NNvv/0vBURF1Q=="; \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/dashboards.html b/_site/docs/master/embedding/sdk/dashboards.html index 509122ce12..d8900db40d 100644 --- a/_site/docs/master/embedding/sdk/dashboards.html +++ b/_site/docs/master/embedding/sdk/dashboards.html @@ -4755,11 +4755,6 @@

        Props

        SdkDashboardId The ID of the dashboard.
        This is either:
        - the numerical ID when accessing a dashboard link, i.e. http://localhost:3000/dashboard/1-my-dashboard where the ID is 1
        - the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data - - dataPickerProps? - Pick<InteractiveQuestionProps, "entityTypes"> - Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question. - drillThroughQuestionHeight? Height<string | number> @@ -4854,11 +4849,6 @@

        Props

        SdkDashboardId The ID of the dashboard.
        This is either:
        - the numerical ID when accessing a dashboard link, i.e. http://localhost:3000/dashboard/1-my-dashboard where the ID is 1
        - the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data - - dataPickerProps? - Pick<InteractiveQuestionProps, "entityTypes"> - Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question. - drillThroughQuestionHeight? Height<string | number> @@ -4953,11 +4943,6 @@

        Props

        SdkDashboardId The ID of the dashboard.
        This is either:
        - the numerical ID when accessing a dashboard link, i.e. http://localhost:3000/dashboard/1-my-dashboard where the ID is 1
        - the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data - - dataPickerProps? - Pick<InteractiveQuestionProps, "entityTypes"> - Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question. - drillThroughQuestionHeight? Height<string | number> diff --git a/_site/docs/master/embedding/sdk/questions.html b/_site/docs/master/embedding/sdk/questions.html index cdc425fa8c..95e58fcf60 100644 --- a/_site/docs/master/embedding/sdk/questions.html +++ b/_site/docs/master/embedding/sdk/questions.html @@ -4812,11 +4812,6 @@

        Props

        boolean - - - withDownloads? - boolean - Enables the ability to download results in the interactive question. - @@ -4909,7 +4904,7 @@

        Props

        onSave? - (question: MetabaseQuestion, context: { dashboardTabId?: number; isNewQuestion: boolean; }) => void + (question: undefined | MetabaseQuestion, context: { isNewQuestion: boolean; }) => void A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true diff --git a/_site/docs/master/embedding/securing-embeds.html b/_site/docs/master/embedding/securing-embeds.html deleted file mode 100644 index 9146c04345..0000000000 --- a/_site/docs/master/embedding/securing-embeds.html +++ /dev/null @@ -1,5600 +0,0 @@ - - - - - - - - - - - - - - - - - - -Securing embedded Metabase | Metabase Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - -
        - - - - -
        - - - - -
        -
        - - - -
        -
        -
        - -
        - - - - - - - - - -
        - - - -
        - - -
        - -
        - -
        - - - -
        - - - master - - - - - - - - -
        - - - - - What’s new - - - - - -
        - - - - -
        -
        - - -
        - - -
        - - -
        - These are the docs for the Metabase master branch. Some features documented here may not yet be available in the latest release. - Check out the docs for the latest version, Metabase v0.55. -
        - - -
        - - -

        Securing embedded Metabase

        - - - -

        Securing embeds with authentication and authorization

        - -

        There are two basic ways to secure stuff on the internet:

        - -
          -
        1. Authentication looks at who someone is (using standards such as JWT or SAML).
        2. -
        3. Authorization looks at what someone has access to (using standards such as OAuth 2.0).
        4. -
        - -

        In this guide, we’ll talk primarily about authentication.

        - -

        Public embedding

        - -

        Public embedding doesn’t involve any authentication or authorization. A public embed displays a public link with a unique string at the end, like this:

        - -
        http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b
        -
        - -

        The string (in this example: 184f819c-2c80-4b2d-80f8-26bffaae5d8b) uniquely identifies your Metabase question or dashboard. Since public embeds don’t do any authentication or authorization, anyone with the URL can view the data.

        - - - -

        So, how could someone exploit a public embed? Say we have a dashboard that displays Accounts data:

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Account IDPlanStatus
        1BasicActive
        2BasicActive
        3BasicInactive
        4PremiumInactive
        5PremiumActive
        - -

        We want to add a “Status = Active” filter and display the dashboard’s public link in an embed:

        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Account IDPlanStatus
        1BasicActive
        2BasicActive
        5PremiumActive
        - -

        To apply and hide the “Status = Active” filter, we’ll add query parameters to the end of the public link in our embed:

        - -
        http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b?status=active#hide_parameters=status
        -
        - -

        Even though we’ve hidden the filter from the embed, someone could take the public link used in the embed, and remove the query parameter ?status=active:

        - -
        http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b
        -
        - -

        Loading the public link without the query parameter would remove the “Status = Active” filter from the data. The person would get access to the original Accounts data, including the rows with inactive accounts.

        - -

        Static embeds are authorized with JWT

        - -

        Static embedding uses a JWT authorization flow to do two things:

        - -
          -
        • Sign resources (e.g., the URLs of charts or dashboards) to ensure that only your embedding application can ask for data from your Metabase.
        • -
        • Sign parameters (e.g., dashboard filters) to prevent people from changing the filters and getting access to other data.
        • -
        - -

        Static embeds don’t have user sessions

        - -

        Static embeds don’t authenticate people’s identities on the Metabase side, so people can view a static embed without creating a Metabase account. However, without a Metabase account, Metabase won’t have a way to remember a user or their session, which means:

        - -
          -
        • Metabase permissions and data sandboxes won’t work — if you need to lock down sensitive data, you must set up locked parameters for each of your static embeds.
        • -
        • Any filter selections in a static embed will reset once the signed JWT expires.
        • -
        • All Static embed usage will show up in usage analytics under “External user”.
        • -
        - -

        Static embedding security vs. interactive embedding security

        - -

        Static embedding only guarantees authorized access to your Metabase data (you decide what is accessible).

        - -

        If you want to secure your static embeds based on someone’s identity (you decide who gets access to what), you’ll need to set up your own authentication flow and manually wire that up to locked parameters on each of your static embeds. Note that locked parameters are essentially filters, so you can only set up row-level restrictions in a static embed.

        - -

        If you want an easier way to embed different views of data for different customers (without allowing the customers to see each other’s data), learn how Interactive embedding authenticates and authorizes people in one flow.

        - -

        Static embedding with JWT authorization

        - -

        Static embedding with JWT authorization.

        - -

        This diagram illustrates how an embed gets secured by a signed JWT:

        - -
          -
        1. Visitor arrives: your frontend gets a request to display a Metabase embedding URL.
        2. -
        3. Signed request: your backend generates a Metabase embedding URL with a signed JWT. The signed JWT should encode any query parameters you’re using to filter your data.
        4. -
        5. Response: your Metabase backend returns data based on the query parameters encoded in the signed JWT.
        6. -
        7. Success: your frontend displays the embedded Metabase page with the correct data.
        8. -
        - -

        Example: securing data with locked parameters on a static embed

        - -

        In the public embedding example, we showed you (perhaps unwisely) how someone could exploit a unique public link by editing its query parameters.

        - -

        Let’s go back to our Accounts example:

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Account IDPlanStatus
        1BasicActive
        2BasicActive
        3BasicInactive
        4PremiumInactive
        5PremiumActive
        - -

        Remember, we can filter the data in a public embed by including a query parameter at the end of the embedding URL:

        - -
        http://my-metabase.com/public/dashboard/184f819c-2c80-4b2d-80f8-26bffaae5d8b?status=active
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Account IDPlanStatus
        1BasicActive
        2BasicActive
        5PremiumActive
        - -

        With static embeds, we can “lock” the filter by encoding the query parameter in a signed JWT. For example, say we set up the “Status = Active” filter as a locked parameter. The ?status=active query parameter will be encoded in the signed JWT, so it won’t be visible or editable from the static embedding URL:

        - -
        http://my-metabase.com/dashboard/your_signed_jwt
        -
        - -

        If someone tries to add an (unsigned) query parameter to the end of the static embedding URL like this:

        - -
        http://my-metabase.com/dashboard/your_signed_jwt?status=inactive
        -
        - -

        Metabase will reject this unauthorized request for data, so the inactive account rows will remain hidden from the embed.

        - -

        Example: sending user attributes to a locked parameter

        - -

        Let’s say that we want to expose the Accounts table to our customers, so that customers can look up a row based on an Account ID.

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Account IDPlanStatus
        1BasicActive
        2BasicActive
        3BasicInactive
        4PremiumInactive
        5PremiumActive
        - -

        If we want to avoid creating a Metabase login for each of our customers, we’ll need:

        - -
          -
        • An embeddable dashboard with the Accounts data.
        • -
        • A locked parameter for the Account ID filter.
        • -
        • A login flow in our embedding application (the web app where we want to embed Metabase).
        • -
        - -

        The flow might look something like this:

        - -
          -
        1. A customer logs into our web app.
        2. -
        3. Our app backend looks up the customer’s account_id based on the account email used during login.
        4. -
        5. Our app backend uses Metabase’s secret key to generate the embedding URL with a signed JWT. The signed JWT encodes the query parameters to filter the Accounts dashboard on Account ID = account_id.
        6. -
        7. Metabase returns the filtered dashboard at the static embedding URL.
        8. -
        9. Our app frontend displays the filtered dashboard in an iframe.
        10. -
        - -

        For code samples, see the static embedding reference app.

        - -

        Interactive embedding authenticates and authorizes people in one flow

        - -

        Interactive embedding integrates with SSO (JWT or SAML) to authenticate and authorize people in one flow. The auth integration makes it easy to map user attributes (such as a person’s role or department) to granular levels of data access, including:

        - - - -

        Interactive embedding with SSO

        - -

        Interactive embedding with SSO.

        - -

        This diagram shows you how a interactive embed gets secured with SSO:

        - -
          -
        1. Visitor arrives: your frontend gets a request to display all content, including a Metabase component (such as a React component).
        2. -
        3. Load embed: your frontend component loads the Metabase frontend using your embedding URL.
        4. -
        5. Check session: to display data at the embedding URL, your Metabase backend checks for a valid session (a logged-in visitor).
        6. -
        7. If there’s no valid session: -
            -
          • Redirect to SSO: your Metabase frontend redirects the visitor to your SSO login page.
          • -
          • SSO auth: your SSO flow authenticates the visitor and generates a session based on their identity. The session info should encode user attributes such as group membership and data sandboxing permissions.
          • -
          • Redirect to Metabase: your SSO flow redirects the visitor to your Metabase frontend with the session info.
          • -
          -
        8. -
        9. Request: your Metabase frontend sends the request for data to the Metabase backend, along with the session info.
        10. -
        11. Response: your Metabase backend returns data based on the user attributes encoded in the session info.
        12. -
        13. Success: your frontend component displays the embedded Metabase page with the correct data for the logged-in visitor.
        14. -
        - -

        The mechanics of step 4 will vary a bit depending on whether you use JWT or SAML for SSO.

        - -

        Example: securing data with SSO and data sandboxing

        - -

        In our static embedding example, we used locked parameters to display secure filtered views of the Accounts table.

        - -

        The nice thing about interactive embedding and SSO integration is that we don’t have to manually manage locked parameters for each embed. Instead, we can map user attributes from our identity provider (IdP) to permissions and data sandboxes in Metabase. People can get authenticated and authorized to self-serve specific subsets of data from their very first login.

        - -

        Let’s expand on our Accounts example to include a Tenant ID. The Tenant ID represents the parent org for a group of customers:

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Tenant IDAccount IDPlanStatus
        9991BasicActive
        9992BasicActive
        9993BasicInactive
        7774PremiumInactive
        7775PremiumActive
        - -

        We still want to expose the Accounts table to our customers, but with a few extra requirements:

        - -
          -
        • Individual customers can only view the data for their own Account ID.
        • -
        • Tenants can view all of their child accounts (but not the data of other tenants).
        • -
        - -

        To set up these multi-tenant permissions, we’ll need to:

        - -
          -
        1. Create an primary_id attribute in our IdP to uniquely identify all tenants and customers.
        2. -
        3. Create a user attribute in our IdP called role and set that to tenant or customer for each person who will be using Metabase.
        4. -
        5. Create two groups in Metabase: Tenants and Customers.
        6. -
        7. Synchronize group membership between Metabase and our IdP so that: -
            -
          • People with role=tenant are assigned to the Tenant group.
          • -
          • People with role=customer are assigned to the Customers group.
          • -
          -
        8. -
        9. Set up a sandboxed view of the Accounts table for each group: -
            -
          • For the Customers group, the Accounts table will be sandboxed (filtered) to Account ID = primary_id.
          • -
          • For the Tenants group,, the Accounts table will be sandboxed to Tenant ID = primary_id.
          • -
          -
        10. -
        - -

        When Tenant A logs in with SSO for the first time:

        - -
          -
        • Metabase will create an account for them.
        • -
        • Our IdP will send the role=tenant and primary_id=999 attributes to Metabase.
        • -
        • Metabase will automatically assign Tenant A to the Tenant group.
        • -
        • Tenant A will get the Tenant group’s permissions (including data sandboxes).
        • -
        • Tenant A will see a sandboxed view of the Accounts table everywhere in Metabase:
        • -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Tenant IDAccount IDPlanStatus
        9991BasicActive
        9992BasicActive
        9993BasicInactive
        - -

        When Customer 1 logs in, they’ll see a different filtered version of the Accounts table based on their role and primary_id attributes:

        - - - - - - - - - - - - - - - - - - -
        Tenant IDAccount IDPlanStatus
        A1BasicActive
        - -

        Sample apps

        - - - -

        Further reading

        - - - - -
        -
        - -

        - Read docs for other versions of Metabase. -

        - -
        -
        - -
        - -
        -
        -
        Was this helpful?
        - - -
        - -
        -

        - -
        - - - -
        -
        - -
        -
        Thanks for your feedback!
        -
        - - - - Want to improve these docs? Propose a change. - - -
        - - - -
        -
        -
        -
        - - - - - - - - - - - - - - - -
        - -
        - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/docs/master/embedding/start.html b/_site/docs/master/embedding/start.html index 0dd0499dcc..3b552b6bab 100644 --- a/_site/docs/master/embedding/start.html +++ b/_site/docs/master/embedding/start.html @@ -4734,10 +4734,6 @@

        Public embeds

        Admins can also create unsecured public links or embeds of questions and dashboards.

        -

        Securing embedded Metabase

        - -

        How to make sure the right people can see the right data in your embedded Metabase.

        -
        diff --git a/_site/docs/master/exploration-and-organization/images/DataReference.png b/_site/docs/master/exploration-and-organization/images/DataReference.png index 1b91e84ebc..9912bd8273 100644 Binary files a/_site/docs/master/exploration-and-organization/images/DataReference.png and b/_site/docs/master/exploration-and-organization/images/DataReference.png differ diff --git a/_site/docs/master/exploration-and-organization/images/append-data.png b/_site/docs/master/exploration-and-organization/images/append-data.png index a57f583ca0..df5046c6be 100644 Binary files a/_site/docs/master/exploration-and-organization/images/append-data.png and b/_site/docs/master/exploration-and-organization/images/append-data.png differ diff --git a/_site/docs/master/exploration-and-organization/images/automatic-insights.png b/_site/docs/master/exploration-and-organization/images/automatic-insights.png index 16eef54311..24cb911caa 100644 Binary files a/_site/docs/master/exploration-and-organization/images/automatic-insights.png and b/_site/docs/master/exploration-and-organization/images/automatic-insights.png differ diff --git a/_site/docs/master/exploration-and-organization/images/browse-data-x-ray.png b/_site/docs/master/exploration-and-organization/images/browse-data-x-ray.png index f6add99b5c..c1c8a8380c 100644 Binary files a/_site/docs/master/exploration-and-organization/images/browse-data-x-ray.png and b/_site/docs/master/exploration-and-organization/images/browse-data-x-ray.png differ diff --git a/_site/docs/master/exploration-and-organization/images/browse-data.png b/_site/docs/master/exploration-and-organization/images/browse-data.png index 9429442b26..47b9e402e1 100644 Binary files a/_site/docs/master/exploration-and-organization/images/browse-data.png and b/_site/docs/master/exploration-and-organization/images/browse-data.png differ diff --git a/_site/docs/master/exploration-and-organization/images/collection-detail.png b/_site/docs/master/exploration-and-organization/images/collection-detail.png index 33dc20db46..f54c9f8443 100644 Binary files a/_site/docs/master/exploration-and-organization/images/collection-detail.png and b/_site/docs/master/exploration-and-organization/images/collection-detail.png differ diff --git a/_site/docs/master/exploration-and-organization/images/comparison-operator-filters.png b/_site/docs/master/exploration-and-organization/images/comparison-operator-filters.png index 94f35c9468..e43d51fe32 100644 Binary files a/_site/docs/master/exploration-and-organization/images/comparison-operator-filters.png and b/_site/docs/master/exploration-and-organization/images/comparison-operator-filters.png differ diff --git a/_site/docs/master/exploration-and-organization/images/create-new-collection.png b/_site/docs/master/exploration-and-organization/images/create-new-collection.png index d7223ffd0e..af2443f1ce 100644 Binary files a/_site/docs/master/exploration-and-organization/images/create-new-collection.png and b/_site/docs/master/exploration-and-organization/images/create-new-collection.png differ diff --git a/_site/docs/master/exploration-and-organization/images/data-reference.png b/_site/docs/master/exploration-and-organization/images/data-reference.png index b025c62fbc..cfca7fa3b5 100644 Binary files a/_site/docs/master/exploration-and-organization/images/data-reference.png and b/_site/docs/master/exploration-and-organization/images/data-reference.png differ diff --git a/_site/docs/master/exploration-and-organization/images/detail-view.png b/_site/docs/master/exploration-and-organization/images/detail-view.png index 4887db0e22..2f5ed3f848 100644 Binary files a/_site/docs/master/exploration-and-organization/images/detail-view.png and b/_site/docs/master/exploration-and-organization/images/detail-view.png differ diff --git a/_site/docs/master/exploration-and-organization/images/edit-an-event.png b/_site/docs/master/exploration-and-organization/images/edit-an-event.png index 0e42a835c2..5ba8358f3f 100644 Binary files a/_site/docs/master/exploration-and-organization/images/edit-an-event.png and b/_site/docs/master/exploration-and-organization/images/edit-an-event.png differ diff --git a/_site/docs/master/exploration-and-organization/images/event-calendar.png b/_site/docs/master/exploration-and-organization/images/event-calendar.png index 22ed9b09ad..00659553c1 100644 Binary files a/_site/docs/master/exploration-and-organization/images/event-calendar.png and b/_site/docs/master/exploration-and-organization/images/event-calendar.png differ diff --git a/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png b/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png index 66168ce82a..ba472e3243 100644 Binary files a/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png and b/_site/docs/master/exploration-and-organization/images/event-on-a-time-series.png differ diff --git a/_site/docs/master/exploration-and-organization/images/example-event.png b/_site/docs/master/exploration-and-organization/images/example-event.png index 273aba7f06..440199cd8f 100644 Binary files a/_site/docs/master/exploration-and-organization/images/example-event.png and b/_site/docs/master/exploration-and-organization/images/example-event.png differ diff --git a/_site/docs/master/exploration-and-organization/images/move-to-trash.png b/_site/docs/master/exploration-and-organization/images/move-to-trash.png index 6c83f60030..71f39c2671 100644 Binary files a/_site/docs/master/exploration-and-organization/images/move-to-trash.png and b/_site/docs/master/exploration-and-organization/images/move-to-trash.png differ diff --git a/_site/docs/master/exploration-and-organization/images/official-collection.png b/_site/docs/master/exploration-and-organization/images/official-collection.png index 35c1c504bb..7be67e86d2 100644 Binary files a/_site/docs/master/exploration-and-organization/images/official-collection.png and b/_site/docs/master/exploration-and-organization/images/official-collection.png differ diff --git a/_site/docs/master/exploration-and-organization/images/our-analytics-page.png b/_site/docs/master/exploration-and-organization/images/our-analytics-page.png index 37fd6c1fb2..2be512d7e9 100644 Binary files a/_site/docs/master/exploration-and-organization/images/our-analytics-page.png and b/_site/docs/master/exploration-and-organization/images/our-analytics-page.png differ diff --git a/_site/docs/master/exploration-and-organization/images/pinned-items.png b/_site/docs/master/exploration-and-organization/images/pinned-items.png index 3282925a59..cb03f09dea 100644 Binary files a/_site/docs/master/exploration-and-organization/images/pinned-items.png and b/_site/docs/master/exploration-and-organization/images/pinned-items.png differ diff --git a/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png b/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png index 6c58b5e734..e6e06dfd63 100644 Binary files a/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png and b/_site/docs/master/exploration-and-organization/images/pinned-show-viz.png differ diff --git a/_site/docs/master/exploration-and-organization/images/question-checkbox.png b/_site/docs/master/exploration-and-organization/images/question-checkbox.png index 4887db0e22..ad9371b3ab 100644 Binary files a/_site/docs/master/exploration-and-organization/images/question-checkbox.png and b/_site/docs/master/exploration-and-organization/images/question-checkbox.png differ diff --git a/_site/docs/master/exploration-and-organization/images/search-results.png b/_site/docs/master/exploration-and-organization/images/search-results.png index 177b5b507a..b2efa426d2 100644 Binary files a/_site/docs/master/exploration-and-organization/images/search-results.png and b/_site/docs/master/exploration-and-organization/images/search-results.png differ diff --git a/_site/docs/master/exploration-and-organization/images/timeline-sidebar.png b/_site/docs/master/exploration-and-organization/images/timeline-sidebar.png index a9f4e9456f..cb96cd016d 100644 Binary files a/_site/docs/master/exploration-and-organization/images/timeline-sidebar.png and b/_site/docs/master/exploration-and-organization/images/timeline-sidebar.png differ diff --git a/_site/docs/master/exploration-and-organization/images/trash.png b/_site/docs/master/exploration-and-organization/images/trash.png index ae49655505..ceb7fce5c9 100644 Binary files a/_site/docs/master/exploration-and-organization/images/trash.png and b/_site/docs/master/exploration-and-organization/images/trash.png differ diff --git a/_site/docs/master/exploration-and-organization/images/verified-icon.png b/_site/docs/master/exploration-and-organization/images/verified-icon.png index 4fcbddf7a4..1b6ccf96fc 100644 Binary files a/_site/docs/master/exploration-and-organization/images/verified-icon.png and b/_site/docs/master/exploration-and-organization/images/verified-icon.png differ diff --git a/_site/docs/master/exploration-and-organization/images/verified-only.png b/_site/docs/master/exploration-and-organization/images/verified-only.png index 3116965e55..d07d696f8c 100644 Binary files a/_site/docs/master/exploration-and-organization/images/verified-only.png and b/_site/docs/master/exploration-and-organization/images/verified-only.png differ diff --git a/_site/docs/master/exploration-and-organization/images/verify-this-dashboard.png b/_site/docs/master/exploration-and-organization/images/verify-this-dashboard.png index f24e572c1f..a1887a5df3 100644 Binary files a/_site/docs/master/exploration-and-organization/images/verify-this-dashboard.png and b/_site/docs/master/exploration-and-organization/images/verify-this-dashboard.png differ diff --git a/_site/docs/master/exploration-and-organization/images/x-ray-example.png b/_site/docs/master/exploration-and-organization/images/x-ray-example.png index d62507ba75..393680d0d7 100644 Binary files a/_site/docs/master/exploration-and-organization/images/x-ray-example.png and b/_site/docs/master/exploration-and-organization/images/x-ray-example.png differ diff --git a/_site/docs/master/images/metabase-product-screenshot.png b/_site/docs/master/images/metabase-product-screenshot.png index cf9a18f67a..9bcea87e22 100644 Binary files a/_site/docs/master/images/metabase-product-screenshot.png and b/_site/docs/master/images/metabase-product-screenshot.png differ diff --git a/_site/docs/master/index.html b/_site/docs/master/index.html index cf62d0c71a..9cb21efb80 100644 --- a/_site/docs/master/index.html +++ b/_site/docs/master/index.html @@ -5010,7 +5010,6 @@

        Embedding

      • Interactive embedding quick start
      • Static embedding
      • Parameters for static embeds
      • -
      • Securing embedded Metabase
      • Configuration

        @@ -5120,9 +5119,8 @@

        Data and Bu

        Metabase Experts

        -

        If you’d like more technical resources to set up your data stack with Metabase, connect with a Metabase Expert.

        - - +

        If you’d like more technical resources to set up your data stack with Metabase, connect with a Metabase Expert. +

        diff --git a/_site/docs/master/installation-and-operation/images/AZDatabase.png b/_site/docs/master/installation-and-operation/images/AZDatabase.png index 416c717076..b2383ac3f5 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZDatabase.png and b/_site/docs/master/installation-and-operation/images/AZDatabase.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZMarketPlaceVnet.png b/_site/docs/master/installation-and-operation/images/AZMarketPlaceVnet.png index fc28ffd9ba..9fe107d431 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZMarketPlaceVnet.png and b/_site/docs/master/installation-and-operation/images/AZMarketPlaceVnet.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZMarketplaceWebApp.png b/_site/docs/master/installation-and-operation/images/AZMarketplaceWebApp.png index 1a768c6dd8..ead574eec5 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZMarketplaceWebApp.png and b/_site/docs/master/installation-and-operation/images/AZMarketplaceWebApp.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZNetworks.png b/_site/docs/master/installation-and-operation/images/AZNetworks.png index 6aaf102c1e..00b9cc802c 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZNetworks.png and b/_site/docs/master/installation-and-operation/images/AZNetworks.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZPostgreSQLMain.png b/_site/docs/master/installation-and-operation/images/AZPostgreSQLMain.png index 5dd879ab18..fecc71c273 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZPostgreSQLMain.png and b/_site/docs/master/installation-and-operation/images/AZPostgreSQLMain.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZPrivateLink.png b/_site/docs/master/installation-and-operation/images/AZPrivateLink.png index c520b55bdd..0bc61a67fa 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZPrivateLink.png and b/_site/docs/master/installation-and-operation/images/AZPrivateLink.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZResource_group_Add.png b/_site/docs/master/installation-and-operation/images/AZResource_group_Add.png index b8126d293c..eaff1c643b 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZResource_group_Add.png and b/_site/docs/master/installation-and-operation/images/AZResource_group_Add.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZVNETPublicSubnet.png b/_site/docs/master/installation-and-operation/images/AZVNETPublicSubnet.png index bfea01f4c9..44894a4dd6 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZVNETPublicSubnet.png and b/_site/docs/master/installation-and-operation/images/AZVNETPublicSubnet.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZVNETintegration.png b/_site/docs/master/installation-and-operation/images/AZVNETintegration.png index f69b404401..6479865c85 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZVNETintegration.png and b/_site/docs/master/installation-and-operation/images/AZVNETintegration.png differ diff --git a/_site/docs/master/installation-and-operation/images/AZVnet.png b/_site/docs/master/installation-and-operation/images/AZVnet.png index 01a3af1330..6a9e971823 100644 Binary files a/_site/docs/master/installation-and-operation/images/AZVnet.png and b/_site/docs/master/installation-and-operation/images/AZVnet.png differ diff --git a/_site/docs/master/installation-and-operation/images/AddRemoteHost.png b/_site/docs/master/installation-and-operation/images/AddRemoteHost.png index a3bdb2b9c8..3d03da05e8 100644 Binary files a/_site/docs/master/installation-and-operation/images/AddRemoteHost.png and b/_site/docs/master/installation-and-operation/images/AddRemoteHost.png differ diff --git a/_site/docs/master/installation-and-operation/images/ClickAddJMXHost.png b/_site/docs/master/installation-and-operation/images/ClickAddJMXHost.png index 9403e7a805..7c27863866 100644 Binary files a/_site/docs/master/installation-and-operation/images/ClickAddJMXHost.png and b/_site/docs/master/installation-and-operation/images/ClickAddJMXHost.png differ diff --git a/_site/docs/master/installation-and-operation/images/EBDatabaseEndpoint.png b/_site/docs/master/installation-and-operation/images/EBDatabaseEndpoint.png index 87307a9704..231a2313d5 100644 Binary files a/_site/docs/master/installation-and-operation/images/EBDatabaseEndpoint.png and b/_site/docs/master/installation-and-operation/images/EBDatabaseEndpoint.png differ diff --git a/_site/docs/master/installation-and-operation/images/EBTerminateEnvironment.png b/_site/docs/master/installation-and-operation/images/EBTerminateEnvironment.png index 6a49e9a6dc..5d6655afef 100644 Binary files a/_site/docs/master/installation-and-operation/images/EBTerminateEnvironment.png and b/_site/docs/master/installation-and-operation/images/EBTerminateEnvironment.png differ diff --git a/_site/docs/master/installation-and-operation/images/EnterJMXPort.png b/_site/docs/master/installation-and-operation/images/EnterJMXPort.png index 6861e85809..7fbf02add2 100644 Binary files a/_site/docs/master/installation-and-operation/images/EnterJMXPort.png and b/_site/docs/master/installation-and-operation/images/EnterJMXPort.png differ diff --git a/_site/docs/master/installation-and-operation/images/HeapDump.png b/_site/docs/master/installation-and-operation/images/HeapDump.png index d93ee778cb..0fa623ed6f 100644 Binary files a/_site/docs/master/installation-and-operation/images/HeapDump.png and b/_site/docs/master/installation-and-operation/images/HeapDump.png differ diff --git a/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png b/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png index d71e3e03d6..f2bee0d072 100644 Binary files a/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png and b/_site/docs/master/installation-and-operation/images/LocalProcessVisualVM.png differ diff --git a/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png b/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png index 6a49e9a6dc..94faf3ba67 100644 Binary files a/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png and b/_site/docs/master/installation-and-operation/images/Metabase-AWS-SI.png differ diff --git a/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png b/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png index fa97c0e30a..a35bccaa8b 100644 Binary files a/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png and b/_site/docs/master/installation-and-operation/images/OpenRemoteInstance.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSConnectionData.png b/_site/docs/master/installation-and-operation/images/RDSConnectionData.png index 8812b4e945..9c94871b3c 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSConnectionData.png and b/_site/docs/master/installation-and-operation/images/RDSConnectionData.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSDBIdentifier.png b/_site/docs/master/installation-and-operation/images/RDSDBIdentifier.png index 410592dd81..bf9886e6fa 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSDBIdentifier.png and b/_site/docs/master/installation-and-operation/images/RDSDBIdentifier.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSEditInboundRule.png b/_site/docs/master/installation-and-operation/images/RDSEditInboundRule.png index 839d8d1fc9..e53f86468b 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSEditInboundRule.png and b/_site/docs/master/installation-and-operation/images/RDSEditInboundRule.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png b/_site/docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png index 9506c91cd2..a4956deaae 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png and b/_site/docs/master/installation-and-operation/images/RDSEditInboundRuleSG.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSInboundRule.png b/_site/docs/master/installation-and-operation/images/RDSInboundRule.png index 2bd6a50036..3b0516c438 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSInboundRule.png and b/_site/docs/master/installation-and-operation/images/RDSInboundRule.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSInitialDatabase.png b/_site/docs/master/installation-and-operation/images/RDSInitialDatabase.png index a8220d0f99..98384786d3 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSInitialDatabase.png and b/_site/docs/master/installation-and-operation/images/RDSInitialDatabase.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSInstanceSize.png b/_site/docs/master/installation-and-operation/images/RDSInstanceSize.png index 40bb7bd491..d924d2355e 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSInstanceSize.png and b/_site/docs/master/installation-and-operation/images/RDSInstanceSize.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSMultiAZ.png b/_site/docs/master/installation-and-operation/images/RDSMultiAZ.png index 2b252dff15..88f5775a90 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSMultiAZ.png and b/_site/docs/master/installation-and-operation/images/RDSMultiAZ.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSPostgresSettings.png b/_site/docs/master/installation-and-operation/images/RDSPostgresSettings.png index c520b55bdd..35b346e1ea 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSPostgresSettings.png and b/_site/docs/master/installation-and-operation/images/RDSPostgresSettings.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSSecurityGroupRules.png b/_site/docs/master/installation-and-operation/images/RDSSecurityGroupRules.png index 976ab6b0df..55ecc7f1d3 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSSecurityGroupRules.png and b/_site/docs/master/installation-and-operation/images/RDSSecurityGroupRules.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSSnapshotsMenu.png b/_site/docs/master/installation-and-operation/images/RDSSnapshotsMenu.png index e50d51b46a..262dc05e21 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSSnapshotsMenu.png and b/_site/docs/master/installation-and-operation/images/RDSSnapshotsMenu.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSTakeSnapshot.png b/_site/docs/master/installation-and-operation/images/RDSTakeSnapshot.png index d16aabea01..03e61b3437 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSTakeSnapshot.png and b/_site/docs/master/installation-and-operation/images/RDSTakeSnapshot.png differ diff --git a/_site/docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png b/_site/docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png index 39ecb30b5e..3326f4f576 100644 Binary files a/_site/docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png and b/_site/docs/master/installation-and-operation/images/RDSVPCSecurityGroup.png differ diff --git a/_site/docs/master/installation-and-operation/images/SetRemoteHostName.png b/_site/docs/master/installation-and-operation/images/SetRemoteHostName.png index bb2af91d51..82b43dacb2 100644 Binary files a/_site/docs/master/installation-and-operation/images/SetRemoteHostName.png and b/_site/docs/master/installation-and-operation/images/SetRemoteHostName.png differ diff --git a/_site/docs/master/installation-and-operation/images/ThreadDump.png b/_site/docs/master/installation-and-operation/images/ThreadDump.png index fa97c0e30a..f88a97ac63 100644 Binary files a/_site/docs/master/installation-and-operation/images/ThreadDump.png and b/_site/docs/master/installation-and-operation/images/ThreadDump.png differ diff --git a/_site/docs/master/installation-and-operation/images/create-development-instance.png b/_site/docs/master/installation-and-operation/images/create-development-instance.png index 430b88877a..43fa50c0d5 100644 Binary files a/_site/docs/master/installation-and-operation/images/create-development-instance.png and b/_site/docs/master/installation-and-operation/images/create-development-instance.png differ diff --git a/_site/docs/master/installation-and-operation/images/prometheus.png b/_site/docs/master/installation-and-operation/images/prometheus.png index 80e7779703..6c511afd25 100644 Binary files a/_site/docs/master/installation-and-operation/images/prometheus.png and b/_site/docs/master/installation-and-operation/images/prometheus.png differ diff --git a/_site/docs/master/installation-and-operation/images/watermark-banner.png b/_site/docs/master/installation-and-operation/images/watermark-banner.png index 4f5ff39e4d..a73e7e28fe 100644 Binary files a/_site/docs/master/installation-and-operation/images/watermark-banner.png and b/_site/docs/master/installation-and-operation/images/watermark-banner.png differ diff --git a/_site/docs/master/people-and-groups/authenticating-with-saml.html b/_site/docs/master/people-and-groups/authenticating-with-saml.html index f4e47a5684..ef23c743af 100644 --- a/_site/docs/master/people-and-groups/authenticating-with-saml.html +++ b/_site/docs/master/people-and-groups/authenticating-with-saml.html @@ -4992,7 +4992,7 @@

        Disabling password logins

        New account notification emails

        -

        When people log in to Metabase for the first time via SSO, Metabase will automatically create an account for them, which will trigger an email notification to Metabase administrators. If you don’t want these notifications to be sent, go to Admin settings > Authentication > User provisioning, and toggle off “Notify admins of new users provisioned from SSO”

        +

        When people log in to Metabase for the first time via SSO, Metabase will automatically create an account for them, which will trigger an email notification to Metabase administrators. If you don’t want these notifications to be sent, you can toggle them off at the bottom of the Authentication page.

        Example code using SAML

        diff --git a/_site/docs/master/people-and-groups/images/AdminBar.png b/_site/docs/master/people-and-groups/images/AdminBar.png index a48ae1a137..6a0c17ee84 100644 Binary files a/_site/docs/master/people-and-groups/images/AdminBar.png and b/_site/docs/master/people-and-groups/images/AdminBar.png differ diff --git a/_site/docs/master/people-and-groups/images/JWT-auth-form.png b/_site/docs/master/people-and-groups/images/JWT-auth-form.png index ce5b0e7415..8e65862250 100644 Binary files a/_site/docs/master/people-and-groups/images/JWT-auth-form.png and b/_site/docs/master/people-and-groups/images/JWT-auth-form.png differ diff --git a/_site/docs/master/people-and-groups/images/RemoveUser.png b/_site/docs/master/people-and-groups/images/RemoveUser.png index 98a4a6fc63..c7302051e1 100644 Binary files a/_site/docs/master/people-and-groups/images/RemoveUser.png and b/_site/docs/master/people-and-groups/images/RemoveUser.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0callbackurl.png b/_site/docs/master/people-and-groups/images/auth0callbackurl.png index dda21e391d..a62b7e5acf 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0callbackurl.png and b/_site/docs/master/people-and-groups/images/auth0callbackurl.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0createapp.png b/_site/docs/master/people-and-groups/images/auth0createapp.png index 6fbdab7fcf..726242de94 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0createapp.png and b/_site/docs/master/people-and-groups/images/auth0createapp.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0regularapp.png b/_site/docs/master/people-and-groups/images/auth0regularapp.png index 6fbdab7fcf..2e58ec9012 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0regularapp.png and b/_site/docs/master/people-and-groups/images/auth0regularapp.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0saml2addon.png b/_site/docs/master/people-and-groups/images/auth0saml2addon.png index 8926f599ba..7a39bc261a 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0saml2addon.png and b/_site/docs/master/people-and-groups/images/auth0saml2addon.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0samlmappings.png b/_site/docs/master/people-and-groups/images/auth0samlmappings.png index 6fbdab7fcf..2d58332453 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0samlmappings.png and b/_site/docs/master/people-and-groups/images/auth0samlmappings.png differ diff --git a/_site/docs/master/people-and-groups/images/auth0samlusage.png b/_site/docs/master/people-and-groups/images/auth0samlusage.png index 6fbdab7fcf..c9c995ebae 100644 Binary files a/_site/docs/master/people-and-groups/images/auth0samlusage.png and b/_site/docs/master/people-and-groups/images/auth0samlusage.png differ diff --git a/_site/docs/master/people-and-groups/images/groups.png b/_site/docs/master/people-and-groups/images/groups.png index 8926f599ba..e3411797a3 100644 Binary files a/_site/docs/master/people-and-groups/images/groups.png and b/_site/docs/master/people-and-groups/images/groups.png differ diff --git a/_site/docs/master/people-and-groups/images/jwt-groups.png b/_site/docs/master/people-and-groups/images/jwt-groups.png index bc18ea90eb..dc59ab8e83 100644 Binary files a/_site/docs/master/people-and-groups/images/jwt-groups.png and b/_site/docs/master/people-and-groups/images/jwt-groups.png differ diff --git a/_site/docs/master/people-and-groups/images/ldap-attributes.png b/_site/docs/master/people-and-groups/images/ldap-attributes.png index bb8d2fb2f2..5577c2ee6f 100644 Binary files a/_site/docs/master/people-and-groups/images/ldap-attributes.png and b/_site/docs/master/people-and-groups/images/ldap-attributes.png differ diff --git a/_site/docs/master/people-and-groups/images/ldap-group-mapping.png b/_site/docs/master/people-and-groups/images/ldap-group-mapping.png index ce5b0e7415..5ff3a7e140 100644 Binary files a/_site/docs/master/people-and-groups/images/ldap-group-mapping.png and b/_site/docs/master/people-and-groups/images/ldap-group-mapping.png differ diff --git a/_site/docs/master/people-and-groups/images/okta-adding-groups.png b/_site/docs/master/people-and-groups/images/okta-adding-groups.png index 3e0613a2bb..114f5d09b7 100644 Binary files a/_site/docs/master/people-and-groups/images/okta-adding-groups.png and b/_site/docs/master/people-and-groups/images/okta-adding-groups.png differ diff --git a/_site/docs/master/people-and-groups/images/okta-group-attribute.png b/_site/docs/master/people-and-groups/images/okta-group-attribute.png index a48ae1a137..0b0cc32cbe 100644 Binary files a/_site/docs/master/people-and-groups/images/okta-group-attribute.png and b/_site/docs/master/people-and-groups/images/okta-group-attribute.png differ diff --git a/_site/docs/master/people-and-groups/images/okta-new-attribute-custom.png b/_site/docs/master/people-and-groups/images/okta-new-attribute-custom.png index cda55015c1..1918b54169 100644 Binary files a/_site/docs/master/people-and-groups/images/okta-new-attribute-custom.png and b/_site/docs/master/people-and-groups/images/okta-new-attribute-custom.png differ diff --git a/_site/docs/master/people-and-groups/images/okta-new-attribute.png b/_site/docs/master/people-and-groups/images/okta-new-attribute.png index 43fcfb0c67..559fa50f30 100644 Binary files a/_site/docs/master/people-and-groups/images/okta-new-attribute.png and b/_site/docs/master/people-and-groups/images/okta-new-attribute.png differ diff --git a/_site/docs/master/people-and-groups/images/password-disable.png b/_site/docs/master/people-and-groups/images/password-disable.png index 2fad57899a..b9c3a522bb 100644 Binary files a/_site/docs/master/people-and-groups/images/password-disable.png and b/_site/docs/master/people-and-groups/images/password-disable.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-azure-ad-create.png b/_site/docs/master/people-and-groups/images/saml-azure-ad-create.png index e8ae330628..425e371a9f 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-azure-ad-create.png and b/_site/docs/master/people-and-groups/images/saml-azure-ad-create.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png b/_site/docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png index edba66aced..07f8e0c479 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png and b/_site/docs/master/people-and-groups/images/saml-azure-ad-enterprise-app.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-azure-app-saml.png b/_site/docs/master/people-and-groups/images/saml-azure-app-saml.png index 77915eb6ea..64f49beb03 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-azure-app-saml.png and b/_site/docs/master/people-and-groups/images/saml-azure-app-saml.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-azure-step-1.png b/_site/docs/master/people-and-groups/images/saml-azure-step-1.png index e8ae330628..038d09f91b 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-azure-step-1.png and b/_site/docs/master/people-and-groups/images/saml-azure-step-1.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-form.png b/_site/docs/master/people-and-groups/images/saml-form.png index fc1a68c633..965cfce64a 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-form.png and b/_site/docs/master/people-and-groups/images/saml-form.png differ diff --git a/_site/docs/master/people-and-groups/images/saml-okta-groups.png b/_site/docs/master/people-and-groups/images/saml-okta-groups.png index 98a4a6fc63..6a7c781eb9 100644 Binary files a/_site/docs/master/people-and-groups/images/saml-okta-groups.png and b/_site/docs/master/people-and-groups/images/saml-okta-groups.png differ diff --git a/_site/docs/master/people-and-groups/images/user-provisioning.png b/_site/docs/master/people-and-groups/images/user-provisioning.png index 7b32e3fb26..23e5497cbf 100644 Binary files a/_site/docs/master/people-and-groups/images/user-provisioning.png and b/_site/docs/master/people-and-groups/images/user-provisioning.png differ diff --git a/_site/docs/master/people-and-groups/user-provisioning.html b/_site/docs/master/people-and-groups/user-provisioning.html index c993450b47..9d60c40f36 100644 --- a/_site/docs/master/people-and-groups/user-provisioning.html +++ b/_site/docs/master/people-and-groups/user-provisioning.html @@ -4772,6 +4772,10 @@

        SCIM with Microsoft Entra ID

        With Microsoft Entra ID, Metabase only supports user provisioning (groups aren’t created or populated).

        +

        Notify admins of new users provisioned from SSO

        + +

        If you’re not using SCIM to provision user accounts, you can optionally have Metabase send an email to admins whenever someone signs in to Metabase via SSO for the first time (which creates a Metabase account). This setting doesn’t require you to set up SCIM.

        +

        Further reading

        diff --git a/_site/docs/master/permissions/images/admin-panel-collections.png b/_site/docs/master/permissions/images/admin-panel-collections.png index cc2c707278..87838610f0 100644 Binary files a/_site/docs/master/permissions/images/admin-panel-collections.png and b/_site/docs/master/permissions/images/admin-panel-collections.png differ diff --git a/_site/docs/master/permissions/images/advanced-example-1-filtering-question.png b/_site/docs/master/permissions/images/advanced-example-1-filtering-question.png index c95f02b4aa..16789b02bf 100644 Binary files a/_site/docs/master/permissions/images/advanced-example-1-filtering-question.png and b/_site/docs/master/permissions/images/advanced-example-1-filtering-question.png differ diff --git a/_site/docs/master/permissions/images/advanced-example-1-people-table.png b/_site/docs/master/permissions/images/advanced-example-1-people-table.png index dbdf6faefb..60dfaf9687 100644 Binary files a/_site/docs/master/permissions/images/advanced-example-1-people-table.png and b/_site/docs/master/permissions/images/advanced-example-1-people-table.png differ diff --git a/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png b/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png index f0997404d5..efc22e7a78 100644 Binary files a/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png and b/_site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png differ diff --git a/_site/docs/master/permissions/images/advanced-example-2-filtering-question.png b/_site/docs/master/permissions/images/advanced-example-2-filtering-question.png index c9c10c5129..2b239a1d71 100644 Binary files a/_site/docs/master/permissions/images/advanced-example-2-filtering-question.png and b/_site/docs/master/permissions/images/advanced-example-2-filtering-question.png differ diff --git a/_site/docs/master/permissions/images/advanced-example-2-results.png b/_site/docs/master/permissions/images/advanced-example-2-results.png index cc2c707278..e9a7002168 100644 Binary files a/_site/docs/master/permissions/images/advanced-example-2-results.png and b/_site/docs/master/permissions/images/advanced-example-2-results.png differ diff --git a/_site/docs/master/permissions/images/advanced-example-2-sandboxing-options.png b/_site/docs/master/permissions/images/advanced-example-2-sandboxing-options.png index b060334122..2982560a18 100644 Binary files a/_site/docs/master/permissions/images/advanced-example-2-sandboxing-options.png and b/_site/docs/master/permissions/images/advanced-example-2-sandboxing-options.png differ diff --git a/_site/docs/master/permissions/images/change-permissions.png b/_site/docs/master/permissions/images/change-permissions.png index 939953ea03..32979b3f5f 100644 Binary files a/_site/docs/master/permissions/images/change-permissions.png and b/_site/docs/master/permissions/images/change-permissions.png differ diff --git a/_site/docs/master/permissions/images/collection-detail.png b/_site/docs/master/permissions/images/collection-detail.png index cca944d803..bbcda41a58 100644 Binary files a/_site/docs/master/permissions/images/collection-detail.png and b/_site/docs/master/permissions/images/collection-detail.png differ diff --git a/_site/docs/master/permissions/images/collection-permissions.png b/_site/docs/master/permissions/images/collection-permissions.png index 9e2878738f..b8b8f2649b 100644 Binary files a/_site/docs/master/permissions/images/collection-permissions.png and b/_site/docs/master/permissions/images/collection-permissions.png differ diff --git a/_site/docs/master/permissions/images/create-new-folder-modal.png b/_site/docs/master/permissions/images/create-new-folder-modal.png index 5fb459752f..3b90cd19d9 100644 Binary files a/_site/docs/master/permissions/images/create-new-folder-modal.png and b/_site/docs/master/permissions/images/create-new-folder-modal.png differ diff --git a/_site/docs/master/permissions/images/dashboard-no-permissions.png b/_site/docs/master/permissions/images/dashboard-no-permissions.png index c9c10c5129..26a8b317fe 100644 Binary files a/_site/docs/master/permissions/images/dashboard-no-permissions.png and b/_site/docs/master/permissions/images/dashboard-no-permissions.png differ diff --git a/_site/docs/master/permissions/images/database-routing.png b/_site/docs/master/permissions/images/database-routing.png index 341c8e191c..cc35192bbe 100644 Binary files a/_site/docs/master/permissions/images/database-routing.png and b/_site/docs/master/permissions/images/database-routing.png differ diff --git a/_site/docs/master/permissions/images/edit-user-details.png b/_site/docs/master/permissions/images/edit-user-details.png index 1f1a0d0097..b58b554572 100644 Binary files a/_site/docs/master/permissions/images/edit-user-details.png and b/_site/docs/master/permissions/images/edit-user-details.png differ diff --git a/_site/docs/master/permissions/images/enterprise-add-snippet.png b/_site/docs/master/permissions/images/enterprise-add-snippet.png index c8e0c11c68..77a9c87329 100644 Binary files a/_site/docs/master/permissions/images/enterprise-add-snippet.png and b/_site/docs/master/permissions/images/enterprise-add-snippet.png differ diff --git a/_site/docs/master/permissions/images/grant-sandboxed-access.png b/_site/docs/master/permissions/images/grant-sandboxed-access.png index f0997404d5..fba6709e60 100644 Binary files a/_site/docs/master/permissions/images/grant-sandboxed-access.png and b/_site/docs/master/permissions/images/grant-sandboxed-access.png differ diff --git a/_site/docs/master/permissions/images/pinned-items.png b/_site/docs/master/permissions/images/pinned-items.png index 76c2b7c0aa..efd9c4500f 100644 Binary files a/_site/docs/master/permissions/images/pinned-items.png and b/_site/docs/master/permissions/images/pinned-items.png differ diff --git a/_site/docs/master/permissions/images/select-impersonated.png b/_site/docs/master/permissions/images/select-impersonated.png deleted file mode 100644 index db48b29a27..0000000000 Binary files a/_site/docs/master/permissions/images/select-impersonated.png and /dev/null differ diff --git a/_site/docs/master/permissions/images/select-user-attribute.png b/_site/docs/master/permissions/images/select-user-attribute.png index 5fb459752f..858eebfbae 100644 Binary files a/_site/docs/master/permissions/images/select-user-attribute.png and b/_site/docs/master/permissions/images/select-user-attribute.png differ diff --git a/_site/docs/master/permissions/images/snippet-folder.png b/_site/docs/master/permissions/images/snippet-folder.png index 00af3c8c29..d8dc63c856 100644 Binary files a/_site/docs/master/permissions/images/snippet-folder.png and b/_site/docs/master/permissions/images/snippet-folder.png differ diff --git a/_site/docs/master/permissions/images/user-attribute-impersonation.png b/_site/docs/master/permissions/images/user-attribute-impersonation.png deleted file mode 100644 index 24031d7e6c..0000000000 Binary files a/_site/docs/master/permissions/images/user-attribute-impersonation.png and /dev/null differ diff --git a/_site/docs/master/permissions/impersonation.html b/_site/docs/master/permissions/impersonation.html index 75ceccf446..7f66aeaa25 100644 --- a/_site/docs/master/permissions/impersonation.html +++ b/_site/docs/master/permissions/impersonation.html @@ -4728,159 +4728,62 @@

        Impersonation permissions

        Impersonation access allows admins to “outsource” View data permissions to roles in your database. Admins can associate user attributes with database-defined roles and their privileges. If someone is in a group with their View data permission set to Impersonation, the person will be able to view and query data based on the privileges granted to the role specified by their user attribute.

        -

        Impersonation vs sandboxing

        - -

        Impersonation sets permissions for questions written in both the SQL editor and the query builder

        - -

        Impersonation operates at the database level. In a database engine, setting the role before the query runs can alter the results of the query, as the role defines the permissions that your database should use when it executes the statements.

        - -

        Sandboxing only sets permissions for query builder questions

        - -

        Sandboxing operates at the Metabase level. Since Metabase can’t parse SQL queries to find out what data people are allowed to view, sandboxing only applies to questions composed in the query builder (where Metabase can interpret the queries).

        - -

        Example use case for impersonation

        - -

        Let’s say we have a People table that includes rows of accounts from all 50 states of the United States. Let’s say you want your Vermont sales team to:

        - -
          -
        • Be able to ask questions using both the query builder and the native SQL editor.
        • -
        • Only be able to view customer accounts in the People table who live in Vermont.
        • -
        - -

        First, you’ll set up permissions in your database by creating a role with a policy. Then in Metabase, you’ll set data access to that database to Impersonation, so when people run queries on that database, Metabase will use that role to limit what data they can see.

        - -

        Set up connection impersonation

        - -

        For impersonation access to work, you’ll first need to set up roles in your database for Metabase to impersonate, then configure Metabase to impersonate those roles when people view or query data.

        - -

        Set up Metabase database connection for impersonation

        - -

        Impersonation uses database roles to run queries on your database, but there still needs to be a default role that that will be used to run operations like sync, scans, and fingerprinting. So the user account that Metabase uses to connect to your database should have access to everything in that database that any Metabase group may need access to, as that database user account is what Metabase uses to sync table information.

        - -

        You can then create roles in the database that have more restrictive access to the database (like row-level or table-level security). When the role is passed to the database using impersonation, the engine will return a subset of the data, or restrict the query altogether.

        +

        Setting up connection impersonation

        -

        For Redshift databases, the user account Metabase uses to connect to your Redshift database must be a superuser, as Metabase will need to be able to run the SET SESSION AUTHORIZATION command, which can only be run by a database superuser.

        +

        **For impersonation to work for Redshift databases, the user account Metabase uses to connect to your Redshift database must be a superuser, as Metabase will need to be able to run the SET SESSION AUTHORIZATION command, which can only be run by a database superuser.

        -

        In your database, set up roles

        +

        For impersonation access to work, you’ll first need to set up roles in your database for Metabase to impersonate, then configure Metabase to impersonate those roles when people view or query data.

        -

        In your database (not in Metabase):

        +

        In your database, set up roles

          -
        1. Create a new database role (in Redshift, this would be a new user).
        2. -
        3. Grant that role privileges that you’d like impersonated users to have..
        4. +
        5. Create a new role (in Redshift, this would be a new user).
        6. +
        7. Grant that role privileges.

        For exactly how to create a new role in your database and grant that role privileges, you’ll need to consult your database’s documentation. We also have some docs on users, roles, and privileges that can help you get started.

        -

        For example, if you’re using PostgreSQL, the SQL below will create a role called vermont_sales_team and only allow that role to select rows in the people table where the value in the state column is VT (the abbreviation for Vermont):

        - -
        CREATE ROLE vermont_sales_team;
        -
        -GRANT
        -SELECT ON ALL TABLES IN SCHEMA PUBLIC TO vermont_sales_team;
        -
        -
        -CREATE POLICY vermont ON people
        -FOR
        -SELECT TO vermont_sales_team USING (state = 'VT');
        -
        -
        -ALTER TABLE people ENABLE ROW LEVEL SECURITY;
        -
        - -

        Set up a Metabase group

        - -

        Permissions in Metabase, including impersonation, are managed by groups, so you’ll need to:

        - -
          -
        1. Create a new group (or select an existing one).
        2. -
        3. Add people to the group.
        4. -
        - -

        You might want to create a test user and add them to the group to verify later that impersonation is working correctly.

        - -

        Assign a user attribute to people in the group

        - -

        To associate people in the group with a role that you created in your database, you’ll use a user attribute.

        - -

        Assign a user attribute to people in your group:

        - -
          -
        • The key of the attribute can be anything.
        • -
        • The value of the attribute must match the desired database role for every person.
        • -
        - -

        Setting a user attribute for impersonation

        - -

        For example, if you created a role named vermont_sales_team in your database with access to a subset of data relevant to the Vermont sales team (like in the example above), you could add a user attribute called db_role (or whatever you want to call the attribute) and assign the value vermont_sales_team to the person’s db_role attribute.

        - -

        Some databases enforce case sensitivity, so you might want to make sure the attribute’s value and the database’s role match exactly.

        - -

        People in one group can have different attribute values, but must have the same attribute key. See People in a group with impersonation access to data do not necessarily share the same privileges.

        - -

        Set up impersonation

        +

        In your Metabase, set up impersonation and specify a user attribute

        1. -

          In Metabase, hit Cmd/Ctrl + K to bring up the command palette and search for Permissions, or go directly to Admin settings > Permissions > Data.

          +

          Create a new group, or select an existing group.

        2. -

          Select the group that you want to to associate with the database role you created.

          +

          Assign a user attribute to people in that group. You’ll use this user attribute to associate people in that group with a role that you created in your database. For example, if you created a role named sales in your database with access to a subset of tables relevant to the sales team, you would add a user attribute called db_role (or whatever you want to call the attribute) and assign the value sales to the person’s db_role. The value of the attribute (sales in this case) should match the name of the role in your database. Only some databases enforce case sensitivity, so you might want to make sure the attribute’s value and the database’s role match exactly.

        3. -

          Select the database to configure access to.

          +

          Apply the impersonation access to that group.. Hit Cmd/Ctrl + K to bring up the command palette. Search for Permissions. Or go to Admin settings > Permissions > Data.

        4. -

          Under View data setting for that database, select Impersonation. This option will only be visible if you already created a user attribute.

          - -

          Select impersonated permissions

          - -

          If your All Users group has more permissive access to this database (for example, “Can view”), you will see a warning, because Metabase gives people the most permissive access to data across all of their groups. You’ll need to block database access for the All Users group before setting up impersonation.

          +

          Select the database you want to set permissions on.

        5. -

          From the user attribute dropdown, select the user attribute that you added that maps to the role you want the group to use when querying the database.

          +

          Find the group that you want to associate with the database role you created. Under View data setting for that group, select Impersonation.

          +
        6. +
        7. +

          From the dropdown, select the user attribute that you added that maps to the role you want the group to use when querying the database.

        8. Save your changes.

        -

        Remember to also set up “Create queries” permissions for your group and database. For example, if you’d like people to be able to write SQL while using impersonated database roles, you’ll need to set “Create queries” permissions to “Query builder and native”.

        - -

        Verify that impersonated permissions are working

        - -

        Admins will not be able to verify that impersonation is are working from their own account, so you should create a test user, add them to the group and set up their user attributes.

        - -

        To verify that the impersonated permissions are working:

        - -
          -
        • If the test user has “Create queries” permissions set to “Create queries and native”, create a SQL question and verify that the test user can only see the right data.
        • -
        - -

        For example, for the vermont_sales_team role from the example above, you can run:

        - -
        SELECT * FROM people;
        -
        - -

        to verify that the test user only sees data from Vermont.

        - -
          -
        • If the test user has “Create queries” permissions set to “Query builder only”, go to Browse data in the left sidebar and verify that the user can only see the tables they have access to, and only the data in those tables that
        • -
        -

        People in a group with impersonation access to data do not necessarily share the same privileges

        Metabase will use whatever role you specify in the user attribute for each person. E.g., if you select the db_role attribute for impersonation, one person’s db_role could be sales, another person’s could be engineering, or whatever other value that maps to a valid role in your database.

        Use impersonation to set up row-level SQL access

        -

        You can use impersonation to give people access to the SQL editor, while restricting their access to data based on a specific database role. And not just table-level access, but row-level access—or however you define access for that role in your database. Effectively, you can use impersonation to set up data sandbox-like access to your data, while letting people use the SQL editor to query that data. The difference is that, instead of setting up a data sandbox in Metabase, you need to set up that row-level security via the privileges granted to a role in your database.

        +

        You can use impersonation to give people access to the native/SQL editor, while restricting their access to data based on a specific database role. And not just table-level access, but row-level access—or however you define access for that role in your database. Effectively, you can use impersonation to set up data sandbox-like access to your data, while letting people use the SQL editor to query that data. The difference is that, instead of setting up a data sandbox in Metabase, you need to set up that row-level security via the privileges granted to a role in your database.

        If instead you want to give a group SQL access to some, but not all, of the schemas or tables in that database, you can create an additional role in your database that only includes a subset of those tables—or even specific row-level access—and then use Metabase’s impersonation feature to associate a user attribute with that role. Essentially what Metabase will do is take the user attribute and pass that attribute as a string into a SET ROLE or USE ROLE command for the database before Metabase executes the query.

        -

        Connection impersonation doesn’t apply to people in the Metabase Admins group, as their more permissive privileges take precedence.

        +

        Connection impersonation doesn’t apply to people in the Metabase admins group, as their more permissive privileges take precedence.

        + +

        For more about how to set this up, check out Use Impersonation to get row-level permissions with both GUI and SQL queries.

        Metabase gives people the most permissive access to data across all of their groups

        @@ -4893,13 +4796,11 @@

        Admins won’t see the effects of impersonation

        +

        Further reading

        -

        Admins won’t ever see the effects of impersonation effects, because their privileges will override those of any other group they’re a member of.

        - -

        Metabase’s default Administrators group has “Can view” access to all databases, and Metabase uses the most permissive access for any person in multple groups, so any admin will have “Can view” - not “Impersonated” - access to the database.

        - -

        To test impersonation, create a test user, assign them a user attribute with the database role, and add them to the impersonated group. Then, log in as the test user and verify the data access.

        +
        diff --git a/_site/docs/master/questions/exporting-results.html b/_site/docs/master/questions/exporting-results.html index 78ac085229..b84b4a8a18 100644 --- a/_site/docs/master/questions/exporting-results.html +++ b/_site/docs/master/questions/exporting-results.html @@ -4754,14 +4754,9 @@

        Exporting pivot tables

        Export limits

        -

        Row limit

        +

        You can export (download) up to 1 million rows.

        -

        By default, Metabase will export first 1048575 rows of results.

        - -
          -
        • For CSV exports, you can increase this limit with an environment variable: MB_DOWNLOAD_ROW_LIMIT. Increasing this limit, however, may impact your Metabase’s performance.
        • -
        • XLSX exports will always be limited to Excel’s maximum of 1048575 rows (plus the header row).
        • -
        +

        You can change this limit with an environment variable: MB_DOWNLOAD_ROW_LIMIT.

        Cell character limit in Excel exports

        diff --git a/_site/docs/master/questions/images/02-widget.png b/_site/docs/master/questions/images/02-widget.png index 4ce9fda455..06d0f6d77a 100644 Binary files a/_site/docs/master/questions/images/02-widget.png and b/_site/docs/master/questions/images/02-widget.png differ diff --git a/_site/docs/master/questions/images/SQL-filter-widget.png b/_site/docs/master/questions/images/SQL-filter-widget.png index 22f38f2e92..990f193eab 100644 Binary files a/_site/docs/master/questions/images/SQL-filter-widget.png and b/_site/docs/master/questions/images/SQL-filter-widget.png differ diff --git a/_site/docs/master/questions/images/SQLInterface.png b/_site/docs/master/questions/images/SQLInterface.png index 60137f29af..535d3d4efa 100644 Binary files a/_site/docs/master/questions/images/SQLInterface.png and b/_site/docs/master/questions/images/SQLInterface.png differ diff --git a/_site/docs/master/questions/images/VisualizeChoices.png b/_site/docs/master/questions/images/VisualizeChoices.png index 5ee3df7705..23a36e94de 100644 Binary files a/_site/docs/master/questions/images/VisualizeChoices.png and b/_site/docs/master/questions/images/VisualizeChoices.png differ diff --git a/_site/docs/master/questions/images/add-column.png b/_site/docs/master/questions/images/add-column.png index 30af94d04a..e655410081 100644 Binary files a/_site/docs/master/questions/images/add-column.png and b/_site/docs/master/questions/images/add-column.png differ diff --git a/_site/docs/master/questions/images/add-comparison.png b/_site/docs/master/questions/images/add-comparison.png index 416c5e974f..98f105ce88 100644 Binary files a/_site/docs/master/questions/images/add-comparison.png and b/_site/docs/master/questions/images/add-comparison.png differ diff --git a/_site/docs/master/questions/images/area.png b/_site/docs/master/questions/images/area.png index 676d7840a3..a4b0b25066 100644 Binary files a/_site/docs/master/questions/images/area.png and b/_site/docs/master/questions/images/area.png differ diff --git a/_site/docs/master/questions/images/auto-format.png b/_site/docs/master/questions/images/auto-format.png index ee61e20dff..1c70db0327 100644 Binary files a/_site/docs/master/questions/images/auto-format.png and b/_site/docs/master/questions/images/auto-format.png differ diff --git a/_site/docs/master/questions/images/bar.png b/_site/docs/master/questions/images/bar.png index 9c472d2ff3..c98c0274aa 100644 Binary files a/_site/docs/master/questions/images/bar.png and b/_site/docs/master/questions/images/bar.png differ diff --git a/_site/docs/master/questions/images/bin-by-latlong.png b/_site/docs/master/questions/images/bin-by-latlong.png index 60cbdafba4..dfb624f134 100644 Binary files a/_site/docs/master/questions/images/bin-by-latlong.png and b/_site/docs/master/questions/images/bin-by-latlong.png differ diff --git a/_site/docs/master/questions/images/build-a-funnel-query.png b/_site/docs/master/questions/images/build-a-funnel-query.png index 2e6a6b4b28..fcec8e4114 100644 Binary files a/_site/docs/master/questions/images/build-a-funnel-query.png and b/_site/docs/master/questions/images/build-a-funnel-query.png differ diff --git a/_site/docs/master/questions/images/cell-action-string.png b/_site/docs/master/questions/images/cell-action-string.png index d49c5cc7f5..ac29855b80 100644 Binary files a/_site/docs/master/questions/images/cell-action-string.png and b/_site/docs/master/questions/images/cell-action-string.png differ diff --git a/_site/docs/master/questions/images/chart-formatting-options.png b/_site/docs/master/questions/images/chart-formatting-options.png index 14d64cca39..d1682c4b2e 100644 Binary files a/_site/docs/master/questions/images/chart-formatting-options.png and b/_site/docs/master/questions/images/chart-formatting-options.png differ diff --git a/_site/docs/master/questions/images/column-actions.png b/_site/docs/master/questions/images/column-actions.png index 72e8d8ea6e..b09859fa61 100644 Binary files a/_site/docs/master/questions/images/column-actions.png and b/_site/docs/master/questions/images/column-actions.png differ diff --git a/_site/docs/master/questions/images/column-header-formatting.png b/_site/docs/master/questions/images/column-header-formatting.png index 37196d98ab..0afc8d29ea 100644 Binary files a/_site/docs/master/questions/images/column-header-formatting.png and b/_site/docs/master/questions/images/column-header-formatting.png differ diff --git a/_site/docs/master/questions/images/column-selection.png b/_site/docs/master/questions/images/column-selection.png index dcbd6a8bdf..93d3a62b0d 100644 Binary files a/_site/docs/master/questions/images/column-selection.png and b/_site/docs/master/questions/images/column-selection.png differ diff --git a/_site/docs/master/questions/images/combo-chart-data-1.png b/_site/docs/master/questions/images/combo-chart-data-1.png index d3f64cf36d..df223a27d0 100644 Binary files a/_site/docs/master/questions/images/combo-chart-data-1.png and b/_site/docs/master/questions/images/combo-chart-data-1.png differ diff --git a/_site/docs/master/questions/images/combo-chart-data-2.png b/_site/docs/master/questions/images/combo-chart-data-2.png index acd274fc35..1339e5821c 100644 Binary files a/_site/docs/master/questions/images/combo-chart-data-2.png and b/_site/docs/master/questions/images/combo-chart-data-2.png differ diff --git a/_site/docs/master/questions/images/combo-chart.png b/_site/docs/master/questions/images/combo-chart.png index 9686dd3426..f3868f1f79 100644 Binary files a/_site/docs/master/questions/images/combo-chart.png and b/_site/docs/master/questions/images/combo-chart.png differ diff --git a/_site/docs/master/questions/images/conditional-formatting.png b/_site/docs/master/questions/images/conditional-formatting.png index b4b6ef8b05..cda74c9751 100644 Binary files a/_site/docs/master/questions/images/conditional-formatting.png and b/_site/docs/master/questions/images/conditional-formatting.png differ diff --git a/_site/docs/master/questions/images/count-and-average.png b/_site/docs/master/questions/images/count-and-average.png index 5ebb209705..3764c1c233 100644 Binary files a/_site/docs/master/questions/images/count-and-average.png and b/_site/docs/master/questions/images/count-and-average.png differ diff --git a/_site/docs/master/questions/images/create-snippet.png b/_site/docs/master/questions/images/create-snippet.png index 672da0a14f..e1d7533d27 100644 Binary files a/_site/docs/master/questions/images/create-snippet.png and b/_site/docs/master/questions/images/create-snippet.png differ diff --git a/_site/docs/master/questions/images/cumulative-date-category.png b/_site/docs/master/questions/images/cumulative-date-category.png index 91ae89db11..e9b4dcb461 100644 Binary files a/_site/docs/master/questions/images/cumulative-date-category.png and b/_site/docs/master/questions/images/cumulative-date-category.png differ diff --git a/_site/docs/master/questions/images/cumulative-multiple-datetimes.png b/_site/docs/master/questions/images/cumulative-multiple-datetimes.png index 17463efde4..ca2a963b40 100644 Binary files a/_site/docs/master/questions/images/cumulative-multiple-datetimes.png and b/_site/docs/master/questions/images/cumulative-multiple-datetimes.png differ diff --git a/_site/docs/master/questions/images/cumulative-no-datetime-order.png b/_site/docs/master/questions/images/cumulative-no-datetime-order.png index 278c63d78d..2165c79683 100644 Binary files a/_site/docs/master/questions/images/cumulative-no-datetime-order.png and b/_site/docs/master/questions/images/cumulative-no-datetime-order.png differ diff --git a/_site/docs/master/questions/images/cumulative-no-datetime.png b/_site/docs/master/questions/images/cumulative-no-datetime.png index d6bdb55cc1..8453d4d471 100644 Binary files a/_site/docs/master/questions/images/cumulative-no-datetime.png and b/_site/docs/master/questions/images/cumulative-no-datetime.png differ diff --git a/_site/docs/master/questions/images/custom-column.png b/_site/docs/master/questions/images/custom-column.png index 0ed27866a5..7c7a58acbd 100644 Binary files a/_site/docs/master/questions/images/custom-column.png and b/_site/docs/master/questions/images/custom-column.png differ diff --git a/_site/docs/master/questions/images/custom-expression-editor.png b/_site/docs/master/questions/images/custom-expression-editor.png index 416c5e974f..a0d457c888 100644 Binary files a/_site/docs/master/questions/images/custom-expression-editor.png and b/_site/docs/master/questions/images/custom-expression-editor.png differ diff --git a/_site/docs/master/questions/images/data-picker.png b/_site/docs/master/questions/images/data-picker.png index 70c1e8d81c..f7781f5854 100644 Binary files a/_site/docs/master/questions/images/data-picker.png and b/_site/docs/master/questions/images/data-picker.png differ diff --git a/_site/docs/master/questions/images/detail-view.png b/_site/docs/master/questions/images/detail-view.png index a912dce7f6..f844576363 100644 Binary files a/_site/docs/master/questions/images/detail-view.png and b/_site/docs/master/questions/images/detail-view.png differ diff --git a/_site/docs/master/questions/images/detail.png b/_site/docs/master/questions/images/detail.png index 6e5ac1825a..bb58a36bcb 100644 Binary files a/_site/docs/master/questions/images/detail.png and b/_site/docs/master/questions/images/detail.png differ diff --git a/_site/docs/master/questions/images/diff-and-percentage.png b/_site/docs/master/questions/images/diff-and-percentage.png index 181ab4e47c..673a368de5 100644 Binary files a/_site/docs/master/questions/images/diff-and-percentage.png and b/_site/docs/master/questions/images/diff-and-percentage.png differ diff --git a/_site/docs/master/questions/images/download-card-results.png b/_site/docs/master/questions/images/download-card-results.png index e6619ad778..273519bd8e 100644 Binary files a/_site/docs/master/questions/images/download-card-results.png and b/_site/docs/master/questions/images/download-card-results.png differ diff --git a/_site/docs/master/questions/images/drill-through-menu.png b/_site/docs/master/questions/images/drill-through-menu.png index 86dd9ecbc2..d053a661a0 100644 Binary files a/_site/docs/master/questions/images/drill-through-menu.png and b/_site/docs/master/questions/images/drill-through-menu.png differ diff --git a/_site/docs/master/questions/images/editor.png b/_site/docs/master/questions/images/editor.png index 31caa057b8..f7854ecf78 100644 Binary files a/_site/docs/master/questions/images/editor.png and b/_site/docs/master/questions/images/editor.png differ diff --git a/_site/docs/master/questions/images/explore-results.png b/_site/docs/master/questions/images/explore-results.png index 04ddfdc57b..4e8601e99d 100644 Binary files a/_site/docs/master/questions/images/explore-results.png and b/_site/docs/master/questions/images/explore-results.png differ diff --git a/_site/docs/master/questions/images/export-dashboard-as-pdf.png b/_site/docs/master/questions/images/export-dashboard-as-pdf.png index 5785ac229c..bb04ad6898 100644 Binary files a/_site/docs/master/questions/images/export-dashboard-as-pdf.png and b/_site/docs/master/questions/images/export-dashboard-as-pdf.png differ diff --git a/_site/docs/master/questions/images/exporting-the-results-of-a-question.png b/_site/docs/master/questions/images/exporting-the-results-of-a-question.png index b54550b6d6..627fb656c2 100644 Binary files a/_site/docs/master/questions/images/exporting-the-results-of-a-question.png and b/_site/docs/master/questions/images/exporting-the-results-of-a-question.png differ diff --git a/_site/docs/master/questions/images/filter-expression.png b/_site/docs/master/questions/images/filter-expression.png index c5b1a4f54b..8f4697afb2 100644 Binary files a/_site/docs/master/questions/images/filter-expression.png and b/_site/docs/master/questions/images/filter-expression.png differ diff --git a/_site/docs/master/questions/images/filter-step.png b/_site/docs/master/questions/images/filter-step.png index af8dd811b0..3ab541be27 100644 Binary files a/_site/docs/master/questions/images/filter-step.png and b/_site/docs/master/questions/images/filter-step.png differ diff --git a/_site/docs/master/questions/images/function-browser.png b/_site/docs/master/questions/images/function-browser.png index eaeaf64500..b6223101a3 100644 Binary files a/_site/docs/master/questions/images/function-browser.png and b/_site/docs/master/questions/images/function-browser.png differ diff --git a/_site/docs/master/questions/images/funnel-as-sql.png b/_site/docs/master/questions/images/funnel-as-sql.png index 3c8a32cc82..cbad6d22ba 100644 Binary files a/_site/docs/master/questions/images/funnel-as-sql.png and b/_site/docs/master/questions/images/funnel-as-sql.png differ diff --git a/_site/docs/master/questions/images/funnel-settings.png b/_site/docs/master/questions/images/funnel-settings.png index 676d7840a3..ef9a3c041c 100644 Binary files a/_site/docs/master/questions/images/funnel-settings.png and b/_site/docs/master/questions/images/funnel-settings.png differ diff --git a/_site/docs/master/questions/images/funnel.png b/_site/docs/master/questions/images/funnel.png index 0a00e2922b..3fff9554f5 100644 Binary files a/_site/docs/master/questions/images/funnel.png and b/_site/docs/master/questions/images/funnel.png differ diff --git a/_site/docs/master/questions/images/gauge-format.png b/_site/docs/master/questions/images/gauge-format.png index e68f416cad..f011c8dfd9 100644 Binary files a/_site/docs/master/questions/images/gauge-format.png and b/_site/docs/master/questions/images/gauge-format.png differ diff --git a/_site/docs/master/questions/images/gauge-labeled.png b/_site/docs/master/questions/images/gauge-labeled.png index efbaebb582..444e8ed85e 100644 Binary files a/_site/docs/master/questions/images/gauge-labeled.png and b/_site/docs/master/questions/images/gauge-labeled.png differ diff --git a/_site/docs/master/questions/images/gauge.png b/_site/docs/master/questions/images/gauge.png index 23560bea60..8a18e75ba8 100644 Binary files a/_site/docs/master/questions/images/gauge.png and b/_site/docs/master/questions/images/gauge.png differ diff --git a/_site/docs/master/questions/images/get-alerts-about-this.png b/_site/docs/master/questions/images/get-alerts-about-this.png index 66a05e7b48..205080a35f 100644 Binary files a/_site/docs/master/questions/images/get-alerts-about-this.png and b/_site/docs/master/questions/images/get-alerts-about-this.png differ diff --git a/_site/docs/master/questions/images/goal-line.png b/_site/docs/master/questions/images/goal-line.png index e333d82f01..1e9f3b8f44 100644 Binary files a/_site/docs/master/questions/images/goal-line.png and b/_site/docs/master/questions/images/goal-line.png differ diff --git a/_site/docs/master/questions/images/grid-map.png b/_site/docs/master/questions/images/grid-map.png index 95d7eefd87..d8dc3bdd8d 100644 Binary files a/_site/docs/master/questions/images/grid-map.png and b/_site/docs/master/questions/images/grid-map.png differ diff --git a/_site/docs/master/questions/images/group-by-week-of-year.png b/_site/docs/master/questions/images/group-by-week-of-year.png index fab199632b..525b22ab81 100644 Binary files a/_site/docs/master/questions/images/group-by-week-of-year.png and b/_site/docs/master/questions/images/group-by-week-of-year.png differ diff --git a/_site/docs/master/questions/images/heatmap-query.png b/_site/docs/master/questions/images/heatmap-query.png index ad11e5609a..ca371fe10b 100644 Binary files a/_site/docs/master/questions/images/heatmap-query.png and b/_site/docs/master/questions/images/heatmap-query.png differ diff --git a/_site/docs/master/questions/images/histogram-bins.png b/_site/docs/master/questions/images/histogram-bins.png index 99fb5e35ed..9b575fdb0f 100644 Binary files a/_site/docs/master/questions/images/histogram-bins.png and b/_site/docs/master/questions/images/histogram-bins.png differ diff --git a/_site/docs/master/questions/images/histogram.png b/_site/docs/master/questions/images/histogram.png index efbaebb582..2e246dd0b5 100644 Binary files a/_site/docs/master/questions/images/histogram.png and b/_site/docs/master/questions/images/histogram.png differ diff --git a/_site/docs/master/questions/images/info-sidesheet.png b/_site/docs/master/questions/images/info-sidesheet.png index fc791ceac8..f46d338305 100644 Binary files a/_site/docs/master/questions/images/info-sidesheet.png and b/_site/docs/master/questions/images/info-sidesheet.png differ diff --git a/_site/docs/master/questions/images/join-a-b-c.png b/_site/docs/master/questions/images/join-a-b-c.png index a03a06a881..605b3f27ab 100644 Binary files a/_site/docs/master/questions/images/join-a-b-c.png and b/_site/docs/master/questions/images/join-a-b-c.png differ diff --git a/_site/docs/master/questions/images/join-operator.png b/_site/docs/master/questions/images/join-operator.png index f7f974d7e0..9b6a2409c9 100644 Binary files a/_site/docs/master/questions/images/join-operator.png and b/_site/docs/master/questions/images/join-operator.png differ diff --git a/_site/docs/master/questions/images/join-pick-data.png b/_site/docs/master/questions/images/join-pick-data.png index c2c2978f4f..d23dcf3a71 100644 Binary files a/_site/docs/master/questions/images/join-pick-data.png and b/_site/docs/master/questions/images/join-pick-data.png differ diff --git a/_site/docs/master/questions/images/join-step.png b/_site/docs/master/questions/images/join-step.png index 4ff970ecd8..58b12ec981 100644 Binary files a/_site/docs/master/questions/images/join-step.png and b/_site/docs/master/questions/images/join-step.png differ diff --git a/_site/docs/master/questions/images/joining-on-multiple-columns.png b/_site/docs/master/questions/images/joining-on-multiple-columns.png index ce835da07c..1881079e7a 100644 Binary files a/_site/docs/master/questions/images/joining-on-multiple-columns.png and b/_site/docs/master/questions/images/joining-on-multiple-columns.png differ diff --git a/_site/docs/master/questions/images/latlong-binned-result.png b/_site/docs/master/questions/images/latlong-binned-result.png index 37f682f21a..53c1fdcb2b 100644 Binary files a/_site/docs/master/questions/images/latlong-binned-result.png and b/_site/docs/master/questions/images/latlong-binned-result.png differ diff --git a/_site/docs/master/questions/images/legend.png b/_site/docs/master/questions/images/legend.png index 1cfd092a11..b537a54083 100644 Binary files a/_site/docs/master/questions/images/legend.png and b/_site/docs/master/questions/images/legend.png differ diff --git a/_site/docs/master/questions/images/line-options.png b/_site/docs/master/questions/images/line-options.png index 47bf06c79f..84f7cacef9 100644 Binary files a/_site/docs/master/questions/images/line-options.png and b/_site/docs/master/questions/images/line-options.png differ diff --git a/_site/docs/master/questions/images/map-alternative.png b/_site/docs/master/questions/images/map-alternative.png index ea8c8ef377..13d35b81fb 100644 Binary files a/_site/docs/master/questions/images/map-alternative.png and b/_site/docs/master/questions/images/map-alternative.png differ diff --git a/_site/docs/master/questions/images/map-tiles.png b/_site/docs/master/questions/images/map-tiles.png index 48daef3d20..e9240db2e5 100644 Binary files a/_site/docs/master/questions/images/map-tiles.png and b/_site/docs/master/questions/images/map-tiles.png differ diff --git a/_site/docs/master/questions/images/map-types.png b/_site/docs/master/questions/images/map-types.png index 902353b6a8..5a1cbac8a5 100644 Binary files a/_site/docs/master/questions/images/map-types.png and b/_site/docs/master/questions/images/map-types.png differ diff --git a/_site/docs/master/questions/images/map.png b/_site/docs/master/questions/images/map.png index f0bc726bb6..bedffed948 100644 Binary files a/_site/docs/master/questions/images/map.png and b/_site/docs/master/questions/images/map.png differ diff --git a/_site/docs/master/questions/images/metrics-in-tooltip.png b/_site/docs/master/questions/images/metrics-in-tooltip.png index b2cdec6f3b..b0d2f359bc 100644 Binary files a/_site/docs/master/questions/images/metrics-in-tooltip.png and b/_site/docs/master/questions/images/metrics-in-tooltip.png differ diff --git a/_site/docs/master/questions/images/multiple-metrics.png b/_site/docs/master/questions/images/multiple-metrics.png index bba0c2bccc..ee91b33239 100644 Binary files a/_site/docs/master/questions/images/multiple-metrics.png and b/_site/docs/master/questions/images/multiple-metrics.png differ diff --git a/_site/docs/master/questions/images/multiple-summarize-steps.png b/_site/docs/master/questions/images/multiple-summarize-steps.png index cbb80ea4c2..b748a44ab0 100644 Binary files a/_site/docs/master/questions/images/multiple-summarize-steps.png and b/_site/docs/master/questions/images/multiple-summarize-steps.png differ diff --git a/_site/docs/master/questions/images/native-editor.png b/_site/docs/master/questions/images/native-editor.png index e064da9fec..849f7e34b2 100644 Binary files a/_site/docs/master/questions/images/native-editor.png and b/_site/docs/master/questions/images/native-editor.png differ diff --git a/_site/docs/master/questions/images/notebook-editor.png b/_site/docs/master/questions/images/notebook-editor.png index 24769d273d..f41a39888f 100644 Binary files a/_site/docs/master/questions/images/notebook-editor.png and b/_site/docs/master/questions/images/notebook-editor.png differ diff --git a/_site/docs/master/questions/images/number.png b/_site/docs/master/questions/images/number.png index 6a503dc977..c42ac28d5e 100644 Binary files a/_site/docs/master/questions/images/number.png and b/_site/docs/master/questions/images/number.png differ diff --git a/_site/docs/master/questions/images/paginate-table-on-dashboard-card.png b/_site/docs/master/questions/images/paginate-table-on-dashboard-card.png index 22f38f2e92..c748cf3912 100644 Binary files a/_site/docs/master/questions/images/paginate-table-on-dashboard-card.png and b/_site/docs/master/questions/images/paginate-table-on-dashboard-card.png differ diff --git a/_site/docs/master/questions/images/pie-other-slice.png b/_site/docs/master/questions/images/pie-other-slice.png index dcbd6a8bdf..f71e20096b 100644 Binary files a/_site/docs/master/questions/images/pie-other-slice.png and b/_site/docs/master/questions/images/pie-other-slice.png differ diff --git a/_site/docs/master/questions/images/pie-sunburst-demo.png b/_site/docs/master/questions/images/pie-sunburst-demo.png index a199112828..ed156d6419 100644 Binary files a/_site/docs/master/questions/images/pie-sunburst-demo.png and b/_site/docs/master/questions/images/pie-sunburst-demo.png differ diff --git a/_site/docs/master/questions/images/pin-data-shape.png b/_site/docs/master/questions/images/pin-data-shape.png index fab199632b..662fc32e5a 100644 Binary files a/_site/docs/master/questions/images/pin-data-shape.png and b/_site/docs/master/questions/images/pin-data-shape.png differ diff --git a/_site/docs/master/questions/images/pin-map-with-tooltip.png b/_site/docs/master/questions/images/pin-map-with-tooltip.png index 5710a8cb31..24453d9d16 100644 Binary files a/_site/docs/master/questions/images/pin-map-with-tooltip.png and b/_site/docs/master/questions/images/pin-map-with-tooltip.png differ diff --git a/_site/docs/master/questions/images/pivot-conditional-formatting.png b/_site/docs/master/questions/images/pivot-conditional-formatting.png index e485ede52a..a017f5dc3a 100644 Binary files a/_site/docs/master/questions/images/pivot-conditional-formatting.png and b/_site/docs/master/questions/images/pivot-conditional-formatting.png differ diff --git a/_site/docs/master/questions/images/pivot-table-as-heatmap.png b/_site/docs/master/questions/images/pivot-table-as-heatmap.png index 30cdb18b3a..9707bfc486 100644 Binary files a/_site/docs/master/questions/images/pivot-table-as-heatmap.png and b/_site/docs/master/questions/images/pivot-table-as-heatmap.png differ diff --git a/_site/docs/master/questions/images/pivot-table-in-metabase.png b/_site/docs/master/questions/images/pivot-table-in-metabase.png index e4c1d19aa6..5e99a66b5b 100644 Binary files a/_site/docs/master/questions/images/pivot-table-in-metabase.png and b/_site/docs/master/questions/images/pivot-table-in-metabase.png differ diff --git a/_site/docs/master/questions/images/pivot-table-notebook.png b/_site/docs/master/questions/images/pivot-table-notebook.png index 27e145920c..565a204b49 100644 Binary files a/_site/docs/master/questions/images/pivot-table-notebook.png and b/_site/docs/master/questions/images/pivot-table-notebook.png differ diff --git a/_site/docs/master/questions/images/pivot-table-options.png b/_site/docs/master/questions/images/pivot-table-options.png index a912dce7f6..89f3efb7c1 100644 Binary files a/_site/docs/master/questions/images/pivot-table-options.png and b/_site/docs/master/questions/images/pivot-table-options.png differ diff --git a/_site/docs/master/questions/images/pivot.png b/_site/docs/master/questions/images/pivot.png index b763536858..a3e366b726 100644 Binary files a/_site/docs/master/questions/images/pivot.png and b/_site/docs/master/questions/images/pivot.png differ diff --git a/_site/docs/master/questions/images/pivoted-results.png b/_site/docs/master/questions/images/pivoted-results.png index 356a82eb2f..42d5fe92ce 100644 Binary files a/_site/docs/master/questions/images/pivoted-results.png and b/_site/docs/master/questions/images/pivoted-results.png differ diff --git a/_site/docs/master/questions/images/pivoted-table.png b/_site/docs/master/questions/images/pivoted-table.png index 7c40a91eed..19c2a0af07 100644 Binary files a/_site/docs/master/questions/images/pivoted-table.png and b/_site/docs/master/questions/images/pivoted-table.png differ diff --git a/_site/docs/master/questions/images/plain-pie.png b/_site/docs/master/questions/images/plain-pie.png index 1b11f50d3a..37072eaaf1 100644 Binary files a/_site/docs/master/questions/images/plain-pie.png and b/_site/docs/master/questions/images/plain-pie.png differ diff --git a/_site/docs/master/questions/images/preview-table.png b/_site/docs/master/questions/images/preview-table.png index 432bf88ebb..4fdfcc8edb 100644 Binary files a/_site/docs/master/questions/images/preview-table.png and b/_site/docs/master/questions/images/preview-table.png differ diff --git a/_site/docs/master/questions/images/progress-bar-elements.png b/_site/docs/master/questions/images/progress-bar-elements.png index 1cfd092a11..e1c65992f4 100644 Binary files a/_site/docs/master/questions/images/progress-bar-elements.png and b/_site/docs/master/questions/images/progress-bar-elements.png differ diff --git a/_site/docs/master/questions/images/progress-with-format.png b/_site/docs/master/questions/images/progress-with-format.png index a2b5d4f88b..1fc1a79bcc 100644 Binary files a/_site/docs/master/questions/images/progress-with-format.png and b/_site/docs/master/questions/images/progress-with-format.png differ diff --git a/_site/docs/master/questions/images/progress.png b/_site/docs/master/questions/images/progress.png index 6a503dc977..a7b191cb64 100644 Binary files a/_site/docs/master/questions/images/progress.png and b/_site/docs/master/questions/images/progress.png differ diff --git a/_site/docs/master/questions/images/question-with-metabase-logo.png b/_site/docs/master/questions/images/question-with-metabase-logo.png index 4dc6b285d0..aac17b3470 100644 Binary files a/_site/docs/master/questions/images/question-with-metabase-logo.png and b/_site/docs/master/questions/images/question-with-metabase-logo.png differ diff --git a/_site/docs/master/questions/images/question.png b/_site/docs/master/questions/images/question.png index 2880e511c3..7aaf924bf1 100644 Binary files a/_site/docs/master/questions/images/question.png and b/_site/docs/master/questions/images/question.png differ diff --git a/_site/docs/master/questions/images/raw-table.png b/_site/docs/master/questions/images/raw-table.png index 2bd6a50036..a9a2336e75 100644 Binary files a/_site/docs/master/questions/images/raw-table.png and b/_site/docs/master/questions/images/raw-table.png differ diff --git a/_site/docs/master/questions/images/read-a-funnel.png b/_site/docs/master/questions/images/read-a-funnel.png index 7faff93ea7..7a1f4f5022 100644 Binary files a/_site/docs/master/questions/images/read-a-funnel.png and b/_site/docs/master/questions/images/read-a-funnel.png differ diff --git a/_site/docs/master/questions/images/region-map-query.png b/_site/docs/master/questions/images/region-map-query.png index eac3d90d7d..d6bcb63461 100644 Binary files a/_site/docs/master/questions/images/region-map-query.png and b/_site/docs/master/questions/images/region-map-query.png differ diff --git a/_site/docs/master/questions/images/region-maps.png b/_site/docs/master/questions/images/region-maps.png index 91ae89db11..ff87c07911 100644 Binary files a/_site/docs/master/questions/images/region-maps.png and b/_site/docs/master/questions/images/region-maps.png differ diff --git a/_site/docs/master/questions/images/rolling-average.png b/_site/docs/master/questions/images/rolling-average.png index 17463efde4..fc88de1df3 100644 Binary files a/_site/docs/master/questions/images/rolling-average.png and b/_site/docs/master/questions/images/rolling-average.png differ diff --git a/_site/docs/master/questions/images/row.png b/_site/docs/master/questions/images/row.png index dd3d2b7500..c6e2070ea8 100644 Binary files a/_site/docs/master/questions/images/row.png and b/_site/docs/master/questions/images/row.png differ diff --git a/_site/docs/master/questions/images/sankey-data-options.png b/_site/docs/master/questions/images/sankey-data-options.png index 234953e4d9..5fe31969a8 100644 Binary files a/_site/docs/master/questions/images/sankey-data-options.png and b/_site/docs/master/questions/images/sankey-data-options.png differ diff --git a/_site/docs/master/questions/images/sankey-gray-edges.png b/_site/docs/master/questions/images/sankey-gray-edges.png index faa2e2ff66..e19bf18895 100644 Binary files a/_site/docs/master/questions/images/sankey-gray-edges.png and b/_site/docs/master/questions/images/sankey-gray-edges.png differ diff --git a/_site/docs/master/questions/images/sankey-left-aligned.png b/_site/docs/master/questions/images/sankey-left-aligned.png index 4a3a856f4d..cd08b3453e 100644 Binary files a/_site/docs/master/questions/images/sankey-left-aligned.png and b/_site/docs/master/questions/images/sankey-left-aligned.png differ diff --git a/_site/docs/master/questions/images/sankey-right-aligned.png b/_site/docs/master/questions/images/sankey-right-aligned.png index 9a012f5045..3b3b894d3c 100644 Binary files a/_site/docs/master/questions/images/sankey-right-aligned.png and b/_site/docs/master/questions/images/sankey-right-aligned.png differ diff --git a/_site/docs/master/questions/images/sankey-summarize-count-source-target.png b/_site/docs/master/questions/images/sankey-summarize-count-source-target.png index d17e1d55e2..7648a01308 100644 Binary files a/_site/docs/master/questions/images/sankey-summarize-count-source-target.png and b/_site/docs/master/questions/images/sankey-summarize-count-source-target.png differ diff --git a/_site/docs/master/questions/images/scatter.png b/_site/docs/master/questions/images/scatter.png index 09c0b7664d..fa725aefea 100644 Binary files a/_site/docs/master/questions/images/scatter.png and b/_site/docs/master/questions/images/scatter.png differ diff --git a/_site/docs/master/questions/images/search-dropdown.png b/_site/docs/master/questions/images/search-dropdown.png index bfc92db1b5..648eda0993 100644 Binary files a/_site/docs/master/questions/images/search-dropdown.png and b/_site/docs/master/questions/images/search-dropdown.png differ diff --git a/_site/docs/master/questions/images/select-region-map.png b/_site/docs/master/questions/images/select-region-map.png index 6d5e84b1c9..7773d2af76 100644 Binary files a/_site/docs/master/questions/images/select-region-map.png and b/_site/docs/master/questions/images/select-region-map.png differ diff --git a/_site/docs/master/questions/images/show-row-index.png b/_site/docs/master/questions/images/show-row-index.png index 806be036e5..6d37c91d74 100644 Binary files a/_site/docs/master/questions/images/show-row-index.png and b/_site/docs/master/questions/images/show-row-index.png differ diff --git a/_site/docs/master/questions/images/sort-step.png b/_site/docs/master/questions/images/sort-step.png index cb6d0c33bb..b90a899fd6 100644 Binary files a/_site/docs/master/questions/images/sort-step.png and b/_site/docs/master/questions/images/sort-step.png differ diff --git a/_site/docs/master/questions/images/sql-snippets.png b/_site/docs/master/questions/images/sql-snippets.png index 7a1a02d4fe..9ea13f7129 100644 Binary files a/_site/docs/master/questions/images/sql-snippets.png and b/_site/docs/master/questions/images/sql-snippets.png differ diff --git a/_site/docs/master/questions/images/stacked-100.png b/_site/docs/master/questions/images/stacked-100.png index 7e9a092af9..f3ede741d1 100644 Binary files a/_site/docs/master/questions/images/stacked-100.png and b/_site/docs/master/questions/images/stacked-100.png differ diff --git a/_site/docs/master/questions/images/stacked-bar-chart.png b/_site/docs/master/questions/images/stacked-bar-chart.png index bca9971a7a..e293fe61ff 100644 Binary files a/_site/docs/master/questions/images/stacked-bar-chart.png and b/_site/docs/master/questions/images/stacked-bar-chart.png differ diff --git a/_site/docs/master/questions/images/state-field-filter.png b/_site/docs/master/questions/images/state-field-filter.png index dd3903bd93..7345147768 100644 Binary files a/_site/docs/master/questions/images/state-field-filter.png and b/_site/docs/master/questions/images/state-field-filter.png differ diff --git a/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png b/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png index c2c2978f4f..123c3b864e 100644 Binary files a/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png and b/_site/docs/master/questions/images/sum-of-totals-for-previous-period.png differ diff --git a/_site/docs/master/questions/images/summarize-by-week-of-year.png b/_site/docs/master/questions/images/summarize-by-week-of-year.png index 7acf891788..ef294da62e 100644 Binary files a/_site/docs/master/questions/images/summarize-by-week-of-year.png and b/_site/docs/master/questions/images/summarize-by-week-of-year.png differ diff --git a/_site/docs/master/questions/images/summarize-step.png b/_site/docs/master/questions/images/summarize-step.png index e5580a4a98..9a858b7588 100644 Binary files a/_site/docs/master/questions/images/summarize-step.png and b/_site/docs/master/questions/images/summarize-step.png differ diff --git a/_site/docs/master/questions/images/summarize-timeseries-breakout.png b/_site/docs/master/questions/images/summarize-timeseries-breakout.png index c590dc6620..f3d5fb4909 100644 Binary files a/_site/docs/master/questions/images/summarize-timeseries-breakout.png and b/_site/docs/master/questions/images/summarize-timeseries-breakout.png differ diff --git a/_site/docs/master/questions/images/summarize-timeseries.png b/_site/docs/master/questions/images/summarize-timeseries.png index c7dabb6f01..b6212a1142 100644 Binary files a/_site/docs/master/questions/images/summarize-timeseries.png and b/_site/docs/master/questions/images/summarize-timeseries.png differ diff --git a/_site/docs/master/questions/images/sunburst-metric-options.png b/_site/docs/master/questions/images/sunburst-metric-options.png index c004fdd975..ed46c94b1f 100644 Binary files a/_site/docs/master/questions/images/sunburst-metric-options.png and b/_site/docs/master/questions/images/sunburst-metric-options.png differ diff --git a/_site/docs/master/questions/images/sunburst-settings-showcase.png b/_site/docs/master/questions/images/sunburst-settings-showcase.png index 3f64e3e5ac..dc9697c664 100644 Binary files a/_site/docs/master/questions/images/sunburst-settings-showcase.png and b/_site/docs/master/questions/images/sunburst-settings-showcase.png differ diff --git a/_site/docs/master/questions/images/sunburst-two-levels.png b/_site/docs/master/questions/images/sunburst-two-levels.png index 10e0299409..f8e90bdc5f 100644 Binary files a/_site/docs/master/questions/images/sunburst-two-levels.png and b/_site/docs/master/questions/images/sunburst-two-levels.png differ diff --git a/_site/docs/master/questions/images/switch-to-editor.png b/_site/docs/master/questions/images/switch-to-editor.png index 3c8a32cc82..69a707d573 100644 Binary files a/_site/docs/master/questions/images/switch-to-editor.png and b/_site/docs/master/questions/images/switch-to-editor.png differ diff --git a/_site/docs/master/questions/images/table.png b/_site/docs/master/questions/images/table.png index 4ce9fda455..fa22b33069 100644 Binary files a/_site/docs/master/questions/images/table.png and b/_site/docs/master/questions/images/table.png differ diff --git a/_site/docs/master/questions/images/tooltip.png b/_site/docs/master/questions/images/tooltip.png index 0f50ef1c4e..0857912d96 100644 Binary files a/_site/docs/master/questions/images/tooltip.png and b/_site/docs/master/questions/images/tooltip.png differ diff --git a/_site/docs/master/questions/images/trend-lines.png b/_site/docs/master/questions/images/trend-lines.png index bb49c52381..d051c0722f 100644 Binary files a/_site/docs/master/questions/images/trend-lines.png and b/_site/docs/master/questions/images/trend-lines.png differ diff --git a/_site/docs/master/questions/images/trend-settings.png b/_site/docs/master/questions/images/trend-settings.png index 181ab4e47c..2f1b7fb7ea 100644 Binary files a/_site/docs/master/questions/images/trend-settings.png and b/_site/docs/master/questions/images/trend-settings.png differ diff --git a/_site/docs/master/questions/images/unpinned-from-zero-y-axis.png b/_site/docs/master/questions/images/unpinned-from-zero-y-axis.png index a20662dde5..b37449e7a0 100644 Binary files a/_site/docs/master/questions/images/unpinned-from-zero-y-axis.png and b/_site/docs/master/questions/images/unpinned-from-zero-y-axis.png differ diff --git a/_site/docs/master/questions/images/unpivoted-results.png b/_site/docs/master/questions/images/unpivoted-results.png index e3d9ba981c..0cc56ea996 100644 Binary files a/_site/docs/master/questions/images/unpivoted-results.png and b/_site/docs/master/questions/images/unpivoted-results.png differ diff --git a/_site/docs/master/questions/images/unpivoted-table.png b/_site/docs/master/questions/images/unpivoted-table.png index d4ac10651e..f81580ce49 100644 Binary files a/_site/docs/master/questions/images/unpivoted-table.png and b/_site/docs/master/questions/images/unpivoted-table.png differ diff --git a/_site/docs/master/questions/images/view-the-sql.png b/_site/docs/master/questions/images/view-the-sql.png index 13c16da8e3..8f6b4d0ee7 100644 Binary files a/_site/docs/master/questions/images/view-the-sql.png and b/_site/docs/master/questions/images/view-the-sql.png differ diff --git a/_site/docs/master/questions/images/visualize-native.png b/_site/docs/master/questions/images/visualize-native.png index 49a0bf0703..14f4706b56 100644 Binary files a/_site/docs/master/questions/images/visualize-native.png and b/_site/docs/master/questions/images/visualize-native.png differ diff --git a/_site/docs/master/questions/images/viz-options.png b/_site/docs/master/questions/images/viz-options.png index 49a0bf0703..4f278c1dec 100644 Binary files a/_site/docs/master/questions/images/viz-options.png and b/_site/docs/master/questions/images/viz-options.png differ diff --git a/_site/docs/master/questions/images/waterfall-chart.png b/_site/docs/master/questions/images/waterfall-chart.png index 60cbdafba4..5fbef8e5cb 100644 Binary files a/_site/docs/master/questions/images/waterfall-chart.png and b/_site/docs/master/questions/images/waterfall-chart.png differ diff --git a/_site/docs/master/questions/images/week-instance.png b/_site/docs/master/questions/images/week-instance.png index 8711fd07ed..347454663c 100644 Binary files a/_site/docs/master/questions/images/week-instance.png and b/_site/docs/master/questions/images/week-instance.png differ diff --git a/_site/docs/master/questions/images/week-iso.png b/_site/docs/master/questions/images/week-iso.png index 5ebb209705..82cf0608b8 100644 Binary files a/_site/docs/master/questions/images/week-iso.png and b/_site/docs/master/questions/images/week-iso.png differ diff --git a/_site/docs/master/questions/images/week-us.png b/_site/docs/master/questions/images/week-us.png index 00941672f6..6177879f08 100644 Binary files a/_site/docs/master/questions/images/week-us.png and b/_site/docs/master/questions/images/week-us.png differ diff --git a/_site/docs/master/questions/images/year-over-year-sum-totals.png b/_site/docs/master/questions/images/year-over-year-sum-totals.png index 5464e75a00..335ce262b9 100644 Binary files a/_site/docs/master/questions/images/year-over-year-sum-totals.png and b/_site/docs/master/questions/images/year-over-year-sum-totals.png differ diff --git a/_site/docs/master/questions/native-editor/sql-parameters.html b/_site/docs/master/questions/native-editor/sql-parameters.html index a5c8ee2a24..c5a6d179d2 100644 --- a/_site/docs/master/questions/native-editor/sql-parameters.html +++ b/_site/docs/master/questions/native-editor/sql-parameters.html @@ -4852,7 +4852,7 @@

        Field filters in BigQuery and Orac Oracle Schemas and tables must be quoted in double quotes. - FROM "schema.table" + FROM schema.table diff --git a/_site/docs/master/questions/query-builder/expressions-list.html b/_site/docs/master/questions/query-builder/expressions-list.html index 0f18dd0695..dfaf24b516 100644 --- a/_site/docs/master/questions/query-builder/expressions-list.html +++ b/_site/docs/master/questions/query-builder/expressions-list.html @@ -5188,7 +5188,7 @@

        contains

        date

        -

        Unavailable for Oracle or the non-JDBC Apache Druid driver.

        +

        Not available for Oracle or the non-JDBC Apache Druid driver.

          @@ -5322,7 +5322,7 @@

          isEmpty

          integer

          -

          Only available for BigQuery, ClickHouse, MySQL, PostgreSQL, Amazon Redshift, and Snowflake.

          +

          Not available for the non-JDBC Apache Druid driver.

            @@ -5480,7 +5480,7 @@

            substring

            text

            -

            Unavailable for the non-JDBC Druid driver

            +

            Not available for the non-JDBC Druid driver

            Converts a number or date to text (a string). Useful for applying text filters or joining with other columns based on text comparisons.

            diff --git a/_site/docs/master/troubleshooting-guide/bugs.html b/_site/docs/master/troubleshooting-guide/bugs.html index 1b0947fbe7..4ebe16c254 100644 --- a/_site/docs/master/troubleshooting-guide/bugs.html +++ b/_site/docs/master/troubleshooting-guide/bugs.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4698,7 +4698,7 @@
            Other resources

            Reporting a bug

            -

            If you come across something that looks like a bug, please start by searching our GitHub issues to see if it has already been reported. If it has, please let us know you’re experiencing the same issue by reacting with a thumbs up emoji or adding a comment to provide additional information.

            +

            If you come across something that looks like a bug, please start by searching our Github issues to see if it has already been reported. If it has, please let us know you’re experiencing the same issue by reacting with a thumbs up emoji or adding a comment to provide additional information.

            If the bug has not yet been reported, go ahead and open a bug report. The following information will help us reproduce your issue:

            diff --git a/_site/docs/master/troubleshooting-guide/images/sample-error-sql.png b/_site/docs/master/troubleshooting-guide/images/sample-error-sql.png index a3bdb2b9c8..b53abf95d0 100644 Binary files a/_site/docs/master/troubleshooting-guide/images/sample-error-sql.png and b/_site/docs/master/troubleshooting-guide/images/sample-error-sql.png differ diff --git a/_site/docs/master/troubleshooting-guide/known-issues.html b/_site/docs/master/troubleshooting-guide/known-issues.html index 4ee019fd98..2983e36925 100644 --- a/_site/docs/master/troubleshooting-guide/known-issues.html +++ b/_site/docs/master/troubleshooting-guide/known-issues.html @@ -4706,7 +4706,7 @@

            How to find a known bug

            1. -

              Go to the Metabase GitHub issues page.

              +

              Go to the Metabase Github issues page.

            2. Click on the Label dropdown and select Type: Bug.

              @@ -4740,7 +4740,7 @@

              How to find a known product limi
              1. -

                Go to the Metabase GitHub issues page.

                +

                Go to the Metabase Github issues page.

              2. Click on the Label dropdown and select Type: New Feature.

                diff --git a/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png b/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png index aa3faabac3..7e6a69d61b 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png and b/_site/docs/master/usage-and-performance-tools/images/audit-dashboards.png differ diff --git a/_site/docs/master/usage-and-performance-tools/images/audit-data.png b/_site/docs/master/usage-and-performance-tools/images/audit-data.png index 8c9b5bcbb9..b1bab9d666 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/audit-data.png and b/_site/docs/master/usage-and-performance-tools/images/audit-data.png differ diff --git a/_site/docs/master/usage-and-performance-tools/images/audit-questions.png b/_site/docs/master/usage-and-performance-tools/images/audit-questions.png index 91dddeb9c2..01d7faa1e1 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/audit-questions.png and b/_site/docs/master/usage-and-performance-tools/images/audit-questions.png differ diff --git a/_site/docs/master/usage-and-performance-tools/images/audit-team.png b/_site/docs/master/usage-and-performance-tools/images/audit-team.png index aa3faabac3..a1bb5ce674 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/audit-team.png and b/_site/docs/master/usage-and-performance-tools/images/audit-team.png differ diff --git a/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png b/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png index 8c9b5bcbb9..fcf9e5ca3a 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png and b/_site/docs/master/usage-and-performance-tools/images/audit-teammember.png differ diff --git a/_site/docs/master/usage-and-performance-tools/images/metabase-analytics.png b/_site/docs/master/usage-and-performance-tools/images/metabase-analytics.png index 6b62ec9d4b..29aa97282a 100644 Binary files a/_site/docs/master/usage-and-performance-tools/images/metabase-analytics.png and b/_site/docs/master/usage-and-performance-tools/images/metabase-analytics.png differ