diff --git a/UPDATING.md b/UPDATING.md index 4186ca88a8b2..0de4db96ed73 100644 --- a/UPDATING.md +++ b/UPDATING.md @@ -249,8 +249,10 @@ Behavior changes to be aware of: fail fast at the first phase check rather than erroring at setup. - Dashboard reports whose charts have not mounted are no longer captured blank: readiness is polled until the deadline, and the report fails loudly - if charts never mount. Thumbnails and non-report screenshots keep their - previous behavior. + if charts never mount. Large tiled reports also retry Chromium screenshot + stalls and suspicious uniform tiles, while persistent screenshot timeouts + fail loudly. Large tiled thumbnails use the same bounded retries, but retain + their previous failure contract after a persistent timeout. ### Embedded (guest token) API responses no longer echo database errors diff --git a/docs/developer_docs_versioned_docs/version-6.1.0/api.mdx b/docs/developer_docs_versioned_docs/version-6.1.0/api.mdx index 043ed18a688b..c6f9e6f209ea 100644 --- a/docs/developer_docs_versioned_docs/version-6.1.0/api.mdx +++ b/docs/developer_docs_versioned_docs/version-6.1.0/api.mdx @@ -49,10 +49,10 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------- | ------------------------------- | -| `GET` | [Get the CSRF token](/developer-docs/api/get-the-csrf-token) | `/api/v1/security/csrf_token/` | -| `POST` | [Get a guest token](/developer-docs/api/get-a-guest-token) | `/api/v1/security/guest_token/` | -| `POST` | [Create security login](/developer-docs/api/create-security-login) | `/api/v1/security/login` | -| `POST` | [Create security refresh](/developer-docs/api/create-security-refresh) | `/api/v1/security/refresh` | +| `GET` | [Get the CSRF token](/developer-docs/6.1.0/api/get-the-csrf-token) | `/api/v1/security/csrf_token/` | +| `POST` | [Get a guest token](/developer-docs/6.1.0/api/get-a-guest-token) | `/api/v1/security/guest_token/` | +| `POST` | [Create security login](/developer-docs/6.1.0/api/create-security-login) | `/api/v1/security/login` | +| `POST` | [Create security refresh](/developer-docs/6.1.0/api/create-security-refresh) | `/api/v1/security/refresh` | --- @@ -65,34 +65,34 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | -| `DELETE` | [Bulk delete dashboards](/developer-docs/api/bulk-delete-dashboards) | `/api/v1/dashboard/` | -| `GET` | [Get a list of dashboards](/developer-docs/api/get-a-list-of-dashboards) | `/api/v1/dashboard/` | -| `POST` | [Create a new dashboard](/developer-docs/api/create-a-new-dashboard) | `/api/v1/dashboard/` | -| `GET` | [Get metadata information about this API resource (dashboard--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-dashboard-info) | `/api/v1/dashboard/_info` | -| `GET` | [Get a dashboard detail information](/developer-docs/api/get-a-dashboard-detail-information) | `/api/v1/dashboard/{id_or_slug}` | -| `GET` | [Get a dashboard's chart definitions.](/developer-docs/api/get-a-dashboards-chart-definitions) | `/api/v1/dashboard/{id_or_slug}/charts` | -| `POST` | [Create a copy of an existing dashboard](/developer-docs/api/create-a-copy-of-an-existing-dashboard) | `/api/v1/dashboard/{id_or_slug}/copy/` | -| `GET` | [Get dashboard's datasets](/developer-docs/api/get-dashboards-datasets) | `/api/v1/dashboard/{id_or_slug}/datasets` | -| `DELETE` | [Delete a dashboard's embedded configuration](/developer-docs/api/delete-a-dashboards-embedded-configuration) | `/api/v1/dashboard/{id_or_slug}/embedded` | -| `GET` | [Get the dashboard's embedded configuration](/developer-docs/api/get-the-dashboards-embedded-configuration) | `/api/v1/dashboard/{id_or_slug}/embedded` | -| `POST` | [Set a dashboard's embedded configuration](/developer-docs/api/set-a-dashboards-embedded-configuration) | `/api/v1/dashboard/{id_or_slug}/embedded` | -| `PUT` | [Update dashboard by id_or_slug embedded](/developer-docs/api/update-dashboard-by-id-or-slug-embedded) | `/api/v1/dashboard/{id_or_slug}/embedded` | -| `GET` | [Get dashboard's tabs](/developer-docs/api/get-dashboards-tabs) | `/api/v1/dashboard/{id_or_slug}/tabs` | -| `DELETE` | [Delete a dashboard](/developer-docs/api/delete-a-dashboard) | `/api/v1/dashboard/{pk}` | -| `PUT` | [Update a dashboard](/developer-docs/api/update-a-dashboard) | `/api/v1/dashboard/{pk}` | -| `POST` | [Compute and cache a screenshot (dashboard-pk-cache-dashboard-screenshot)](/developer-docs/api/compute-and-cache-a-screenshot-dashboard-pk-cache-dashboard-screenshot) | `/api/v1/dashboard/{pk}/cache_dashboard_screenshot/` | -| `PUT` | [Update chart customizations configuration for a dashboard.](/developer-docs/api/update-chart-customizations-configuration-for-a-dashboard) | `/api/v1/dashboard/{pk}/chart_customizations` | -| `PUT` | [Update colors configuration for a dashboard.](/developer-docs/api/update-colors-configuration-for-a-dashboard) | `/api/v1/dashboard/{pk}/colors` | -| `GET` | [Export dashboard as example bundle](/developer-docs/api/export-dashboard-as-example-bundle) | `/api/v1/dashboard/{pk}/export_as_example/` | -| `DELETE` | [Remove the dashboard from the user favorite list](/developer-docs/api/remove-the-dashboard-from-the-user-favorite-list) | `/api/v1/dashboard/{pk}/favorites/` | -| `POST` | [Mark the dashboard as favorite for the current user](/developer-docs/api/mark-the-dashboard-as-favorite-for-the-current-user) | `/api/v1/dashboard/{pk}/favorites/` | -| `PUT` | [Update native filters configuration for a dashboard.](/developer-docs/api/update-native-filters-configuration-for-a-dashboard) | `/api/v1/dashboard/{pk}/filters` | -| `GET` | [Get a computed screenshot from cache (dashboard-pk-screenshot-digest)](/developer-docs/api/get-a-computed-screenshot-from-cache-dashboard-pk-screenshot-digest) | `/api/v1/dashboard/{pk}/screenshot/{digest}/` | -| `GET` | [Get dashboard's thumbnail](/developer-docs/api/get-dashboards-thumbnail) | `/api/v1/dashboard/{pk}/thumbnail/{digest}/` | -| `GET` | [Download multiple dashboards as YAML files](/developer-docs/api/download-multiple-dashboards-as-yaml-files) | `/api/v1/dashboard/export/` | -| `GET` | [Check favorited dashboards for current user](/developer-docs/api/check-favorited-dashboards-for-current-user) | `/api/v1/dashboard/favorite_status/` | -| `POST` | [Import dashboard(s) with associated charts/datasets/databases](/developer-docs/api/import-dashboard-s-with-associated-charts-datasets-databases) | `/api/v1/dashboard/import/` | -| `GET` | [Get related fields data (dashboard-related-column-name)](/developer-docs/api/get-related-fields-data-dashboard-related-column-name) | `/api/v1/dashboard/related/{column_name}` | +| `DELETE` | [Bulk delete dashboards](/developer-docs/6.1.0/api/bulk-delete-dashboards) | `/api/v1/dashboard/` | +| `GET` | [Get a list of dashboards](/developer-docs/6.1.0/api/get-a-list-of-dashboards) | `/api/v1/dashboard/` | +| `POST` | [Create a new dashboard](/developer-docs/6.1.0/api/create-a-new-dashboard) | `/api/v1/dashboard/` | +| `GET` | [Get metadata information about this API resource (dashboard--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-dashboard-info) | `/api/v1/dashboard/_info` | +| `GET` | [Get a dashboard detail information](/developer-docs/6.1.0/api/get-a-dashboard-detail-information) | `/api/v1/dashboard/{id_or_slug}` | +| `GET` | [Get a dashboard's chart definitions.](/developer-docs/6.1.0/api/get-a-dashboards-chart-definitions) | `/api/v1/dashboard/{id_or_slug}/charts` | +| `POST` | [Create a copy of an existing dashboard](/developer-docs/6.1.0/api/create-a-copy-of-an-existing-dashboard) | `/api/v1/dashboard/{id_or_slug}/copy/` | +| `GET` | [Get dashboard's datasets](/developer-docs/6.1.0/api/get-dashboards-datasets) | `/api/v1/dashboard/{id_or_slug}/datasets` | +| `DELETE` | [Delete a dashboard's embedded configuration](/developer-docs/6.1.0/api/delete-a-dashboards-embedded-configuration) | `/api/v1/dashboard/{id_or_slug}/embedded` | +| `GET` | [Get the dashboard's embedded configuration](/developer-docs/6.1.0/api/get-the-dashboards-embedded-configuration) | `/api/v1/dashboard/{id_or_slug}/embedded` | +| `POST` | [Set a dashboard's embedded configuration](/developer-docs/6.1.0/api/set-a-dashboards-embedded-configuration) | `/api/v1/dashboard/{id_or_slug}/embedded` | +| `PUT` | [Update dashboard by id_or_slug embedded](/developer-docs/6.1.0/api/update-dashboard-by-id-or-slug-embedded) | `/api/v1/dashboard/{id_or_slug}/embedded` | +| `GET` | [Get dashboard's tabs](/developer-docs/6.1.0/api/get-dashboards-tabs) | `/api/v1/dashboard/{id_or_slug}/tabs` | +| `DELETE` | [Delete a dashboard](/developer-docs/6.1.0/api/delete-a-dashboard) | `/api/v1/dashboard/{pk}` | +| `PUT` | [Update a dashboard](/developer-docs/6.1.0/api/update-a-dashboard) | `/api/v1/dashboard/{pk}` | +| `POST` | [Compute and cache a screenshot (dashboard-pk-cache-dashboard-screenshot)](/developer-docs/6.1.0/api/compute-and-cache-a-screenshot-dashboard-pk-cache-dashboard-screenshot) | `/api/v1/dashboard/{pk}/cache_dashboard_screenshot/` | +| `PUT` | [Update chart customizations configuration for a dashboard.](/developer-docs/6.1.0/api/update-chart-customizations-configuration-for-a-dashboard) | `/api/v1/dashboard/{pk}/chart_customizations` | +| `PUT` | [Update colors configuration for a dashboard.](/developer-docs/6.1.0/api/update-colors-configuration-for-a-dashboard) | `/api/v1/dashboard/{pk}/colors` | +| `GET` | [Export dashboard as example bundle](/developer-docs/6.1.0/api/export-dashboard-as-example-bundle) | `/api/v1/dashboard/{pk}/export_as_example/` | +| `DELETE` | [Remove the dashboard from the user favorite list](/developer-docs/6.1.0/api/remove-the-dashboard-from-the-user-favorite-list) | `/api/v1/dashboard/{pk}/favorites/` | +| `POST` | [Mark the dashboard as favorite for the current user](/developer-docs/6.1.0/api/mark-the-dashboard-as-favorite-for-the-current-user) | `/api/v1/dashboard/{pk}/favorites/` | +| `PUT` | [Update native filters configuration for a dashboard.](/developer-docs/6.1.0/api/update-native-filters-configuration-for-a-dashboard) | `/api/v1/dashboard/{pk}/filters` | +| `GET` | [Get a computed screenshot from cache (dashboard-pk-screenshot-digest)](/developer-docs/6.1.0/api/get-a-computed-screenshot-from-cache-dashboard-pk-screenshot-digest) | `/api/v1/dashboard/{pk}/screenshot/{digest}/` | +| `GET` | [Get dashboard's thumbnail](/developer-docs/6.1.0/api/get-dashboards-thumbnail) | `/api/v1/dashboard/{pk}/thumbnail/{digest}/` | +| `GET` | [Download multiple dashboards as YAML files](/developer-docs/6.1.0/api/download-multiple-dashboards-as-yaml-files) | `/api/v1/dashboard/export/` | +| `GET` | [Check favorited dashboards for current user](/developer-docs/6.1.0/api/check-favorited-dashboards-for-current-user) | `/api/v1/dashboard/favorite_status/` | +| `POST` | [Import dashboard(s) with associated charts/datasets/databases](/developer-docs/6.1.0/api/import-dashboard-s-with-associated-charts-datasets-databases) | `/api/v1/dashboard/import/` | +| `GET` | [Get related fields data (dashboard-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-dashboard-related-column-name) | `/api/v1/dashboard/related/{column_name}` | @@ -101,26 +101,26 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -| `DELETE` | [Bulk delete charts](/developer-docs/api/bulk-delete-charts) | `/api/v1/chart/` | -| `GET` | [Get a list of charts](/developer-docs/api/get-a-list-of-charts) | `/api/v1/chart/` | -| `POST` | [Create a new chart](/developer-docs/api/create-a-new-chart) | `/api/v1/chart/` | -| `GET` | [Get metadata information about this API resource (chart--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-chart-info) | `/api/v1/chart/_info` | -| `GET` | [Get a chart detail information](/developer-docs/api/get-a-chart-detail-information) | `/api/v1/chart/{id_or_uuid}` | -| `DELETE` | [Delete a chart](/developer-docs/api/delete-a-chart) | `/api/v1/chart/{pk}` | -| `PUT` | [Update a chart](/developer-docs/api/update-a-chart) | `/api/v1/chart/{pk}` | -| `GET` | [Compute and cache a screenshot (chart-pk-cache-screenshot)](/developer-docs/api/compute-and-cache-a-screenshot-chart-pk-cache-screenshot) | `/api/v1/chart/{pk}/cache_screenshot/` | -| `GET` | [Return payload data response for a chart](/developer-docs/api/return-payload-data-response-for-a-chart) | `/api/v1/chart/{pk}/data/` | -| `DELETE` | [Remove the chart from the user favorite list](/developer-docs/api/remove-the-chart-from-the-user-favorite-list) | `/api/v1/chart/{pk}/favorites/` | -| `POST` | [Mark the chart as favorite for the current user](/developer-docs/api/mark-the-chart-as-favorite-for-the-current-user) | `/api/v1/chart/{pk}/favorites/` | -| `GET` | [Get a computed screenshot from cache (chart-pk-screenshot-digest)](/developer-docs/api/get-a-computed-screenshot-from-cache-chart-pk-screenshot-digest) | `/api/v1/chart/{pk}/screenshot/{digest}/` | -| `GET` | [Get chart thumbnail](/developer-docs/api/get-chart-thumbnail) | `/api/v1/chart/{pk}/thumbnail/{digest}/` | -| `POST` | [Return payload data response for the given query (chart-data)](/developer-docs/api/return-payload-data-response-for-the-given-query-chart-data) | `/api/v1/chart/data` | -| `GET` | [Return payload data response for the given query (chart-data-cache-key)](/developer-docs/api/return-payload-data-response-for-the-given-query-chart-data-cache-key) | `/api/v1/chart/data/{cache_key}` | -| `GET` | [Download multiple charts as YAML files](/developer-docs/api/download-multiple-charts-as-yaml-files) | `/api/v1/chart/export/` | -| `GET` | [Check favorited charts for current user](/developer-docs/api/check-favorited-charts-for-current-user) | `/api/v1/chart/favorite_status/` | -| `POST` | [Import chart(s) with associated datasets and databases](/developer-docs/api/import-chart-s-with-associated-datasets-and-databases) | `/api/v1/chart/import/` | -| `GET` | [Get related fields data (chart-related-column-name)](/developer-docs/api/get-related-fields-data-chart-related-column-name) | `/api/v1/chart/related/{column_name}` | -| `PUT` | [Warm up the cache for the chart](/developer-docs/api/warm-up-the-cache-for-the-chart) | `/api/v1/chart/warm_up_cache` | +| `DELETE` | [Bulk delete charts](/developer-docs/6.1.0/api/bulk-delete-charts) | `/api/v1/chart/` | +| `GET` | [Get a list of charts](/developer-docs/6.1.0/api/get-a-list-of-charts) | `/api/v1/chart/` | +| `POST` | [Create a new chart](/developer-docs/6.1.0/api/create-a-new-chart) | `/api/v1/chart/` | +| `GET` | [Get metadata information about this API resource (chart--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-chart-info) | `/api/v1/chart/_info` | +| `GET` | [Get a chart detail information](/developer-docs/6.1.0/api/get-a-chart-detail-information) | `/api/v1/chart/{id_or_uuid}` | +| `DELETE` | [Delete a chart](/developer-docs/6.1.0/api/delete-a-chart) | `/api/v1/chart/{pk}` | +| `PUT` | [Update a chart](/developer-docs/6.1.0/api/update-a-chart) | `/api/v1/chart/{pk}` | +| `GET` | [Compute and cache a screenshot (chart-pk-cache-screenshot)](/developer-docs/6.1.0/api/compute-and-cache-a-screenshot-chart-pk-cache-screenshot) | `/api/v1/chart/{pk}/cache_screenshot/` | +| `GET` | [Return payload data response for a chart](/developer-docs/6.1.0/api/return-payload-data-response-for-a-chart) | `/api/v1/chart/{pk}/data/` | +| `DELETE` | [Remove the chart from the user favorite list](/developer-docs/6.1.0/api/remove-the-chart-from-the-user-favorite-list) | `/api/v1/chart/{pk}/favorites/` | +| `POST` | [Mark the chart as favorite for the current user](/developer-docs/6.1.0/api/mark-the-chart-as-favorite-for-the-current-user) | `/api/v1/chart/{pk}/favorites/` | +| `GET` | [Get a computed screenshot from cache (chart-pk-screenshot-digest)](/developer-docs/6.1.0/api/get-a-computed-screenshot-from-cache-chart-pk-screenshot-digest) | `/api/v1/chart/{pk}/screenshot/{digest}/` | +| `GET` | [Get chart thumbnail](/developer-docs/6.1.0/api/get-chart-thumbnail) | `/api/v1/chart/{pk}/thumbnail/{digest}/` | +| `POST` | [Return payload data response for the given query (chart-data)](/developer-docs/6.1.0/api/return-payload-data-response-for-the-given-query-chart-data) | `/api/v1/chart/data` | +| `GET` | [Return payload data response for the given query (chart-data-cache-key)](/developer-docs/6.1.0/api/return-payload-data-response-for-the-given-query-chart-data-cache-key) | `/api/v1/chart/data/{cache_key}` | +| `GET` | [Download multiple charts as YAML files](/developer-docs/6.1.0/api/download-multiple-charts-as-yaml-files) | `/api/v1/chart/export/` | +| `GET` | [Check favorited charts for current user](/developer-docs/6.1.0/api/check-favorited-charts-for-current-user) | `/api/v1/chart/favorite_status/` | +| `POST` | [Import chart(s) with associated datasets and databases](/developer-docs/6.1.0/api/import-chart-s-with-associated-datasets-and-databases) | `/api/v1/chart/import/` | +| `GET` | [Get related fields data (chart-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-chart-related-column-name) | `/api/v1/chart/related/{column_name}` | +| `PUT` | [Warm up the cache for the chart](/developer-docs/6.1.0/api/warm-up-the-cache-for-the-chart) | `/api/v1/chart/warm_up_cache` | @@ -129,25 +129,25 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| `DELETE` | [Bulk delete datasets](/developer-docs/api/bulk-delete-datasets) | `/api/v1/dataset/` | -| `GET` | [Get a list of datasets](/developer-docs/api/get-a-list-of-datasets) | `/api/v1/dataset/` | -| `POST` | [Create a new dataset](/developer-docs/api/create-a-new-dataset) | `/api/v1/dataset/` | -| `GET` | [Get metadata information about this API resource (dataset--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-dataset-info) | `/api/v1/dataset/_info` | -| `GET` | [Get a dataset](/developer-docs/api/get-a-dataset) | `/api/v1/dataset/{id_or_uuid}` | -| `GET` | [Get charts and dashboards count associated to a dataset](/developer-docs/api/get-charts-and-dashboards-count-associated-to-a-dataset) | `/api/v1/dataset/{id_or_uuid}/related_objects` | -| `DELETE` | [Delete a dataset](/developer-docs/api/delete-a-dataset) | `/api/v1/dataset/{pk}` | -| `PUT` | [Update a dataset](/developer-docs/api/update-a-dataset) | `/api/v1/dataset/{pk}` | -| `DELETE` | [Delete a dataset column](/developer-docs/api/delete-a-dataset-column) | `/api/v1/dataset/{pk}/column/{column_id}` | -| `GET` | [Get dataset drill info](/developer-docs/api/get-dataset-drill-info) | `/api/v1/dataset/{pk}/drill_info/` | -| `DELETE` | [Delete a dataset metric](/developer-docs/api/delete-a-dataset-metric) | `/api/v1/dataset/{pk}/metric/{metric_id}` | -| `PUT` | [Refresh and update columns of a dataset](/developer-docs/api/refresh-and-update-columns-of-a-dataset) | `/api/v1/dataset/{pk}/refresh` | -| `GET` | [Get distinct values from field data (dataset-distinct-column-name)](/developer-docs/api/get-distinct-values-from-field-data-dataset-distinct-column-name) | `/api/v1/dataset/distinct/{column_name}` | -| `POST` | [Duplicate a dataset](/developer-docs/api/duplicate-a-dataset) | `/api/v1/dataset/duplicate` | -| `GET` | [Download multiple datasets as YAML files](/developer-docs/api/download-multiple-datasets-as-yaml-files) | `/api/v1/dataset/export/` | -| `POST` | [Retrieve a table by name, or create it if it does not exist](/developer-docs/api/retrieve-a-table-by-name-or-create-it-if-it-does-not-exist) | `/api/v1/dataset/get_or_create/` | -| `POST` | [Import dataset(s) with associated databases](/developer-docs/api/import-dataset-s-with-associated-databases) | `/api/v1/dataset/import/` | -| `GET` | [Get related fields data (dataset-related-column-name)](/developer-docs/api/get-related-fields-data-dataset-related-column-name) | `/api/v1/dataset/related/{column_name}` | -| `PUT` | [Warm up the cache for each chart powered by the given table](/developer-docs/api/warm-up-the-cache-for-each-chart-powered-by-the-given-table) | `/api/v1/dataset/warm_up_cache` | +| `DELETE` | [Bulk delete datasets](/developer-docs/6.1.0/api/bulk-delete-datasets) | `/api/v1/dataset/` | +| `GET` | [Get a list of datasets](/developer-docs/6.1.0/api/get-a-list-of-datasets) | `/api/v1/dataset/` | +| `POST` | [Create a new dataset](/developer-docs/6.1.0/api/create-a-new-dataset) | `/api/v1/dataset/` | +| `GET` | [Get metadata information about this API resource (dataset--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-dataset-info) | `/api/v1/dataset/_info` | +| `GET` | [Get a dataset](/developer-docs/6.1.0/api/get-a-dataset) | `/api/v1/dataset/{id_or_uuid}` | +| `GET` | [Get charts and dashboards count associated to a dataset](/developer-docs/6.1.0/api/get-charts-and-dashboards-count-associated-to-a-dataset) | `/api/v1/dataset/{id_or_uuid}/related_objects` | +| `DELETE` | [Delete a dataset](/developer-docs/6.1.0/api/delete-a-dataset) | `/api/v1/dataset/{pk}` | +| `PUT` | [Update a dataset](/developer-docs/6.1.0/api/update-a-dataset) | `/api/v1/dataset/{pk}` | +| `DELETE` | [Delete a dataset column](/developer-docs/6.1.0/api/delete-a-dataset-column) | `/api/v1/dataset/{pk}/column/{column_id}` | +| `GET` | [Get dataset drill info](/developer-docs/6.1.0/api/get-dataset-drill-info) | `/api/v1/dataset/{pk}/drill_info/` | +| `DELETE` | [Delete a dataset metric](/developer-docs/6.1.0/api/delete-a-dataset-metric) | `/api/v1/dataset/{pk}/metric/{metric_id}` | +| `PUT` | [Refresh and update columns of a dataset](/developer-docs/6.1.0/api/refresh-and-update-columns-of-a-dataset) | `/api/v1/dataset/{pk}/refresh` | +| `GET` | [Get distinct values from field data (dataset-distinct-column-name)](/developer-docs/6.1.0/api/get-distinct-values-from-field-data-dataset-distinct-column-name) | `/api/v1/dataset/distinct/{column_name}` | +| `POST` | [Duplicate a dataset](/developer-docs/6.1.0/api/duplicate-a-dataset) | `/api/v1/dataset/duplicate` | +| `GET` | [Download multiple datasets as YAML files](/developer-docs/6.1.0/api/download-multiple-datasets-as-yaml-files) | `/api/v1/dataset/export/` | +| `POST` | [Retrieve a table by name, or create it if it does not exist](/developer-docs/6.1.0/api/retrieve-a-table-by-name-or-create-it-if-it-does-not-exist) | `/api/v1/dataset/get_or_create/` | +| `POST` | [Import dataset(s) with associated databases](/developer-docs/6.1.0/api/import-dataset-s-with-associated-databases) | `/api/v1/dataset/import/` | +| `GET` | [Get related fields data (dataset-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-dataset-related-column-name) | `/api/v1/dataset/related/{column_name}` | +| `PUT` | [Warm up the cache for each chart powered by the given table](/developer-docs/6.1.0/api/warm-up-the-cache-for-each-chart-powered-by-the-given-table) | `/api/v1/dataset/warm_up_cache` | @@ -156,36 +156,36 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | -| `GET` | [Get a list of databases](/developer-docs/api/get-a-list-of-databases) | `/api/v1/database/` | -| `POST` | [Create a new database](/developer-docs/api/create-a-new-database) | `/api/v1/database/` | -| `GET` | [Get metadata information about this API resource (database--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-database-info) | `/api/v1/database/_info` | -| `DELETE` | [Delete a database](/developer-docs/api/delete-a-database) | `/api/v1/database/{pk}` | -| `GET` | [Get a database](/developer-docs/api/get-a-database) | `/api/v1/database/{pk}` | -| `PUT` | [Change a database](/developer-docs/api/change-a-database) | `/api/v1/database/{pk}` | -| `GET` | [Get all catalogs from a database](/developer-docs/api/get-all-catalogs-from-a-database) | `/api/v1/database/{pk}/catalogs/` | -| `GET` | [Get a database connection info](/developer-docs/api/get-a-database-connection-info) | `/api/v1/database/{pk}/connection` | -| `GET` | [Get function names supported by a database](/developer-docs/api/get-function-names-supported-by-a-database) | `/api/v1/database/{pk}/function_names/` | -| `GET` | [Get charts and dashboards count associated to a database](/developer-docs/api/get-charts-and-dashboards-count-associated-to-a-database) | `/api/v1/database/{pk}/related_objects/` | -| `GET` | [The list of the database schemas where to upload information](/developer-docs/api/the-list-of-the-database-schemas-where-to-upload-information) | `/api/v1/database/{pk}/schemas_access_for_file_upload/` | -| `GET` | [Get all schemas from a database](/developer-docs/api/get-all-schemas-from-a-database) | `/api/v1/database/{pk}/schemas/` | -| `GET` | [Get database select star for table (database-pk-select-star-table-name)](/developer-docs/api/get-database-select-star-for-table-database-pk-select-star-table-name) | `/api/v1/database/{pk}/select_star/{table_name}/` | -| `GET` | [Get database select star for table (database-pk-select-star-table-name-schema-name)](/developer-docs/api/get-database-select-star-for-table-database-pk-select-star-table-name-schema-name) | `/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/` | -| `POST` | [Re-sync all permissions for a database connection](/developer-docs/api/re-sync-all-permissions-for-a-database-connection) | `/api/v1/database/{pk}/sync_permissions/` | -| `GET` | [Get table extra metadata (database-pk-table-extra-table-name-schema-name)](/developer-docs/api/get-table-extra-metadata-database-pk-table-extra-table-name-schema-name) | `/api/v1/database/{pk}/table_extra/{table_name}/{schema_name}/` | -| `GET` | [Get table metadata](/developer-docs/api/get-table-metadata) | `/api/v1/database/{pk}/table_metadata/` | -| `GET` | [Get table extra metadata (database-pk-table-metadata-extra)](/developer-docs/api/get-table-extra-metadata-database-pk-table-metadata-extra) | `/api/v1/database/{pk}/table_metadata/extra/` | -| `GET` | [Get database table metadata](/developer-docs/api/get-database-table-metadata) | `/api/v1/database/{pk}/table/{table_name}/{schema_name}/` | -| `GET` | [Get a list of tables for given database](/developer-docs/api/get-a-list-of-tables-for-given-database) | `/api/v1/database/{pk}/tables/` | -| `POST` | [Upload a file to a database table](/developer-docs/api/upload-a-file-to-a-database-table) | `/api/v1/database/{pk}/upload/` | -| `POST` | [Validate arbitrary SQL](/developer-docs/api/validate-arbitrary-sql) | `/api/v1/database/{pk}/validate_sql/` | -| `GET` | [Get names of databases currently available](/developer-docs/api/get-names-of-databases-currently-available) | `/api/v1/database/available/` | -| `GET` | [Download database(s) and associated dataset(s) as a zip file](/developer-docs/api/download-database-s-and-associated-dataset-s-as-a-zip-file) | `/api/v1/database/export/` | -| `POST` | [Import database(s) with associated datasets](/developer-docs/api/import-database-s-with-associated-datasets) | `/api/v1/database/import/` | -| `GET` | [Receive personal access tokens from OAuth2](/developer-docs/api/receive-personal-access-tokens-from-o-auth-2) | `/api/v1/database/oauth2/` | -| `GET` | [Get related fields data (database-related-column-name)](/developer-docs/api/get-related-fields-data-database-related-column-name) | `/api/v1/database/related/{column_name}` | -| `POST` | [Test a database connection](/developer-docs/api/test-a-database-connection) | `/api/v1/database/test_connection/` | -| `POST` | [Upload a file and returns file metadata](/developer-docs/api/upload-a-file-and-returns-file-metadata) | `/api/v1/database/upload_metadata/` | -| `POST` | [Validate database connection parameters](/developer-docs/api/validate-database-connection-parameters) | `/api/v1/database/validate_parameters/` | +| `GET` | [Get a list of databases](/developer-docs/6.1.0/api/get-a-list-of-databases) | `/api/v1/database/` | +| `POST` | [Create a new database](/developer-docs/6.1.0/api/create-a-new-database) | `/api/v1/database/` | +| `GET` | [Get metadata information about this API resource (database--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-database-info) | `/api/v1/database/_info` | +| `DELETE` | [Delete a database](/developer-docs/6.1.0/api/delete-a-database) | `/api/v1/database/{pk}` | +| `GET` | [Get a database](/developer-docs/6.1.0/api/get-a-database) | `/api/v1/database/{pk}` | +| `PUT` | [Change a database](/developer-docs/6.1.0/api/change-a-database) | `/api/v1/database/{pk}` | +| `GET` | [Get all catalogs from a database](/developer-docs/6.1.0/api/get-all-catalogs-from-a-database) | `/api/v1/database/{pk}/catalogs/` | +| `GET` | [Get a database connection info](/developer-docs/6.1.0/api/get-a-database-connection-info) | `/api/v1/database/{pk}/connection` | +| `GET` | [Get function names supported by a database](/developer-docs/6.1.0/api/get-function-names-supported-by-a-database) | `/api/v1/database/{pk}/function_names/` | +| `GET` | [Get charts and dashboards count associated to a database](/developer-docs/6.1.0/api/get-charts-and-dashboards-count-associated-to-a-database) | `/api/v1/database/{pk}/related_objects/` | +| `GET` | [The list of the database schemas where to upload information](/developer-docs/6.1.0/api/the-list-of-the-database-schemas-where-to-upload-information) | `/api/v1/database/{pk}/schemas_access_for_file_upload/` | +| `GET` | [Get all schemas from a database](/developer-docs/6.1.0/api/get-all-schemas-from-a-database) | `/api/v1/database/{pk}/schemas/` | +| `GET` | [Get database select star for table (database-pk-select-star-table-name)](/developer-docs/6.1.0/api/get-database-select-star-for-table-database-pk-select-star-table-name) | `/api/v1/database/{pk}/select_star/{table_name}/` | +| `GET` | [Get database select star for table (database-pk-select-star-table-name-schema-name)](/developer-docs/6.1.0/api/get-database-select-star-for-table-database-pk-select-star-table-name-schema-name) | `/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/` | +| `POST` | [Re-sync all permissions for a database connection](/developer-docs/6.1.0/api/re-sync-all-permissions-for-a-database-connection) | `/api/v1/database/{pk}/sync_permissions/` | +| `GET` | [Get table extra metadata (database-pk-table-extra-table-name-schema-name)](/developer-docs/6.1.0/api/get-table-extra-metadata-database-pk-table-extra-table-name-schema-name) | `/api/v1/database/{pk}/table_extra/{table_name}/{schema_name}/` | +| `GET` | [Get table metadata](/developer-docs/6.1.0/api/get-table-metadata) | `/api/v1/database/{pk}/table_metadata/` | +| `GET` | [Get table extra metadata (database-pk-table-metadata-extra)](/developer-docs/6.1.0/api/get-table-extra-metadata-database-pk-table-metadata-extra) | `/api/v1/database/{pk}/table_metadata/extra/` | +| `GET` | [Get database table metadata](/developer-docs/6.1.0/api/get-database-table-metadata) | `/api/v1/database/{pk}/table/{table_name}/{schema_name}/` | +| `GET` | [Get a list of tables for given database](/developer-docs/6.1.0/api/get-a-list-of-tables-for-given-database) | `/api/v1/database/{pk}/tables/` | +| `POST` | [Upload a file to a database table](/developer-docs/6.1.0/api/upload-a-file-to-a-database-table) | `/api/v1/database/{pk}/upload/` | +| `POST` | [Validate arbitrary SQL](/developer-docs/6.1.0/api/validate-arbitrary-sql) | `/api/v1/database/{pk}/validate_sql/` | +| `GET` | [Get names of databases currently available](/developer-docs/6.1.0/api/get-names-of-databases-currently-available) | `/api/v1/database/available/` | +| `GET` | [Download database(s) and associated dataset(s) as a zip file](/developer-docs/6.1.0/api/download-database-s-and-associated-dataset-s-as-a-zip-file) | `/api/v1/database/export/` | +| `POST` | [Import database(s) with associated datasets](/developer-docs/6.1.0/api/import-database-s-with-associated-datasets) | `/api/v1/database/import/` | +| `GET` | [Receive personal access tokens from OAuth2](/developer-docs/6.1.0/api/receive-personal-access-tokens-from-o-auth-2) | `/api/v1/database/oauth2/` | +| `GET` | [Get related fields data (database-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-database-related-column-name) | `/api/v1/database/related/{column_name}` | +| `POST` | [Test a database connection](/developer-docs/6.1.0/api/test-a-database-connection) | `/api/v1/database/test_connection/` | +| `POST` | [Upload a file and returns file metadata](/developer-docs/6.1.0/api/upload-a-file-and-returns-file-metadata) | `/api/v1/database/upload_metadata/` | +| `POST` | [Validate database connection parameters](/developer-docs/6.1.0/api/validate-database-connection-parameters) | `/api/v1/database/validate_parameters/` | @@ -196,7 +196,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | -| `GET` | [Assemble Explore related information in a single endpoint](/developer-docs/api/assemble-explore-related-information-in-a-single-endpoint) | `/api/v1/explore/` | +| `GET` | [Assemble Explore related information in a single endpoint](/developer-docs/6.1.0/api/assemble-explore-related-information-in-a-single-endpoint) | `/api/v1/explore/` | @@ -205,13 +205,13 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | -| `GET` | [Get the bootstrap data for SqlLab page](/developer-docs/api/get-the-bootstrap-data-for-sql-lab-page) | `/api/v1/sqllab/` | -| `POST` | [Estimate the SQL query execution cost](/developer-docs/api/estimate-the-sql-query-execution-cost) | `/api/v1/sqllab/estimate/` | -| `POST` | [Execute a SQL query](/developer-docs/api/execute-a-sql-query) | `/api/v1/sqllab/execute/` | -| `POST` | [Export SQL query results to CSV with streaming](/developer-docs/api/export-sql-query-results-to-csv-with-streaming) | `/api/v1/sqllab/export_streaming/` | -| `GET` | [Export the SQL query results to a CSV](/developer-docs/api/export-the-sql-query-results-to-a-csv) | `/api/v1/sqllab/export/{client_id}/` | -| `POST` | [Format SQL code](/developer-docs/api/format-sql-code) | `/api/v1/sqllab/format_sql/` | -| `GET` | [Get the result of a SQL query execution](/developer-docs/api/get-the-result-of-a-sql-query-execution) | `/api/v1/sqllab/results/` | +| `GET` | [Get the bootstrap data for SqlLab page](/developer-docs/6.1.0/api/get-the-bootstrap-data-for-sql-lab-page) | `/api/v1/sqllab/` | +| `POST` | [Estimate the SQL query execution cost](/developer-docs/6.1.0/api/estimate-the-sql-query-execution-cost) | `/api/v1/sqllab/estimate/` | +| `POST` | [Execute a SQL query](/developer-docs/6.1.0/api/execute-a-sql-query) | `/api/v1/sqllab/execute/` | +| `POST` | [Export SQL query results to CSV with streaming](/developer-docs/6.1.0/api/export-sql-query-results-to-csv-with-streaming) | `/api/v1/sqllab/export_streaming/` | +| `GET` | [Export the SQL query results to a CSV](/developer-docs/6.1.0/api/export-the-sql-query-results-to-a-csv) | `/api/v1/sqllab/export/{client_id}/` | +| `POST` | [Format SQL code](/developer-docs/6.1.0/api/format-sql-code) | `/api/v1/sqllab/format_sql/` | +| `GET` | [Get the result of a SQL query execution](/developer-docs/6.1.0/api/get-the-result-of-a-sql-query-execution) | `/api/v1/sqllab/results/` | @@ -220,23 +220,23 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------- | -| `GET` | [Get a list of queries](/developer-docs/api/get-a-list-of-queries) | `/api/v1/query/` | -| `GET` | [Get query detail information](/developer-docs/api/get-query-detail-information) | `/api/v1/query/{pk}` | -| `GET` | [Get distinct values from field data (query-distinct-column-name)](/developer-docs/api/get-distinct-values-from-field-data-query-distinct-column-name) | `/api/v1/query/distinct/{column_name}` | -| `GET` | [Get related fields data (query-related-column-name)](/developer-docs/api/get-related-fields-data-query-related-column-name) | `/api/v1/query/related/{column_name}` | -| `POST` | [Manually stop a query with client_id](/developer-docs/api/manually-stop-a-query-with-client-id) | `/api/v1/query/stop` | -| `GET` | [Get a list of queries that changed after last_updated_ms](/developer-docs/api/get-a-list-of-queries-that-changed-after-last-updated-ms) | `/api/v1/query/updated_since` | -| `DELETE` | [Bulk delete saved queries](/developer-docs/api/bulk-delete-saved-queries) | `/api/v1/saved_query/` | -| `GET` | [Get a list of saved queries](/developer-docs/api/get-a-list-of-saved-queries) | `/api/v1/saved_query/` | -| `POST` | [Create a saved query](/developer-docs/api/create-a-saved-query) | `/api/v1/saved_query/` | -| `GET` | [Get metadata information about this API resource (saved-query--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-saved-query-info) | `/api/v1/saved_query/_info` | -| `DELETE` | [Delete a saved query](/developer-docs/api/delete-a-saved-query) | `/api/v1/saved_query/{pk}` | -| `GET` | [Get a saved query](/developer-docs/api/get-a-saved-query) | `/api/v1/saved_query/{pk}` | -| `PUT` | [Update a saved query](/developer-docs/api/update-a-saved-query) | `/api/v1/saved_query/{pk}` | -| `GET` | [Get distinct values from field data (saved-query-distinct-column-name)](/developer-docs/api/get-distinct-values-from-field-data-saved-query-distinct-column-name) | `/api/v1/saved_query/distinct/{column_name}` | -| `GET` | [Download multiple saved queries as YAML files](/developer-docs/api/download-multiple-saved-queries-as-yaml-files) | `/api/v1/saved_query/export/` | -| `POST` | [Import saved queries with associated databases](/developer-docs/api/import-saved-queries-with-associated-databases) | `/api/v1/saved_query/import/` | -| `GET` | [Get related fields data (saved-query-related-column-name)](/developer-docs/api/get-related-fields-data-saved-query-related-column-name) | `/api/v1/saved_query/related/{column_name}` | +| `GET` | [Get a list of queries](/developer-docs/6.1.0/api/get-a-list-of-queries) | `/api/v1/query/` | +| `GET` | [Get query detail information](/developer-docs/6.1.0/api/get-query-detail-information) | `/api/v1/query/{pk}` | +| `GET` | [Get distinct values from field data (query-distinct-column-name)](/developer-docs/6.1.0/api/get-distinct-values-from-field-data-query-distinct-column-name) | `/api/v1/query/distinct/{column_name}` | +| `GET` | [Get related fields data (query-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-query-related-column-name) | `/api/v1/query/related/{column_name}` | +| `POST` | [Manually stop a query with client_id](/developer-docs/6.1.0/api/manually-stop-a-query-with-client-id) | `/api/v1/query/stop` | +| `GET` | [Get a list of queries that changed after last_updated_ms](/developer-docs/6.1.0/api/get-a-list-of-queries-that-changed-after-last-updated-ms) | `/api/v1/query/updated_since` | +| `DELETE` | [Bulk delete saved queries](/developer-docs/6.1.0/api/bulk-delete-saved-queries) | `/api/v1/saved_query/` | +| `GET` | [Get a list of saved queries](/developer-docs/6.1.0/api/get-a-list-of-saved-queries) | `/api/v1/saved_query/` | +| `POST` | [Create a saved query](/developer-docs/6.1.0/api/create-a-saved-query) | `/api/v1/saved_query/` | +| `GET` | [Get metadata information about this API resource (saved-query--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-saved-query-info) | `/api/v1/saved_query/_info` | +| `DELETE` | [Delete a saved query](/developer-docs/6.1.0/api/delete-a-saved-query) | `/api/v1/saved_query/{pk}` | +| `GET` | [Get a saved query](/developer-docs/6.1.0/api/get-a-saved-query) | `/api/v1/saved_query/{pk}` | +| `PUT` | [Update a saved query](/developer-docs/6.1.0/api/update-a-saved-query) | `/api/v1/saved_query/{pk}` | +| `GET` | [Get distinct values from field data (saved-query-distinct-column-name)](/developer-docs/6.1.0/api/get-distinct-values-from-field-data-saved-query-distinct-column-name) | `/api/v1/saved_query/distinct/{column_name}` | +| `GET` | [Download multiple saved queries as YAML files](/developer-docs/6.1.0/api/download-multiple-saved-queries-as-yaml-files) | `/api/v1/saved_query/export/` | +| `POST` | [Import saved queries with associated databases](/developer-docs/6.1.0/api/import-saved-queries-with-associated-databases) | `/api/v1/saved_query/import/` | +| `GET` | [Get related fields data (saved-query-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-saved-query-related-column-name) | `/api/v1/saved_query/related/{column_name}` | @@ -245,8 +245,8 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `GET` | [Get possible values for a datasource column](/developer-docs/api/get-possible-values-for-a-datasource-column) | `/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/` | -| `POST` | [Validate a SQL expression against a datasource](/developer-docs/api/validate-a-sql-expression-against-a-datasource) | `/api/v1/datasource/{datasource_type}/{datasource_id}/validate_expression/` | +| `GET` | [Get possible values for a datasource column](/developer-docs/6.1.0/api/get-possible-values-for-a-datasource-column) | `/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/` | +| `POST` | [Validate a SQL expression against a datasource](/developer-docs/6.1.0/api/validate-a-sql-expression-against-a-datasource) | `/api/v1/datasource/{datasource_type}/{datasource_id}/validate_expression/` | @@ -255,8 +255,8 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | -| `GET` | [Return an AdvancedDataTypeResponse](/developer-docs/api/return-an-advanced-data-type-response) | `/api/v1/advanced_data_type/convert` | -| `GET` | [Return a list of available advanced data types](/developer-docs/api/return-a-list-of-available-advanced-data-types) | `/api/v1/advanced_data_type/types` | +| `GET` | [Return an AdvancedDataTypeResponse](/developer-docs/6.1.0/api/return-an-advanced-data-type-response) | `/api/v1/advanced_data_type/convert` | +| `GET` | [Return a list of available advanced data types](/developer-docs/6.1.0/api/return-a-list-of-available-advanced-data-types) | `/api/v1/advanced_data_type/types` | @@ -267,21 +267,21 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------- | -| `DELETE` | [Bulk delete tags](/developer-docs/api/bulk-delete-tags) | `/api/v1/tag/` | -| `GET` | [Get a list of tags](/developer-docs/api/get-a-list-of-tags) | `/api/v1/tag/` | -| `POST` | [Create a tag](/developer-docs/api/create-a-tag) | `/api/v1/tag/` | -| `GET` | [Get metadata information about tag API endpoints](/developer-docs/api/get-metadata-information-about-tag-api-endpoints) | `/api/v1/tag/_info` | -| `POST` | [Add tags to an object](/developer-docs/api/add-tags-to-an-object) | `/api/v1/tag/{object_type}/{object_id}/` | -| `DELETE` | [Delete a tagged object](/developer-docs/api/delete-a-tagged-object) | `/api/v1/tag/{object_type}/{object_id}/{tag}/` | -| `DELETE` | [Delete a tag](/developer-docs/api/delete-a-tag) | `/api/v1/tag/{pk}` | -| `GET` | [Get a tag detail information](/developer-docs/api/get-a-tag-detail-information) | `/api/v1/tag/{pk}` | -| `PUT` | [Update a tag](/developer-docs/api/update-a-tag) | `/api/v1/tag/{pk}` | -| `DELETE` | [Delete tag by pk favorites](/developer-docs/api/delete-tag-by-pk-favorites) | `/api/v1/tag/{pk}/favorites/` | -| `POST` | [Create tag by pk favorites](/developer-docs/api/create-tag-by-pk-favorites) | `/api/v1/tag/{pk}/favorites/` | -| `POST` | [Bulk create tags and tagged objects](/developer-docs/api/bulk-create-tags-and-tagged-objects) | `/api/v1/tag/bulk_create` | -| `GET` | [Get tag favorite status](/developer-docs/api/get-tag-favorite-status) | `/api/v1/tag/favorite_status/` | -| `GET` | [Get all objects associated with a tag](/developer-docs/api/get-all-objects-associated-with-a-tag) | `/api/v1/tag/get_objects/` | -| `GET` | [Get related fields data (tag-related-column-name)](/developer-docs/api/get-related-fields-data-tag-related-column-name) | `/api/v1/tag/related/{column_name}` | +| `DELETE` | [Bulk delete tags](/developer-docs/6.1.0/api/bulk-delete-tags) | `/api/v1/tag/` | +| `GET` | [Get a list of tags](/developer-docs/6.1.0/api/get-a-list-of-tags) | `/api/v1/tag/` | +| `POST` | [Create a tag](/developer-docs/6.1.0/api/create-a-tag) | `/api/v1/tag/` | +| `GET` | [Get metadata information about tag API endpoints](/developer-docs/6.1.0/api/get-metadata-information-about-tag-api-endpoints) | `/api/v1/tag/_info` | +| `POST` | [Add tags to an object](/developer-docs/6.1.0/api/add-tags-to-an-object) | `/api/v1/tag/{object_type}/{object_id}/` | +| `DELETE` | [Delete a tagged object](/developer-docs/6.1.0/api/delete-a-tagged-object) | `/api/v1/tag/{object_type}/{object_id}/{tag}/` | +| `DELETE` | [Delete a tag](/developer-docs/6.1.0/api/delete-a-tag) | `/api/v1/tag/{pk}` | +| `GET` | [Get a tag detail information](/developer-docs/6.1.0/api/get-a-tag-detail-information) | `/api/v1/tag/{pk}` | +| `PUT` | [Update a tag](/developer-docs/6.1.0/api/update-a-tag) | `/api/v1/tag/{pk}` | +| `DELETE` | [Delete tag by pk favorites](/developer-docs/6.1.0/api/delete-tag-by-pk-favorites) | `/api/v1/tag/{pk}/favorites/` | +| `POST` | [Create tag by pk favorites](/developer-docs/6.1.0/api/create-tag-by-pk-favorites) | `/api/v1/tag/{pk}/favorites/` | +| `POST` | [Bulk create tags and tagged objects](/developer-docs/6.1.0/api/bulk-create-tags-and-tagged-objects) | `/api/v1/tag/bulk_create` | +| `GET` | [Get tag favorite status](/developer-docs/6.1.0/api/get-tag-favorite-status) | `/api/v1/tag/favorite_status/` | +| `GET` | [Get all objects associated with a tag](/developer-docs/6.1.0/api/get-all-objects-associated-with-a-tag) | `/api/v1/tag/get_objects/` | +| `GET` | [Get related fields data (tag-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-tag-related-column-name) | `/api/v1/tag/related/{column_name}` | @@ -290,20 +290,20 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------- | -| `DELETE` | [Delete multiple annotation layers in a bulk operation](/developer-docs/api/delete-multiple-annotation-layers-in-a-bulk-operation) | `/api/v1/annotation_layer/` | -| `GET` | [Get a list of annotation layers (annotation-layer)](/developer-docs/api/get-a-list-of-annotation-layers-annotation-layer) | `/api/v1/annotation_layer/` | -| `POST` | [Create an annotation layer (annotation-layer)](/developer-docs/api/create-an-annotation-layer-annotation-layer) | `/api/v1/annotation_layer/` | -| `GET` | [Get metadata information about this API resource (annotation-layer--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-annotation-layer-info) | `/api/v1/annotation_layer/_info` | -| `DELETE` | [Delete annotation layer (annotation-layer-pk)](/developer-docs/api/delete-annotation-layer-annotation-layer-pk) | `/api/v1/annotation_layer/{pk}` | -| `GET` | [Get an annotation layer (annotation-layer-pk)](/developer-docs/api/get-an-annotation-layer-annotation-layer-pk) | `/api/v1/annotation_layer/{pk}` | -| `PUT` | [Update an annotation layer (annotation-layer-pk)](/developer-docs/api/update-an-annotation-layer-annotation-layer-pk) | `/api/v1/annotation_layer/{pk}` | -| `DELETE` | [Bulk delete annotation layers](/developer-docs/api/bulk-delete-annotation-layers) | `/api/v1/annotation_layer/{pk}/annotation/` | -| `GET` | [Get a list of annotation layers (annotation-layer-pk-annotation)](/developer-docs/api/get-a-list-of-annotation-layers-annotation-layer-pk-annotation) | `/api/v1/annotation_layer/{pk}/annotation/` | -| `POST` | [Create an annotation layer (annotation-layer-pk-annotation)](/developer-docs/api/create-an-annotation-layer-annotation-layer-pk-annotation) | `/api/v1/annotation_layer/{pk}/annotation/` | -| `DELETE` | [Delete annotation layer (annotation-layer-pk-annotation-annotation-id)](/developer-docs/api/delete-annotation-layer-annotation-layer-pk-annotation-annotation-id) | `/api/v1/annotation_layer/{pk}/annotation/{annotation_id}` | -| `GET` | [Get an annotation layer (annotation-layer-pk-annotation-annotation-id)](/developer-docs/api/get-an-annotation-layer-annotation-layer-pk-annotation-annotation-id) | `/api/v1/annotation_layer/{pk}/annotation/{annotation_id}` | -| `PUT` | [Update an annotation layer (annotation-layer-pk-annotation-annotation-id)](/developer-docs/api/update-an-annotation-layer-annotation-layer-pk-annotation-annotation-id) | `/api/v1/annotation_layer/{pk}/annotation/{annotation_id}` | -| `GET` | [Get related fields data (annotation-layer-related-column-name)](/developer-docs/api/get-related-fields-data-annotation-layer-related-column-name) | `/api/v1/annotation_layer/related/{column_name}` | +| `DELETE` | [Delete multiple annotation layers in a bulk operation](/developer-docs/6.1.0/api/delete-multiple-annotation-layers-in-a-bulk-operation) | `/api/v1/annotation_layer/` | +| `GET` | [Get a list of annotation layers (annotation-layer)](/developer-docs/6.1.0/api/get-a-list-of-annotation-layers-annotation-layer) | `/api/v1/annotation_layer/` | +| `POST` | [Create an annotation layer (annotation-layer)](/developer-docs/6.1.0/api/create-an-annotation-layer-annotation-layer) | `/api/v1/annotation_layer/` | +| `GET` | [Get metadata information about this API resource (annotation-layer--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-annotation-layer-info) | `/api/v1/annotation_layer/_info` | +| `DELETE` | [Delete annotation layer (annotation-layer-pk)](/developer-docs/6.1.0/api/delete-annotation-layer-annotation-layer-pk) | `/api/v1/annotation_layer/{pk}` | +| `GET` | [Get an annotation layer (annotation-layer-pk)](/developer-docs/6.1.0/api/get-an-annotation-layer-annotation-layer-pk) | `/api/v1/annotation_layer/{pk}` | +| `PUT` | [Update an annotation layer (annotation-layer-pk)](/developer-docs/6.1.0/api/update-an-annotation-layer-annotation-layer-pk) | `/api/v1/annotation_layer/{pk}` | +| `DELETE` | [Bulk delete annotation layers](/developer-docs/6.1.0/api/bulk-delete-annotation-layers) | `/api/v1/annotation_layer/{pk}/annotation/` | +| `GET` | [Get a list of annotation layers (annotation-layer-pk-annotation)](/developer-docs/6.1.0/api/get-a-list-of-annotation-layers-annotation-layer-pk-annotation) | `/api/v1/annotation_layer/{pk}/annotation/` | +| `POST` | [Create an annotation layer (annotation-layer-pk-annotation)](/developer-docs/6.1.0/api/create-an-annotation-layer-annotation-layer-pk-annotation) | `/api/v1/annotation_layer/{pk}/annotation/` | +| `DELETE` | [Delete annotation layer (annotation-layer-pk-annotation-annotation-id)](/developer-docs/6.1.0/api/delete-annotation-layer-annotation-layer-pk-annotation-annotation-id) | `/api/v1/annotation_layer/{pk}/annotation/{annotation_id}` | +| `GET` | [Get an annotation layer (annotation-layer-pk-annotation-annotation-id)](/developer-docs/6.1.0/api/get-an-annotation-layer-annotation-layer-pk-annotation-annotation-id) | `/api/v1/annotation_layer/{pk}/annotation/{annotation_id}` | +| `PUT` | [Update an annotation layer (annotation-layer-pk-annotation-annotation-id)](/developer-docs/6.1.0/api/update-an-annotation-layer-annotation-layer-pk-annotation-annotation-id) | `/api/v1/annotation_layer/{pk}/annotation/{annotation_id}` | +| `GET` | [Get related fields data (annotation-layer-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-annotation-layer-related-column-name) | `/api/v1/annotation_layer/related/{column_name}` | @@ -312,14 +312,14 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -| `DELETE` | [Bulk delete CSS templates](/developer-docs/api/bulk-delete-css-templates) | `/api/v1/css_template/` | -| `GET` | [Get a list of CSS templates](/developer-docs/api/get-a-list-of-css-templates) | `/api/v1/css_template/` | -| `POST` | [Create a CSS template](/developer-docs/api/create-a-css-template) | `/api/v1/css_template/` | -| `GET` | [Get metadata information about this API resource (css-template--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-css-template-info) | `/api/v1/css_template/_info` | -| `DELETE` | [Delete a CSS template](/developer-docs/api/delete-a-css-template) | `/api/v1/css_template/{pk}` | -| `GET` | [Get a CSS template](/developer-docs/api/get-a-css-template) | `/api/v1/css_template/{pk}` | -| `PUT` | [Update a CSS template](/developer-docs/api/update-a-css-template) | `/api/v1/css_template/{pk}` | -| `GET` | [Get related fields data (css-template-related-column-name)](/developer-docs/api/get-related-fields-data-css-template-related-column-name) | `/api/v1/css_template/related/{column_name}` | +| `DELETE` | [Bulk delete CSS templates](/developer-docs/6.1.0/api/bulk-delete-css-templates) | `/api/v1/css_template/` | +| `GET` | [Get a list of CSS templates](/developer-docs/6.1.0/api/get-a-list-of-css-templates) | `/api/v1/css_template/` | +| `POST` | [Create a CSS template](/developer-docs/6.1.0/api/create-a-css-template) | `/api/v1/css_template/` | +| `GET` | [Get metadata information about this API resource (css-template--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-css-template-info) | `/api/v1/css_template/_info` | +| `DELETE` | [Delete a CSS template](/developer-docs/6.1.0/api/delete-a-css-template) | `/api/v1/css_template/{pk}` | +| `GET` | [Get a CSS template](/developer-docs/6.1.0/api/get-a-css-template) | `/api/v1/css_template/{pk}` | +| `PUT` | [Update a CSS template](/developer-docs/6.1.0/api/update-a-css-template) | `/api/v1/css_template/{pk}` | +| `GET` | [Get related fields data (css-template-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-css-template-related-column-name) | `/api/v1/css_template/related/{column_name}` | @@ -330,8 +330,8 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ----------------------------------------------------------------------------------------------------- | ----------------------------------- | -| `POST` | [Create a new dashboard's permanent link](/developer-docs/api/create-a-new-dashboards-permanent-link) | `/api/v1/dashboard/{pk}/permalink` | -| `GET` | [Get dashboard's permanent link state](/developer-docs/api/get-dashboards-permanent-link-state) | `/api/v1/dashboard/permalink/{key}` | +| `POST` | [Create a new dashboard's permanent link](/developer-docs/6.1.0/api/create-a-new-dashboards-permanent-link) | `/api/v1/dashboard/{pk}/permalink` | +| `GET` | [Get dashboard's permanent link state](/developer-docs/6.1.0/api/get-dashboards-permanent-link-state) | `/api/v1/dashboard/permalink/{key}` | @@ -340,8 +340,8 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -| `POST` | [Create a new permanent link (explore-permalink)](/developer-docs/api/create-a-new-permanent-link-explore-permalink) | `/api/v1/explore/permalink` | -| `GET` | [Get chart's permanent link state](/developer-docs/api/get-charts-permanent-link-state) | `/api/v1/explore/permalink/{key}` | +| `POST` | [Create a new permanent link (explore-permalink)](/developer-docs/6.1.0/api/create-a-new-permanent-link-explore-permalink) | `/api/v1/explore/permalink` | +| `GET` | [Get chart's permanent link state](/developer-docs/6.1.0/api/get-charts-permanent-link-state) | `/api/v1/explore/permalink/{key}` | @@ -350,8 +350,8 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ------------------------------------------------------------------------------------------------------------------ | -------------------------------- | -| `POST` | [Create a new permanent link (sqllab-permalink)](/developer-docs/api/create-a-new-permanent-link-sqllab-permalink) | `/api/v1/sqllab/permalink` | -| `GET` | [Get permanent link state for SQLLab editor.](/developer-docs/api/get-permanent-link-state-for-sql-lab-editor) | `/api/v1/sqllab/permalink/{key}` | +| `POST` | [Create a new permanent link (sqllab-permalink)](/developer-docs/6.1.0/api/create-a-new-permanent-link-sqllab-permalink) | `/api/v1/sqllab/permalink` | +| `GET` | [Get permanent link state for SQLLab editor.](/developer-docs/6.1.0/api/get-permanent-link-state-for-sql-lab-editor) | `/api/v1/sqllab/permalink/{key}` | @@ -360,7 +360,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | -| `GET` | [Get a report schedule log (embedded-dashboard-uuid)](/developer-docs/api/get-a-report-schedule-log-embedded-dashboard-uuid) | `/api/v1/embedded_dashboard/{uuid}` | +| `GET` | [Get a report schedule log (embedded-dashboard-uuid)](/developer-docs/6.1.0/api/get-a-report-schedule-log-embedded-dashboard-uuid) | `/api/v1/embedded_dashboard/{uuid}` | @@ -369,10 +369,10 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------- | -| `POST` | [Create a dashboard's filter state](/developer-docs/api/create-a-dashboards-filter-state) | `/api/v1/dashboard/{pk}/filter_state` | -| `DELETE` | [Delete a dashboard's filter state value](/developer-docs/api/delete-a-dashboards-filter-state-value) | `/api/v1/dashboard/{pk}/filter_state/{key}` | -| `GET` | [Get a dashboard's filter state value](/developer-docs/api/get-a-dashboards-filter-state-value) | `/api/v1/dashboard/{pk}/filter_state/{key}` | -| `PUT` | [Update a dashboard's filter state value](/developer-docs/api/update-a-dashboards-filter-state-value) | `/api/v1/dashboard/{pk}/filter_state/{key}` | +| `POST` | [Create a dashboard's filter state](/developer-docs/6.1.0/api/create-a-dashboards-filter-state) | `/api/v1/dashboard/{pk}/filter_state` | +| `DELETE` | [Delete a dashboard's filter state value](/developer-docs/6.1.0/api/delete-a-dashboards-filter-state-value) | `/api/v1/dashboard/{pk}/filter_state/{key}` | +| `GET` | [Get a dashboard's filter state value](/developer-docs/6.1.0/api/get-a-dashboards-filter-state-value) | `/api/v1/dashboard/{pk}/filter_state/{key}` | +| `PUT` | [Update a dashboard's filter state value](/developer-docs/6.1.0/api/update-a-dashboards-filter-state-value) | `/api/v1/dashboard/{pk}/filter_state/{key}` | @@ -381,10 +381,10 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | -------------------------------------------------------------------------------- | --------------------------------- | -| `POST` | [Create a new form_data](/developer-docs/api/create-a-new-form-data) | `/api/v1/explore/form_data` | -| `DELETE` | [Delete a form_data](/developer-docs/api/delete-a-form-data) | `/api/v1/explore/form_data/{key}` | -| `GET` | [Get a form_data](/developer-docs/api/get-a-form-data) | `/api/v1/explore/form_data/{key}` | -| `PUT` | [Update an existing form_data](/developer-docs/api/update-an-existing-form-data) | `/api/v1/explore/form_data/{key}` | +| `POST` | [Create a new form_data](/developer-docs/6.1.0/api/create-a-new-form-data) | `/api/v1/explore/form_data` | +| `DELETE` | [Delete a form_data](/developer-docs/6.1.0/api/delete-a-form-data) | `/api/v1/explore/form_data/{key}` | +| `GET` | [Get a form_data](/developer-docs/6.1.0/api/get-a-form-data) | `/api/v1/explore/form_data/{key}` | +| `PUT` | [Update an existing form_data](/developer-docs/6.1.0/api/update-an-existing-form-data) | `/api/v1/explore/form_data/{key}` | @@ -395,17 +395,17 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | -| `DELETE` | [Bulk delete report schedules](/developer-docs/api/bulk-delete-report-schedules) | `/api/v1/report/` | -| `GET` | [Get a list of report schedules](/developer-docs/api/get-a-list-of-report-schedules) | `/api/v1/report/` | -| `POST` | [Create a report schedule](/developer-docs/api/create-a-report-schedule) | `/api/v1/report/` | -| `GET` | [Get metadata information about this API resource (report--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-report-info) | `/api/v1/report/_info` | -| `DELETE` | [Delete a report schedule](/developer-docs/api/delete-a-report-schedule) | `/api/v1/report/{pk}` | -| `GET` | [Get a report schedule](/developer-docs/api/get-a-report-schedule) | `/api/v1/report/{pk}` | -| `PUT` | [Update a report schedule](/developer-docs/api/update-a-report-schedule) | `/api/v1/report/{pk}` | -| `GET` | [Get a list of report schedule logs](/developer-docs/api/get-a-list-of-report-schedule-logs) | `/api/v1/report/{pk}/log/` | -| `GET` | [Get a report schedule log (report-pk-log-log-id)](/developer-docs/api/get-a-report-schedule-log-report-pk-log-log-id) | `/api/v1/report/{pk}/log/{log_id}` | -| `GET` | [Get related fields data (report-related-column-name)](/developer-docs/api/get-related-fields-data-report-related-column-name) | `/api/v1/report/related/{column_name}` | -| `GET` | [Get slack channels](/developer-docs/api/get-slack-channels) | `/api/v1/report/slack_channels/` | +| `DELETE` | [Bulk delete report schedules](/developer-docs/6.1.0/api/bulk-delete-report-schedules) | `/api/v1/report/` | +| `GET` | [Get a list of report schedules](/developer-docs/6.1.0/api/get-a-list-of-report-schedules) | `/api/v1/report/` | +| `POST` | [Create a report schedule](/developer-docs/6.1.0/api/create-a-report-schedule) | `/api/v1/report/` | +| `GET` | [Get metadata information about this API resource (report--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-report-info) | `/api/v1/report/_info` | +| `DELETE` | [Delete a report schedule](/developer-docs/6.1.0/api/delete-a-report-schedule) | `/api/v1/report/{pk}` | +| `GET` | [Get a report schedule](/developer-docs/6.1.0/api/get-a-report-schedule) | `/api/v1/report/{pk}` | +| `PUT` | [Update a report schedule](/developer-docs/6.1.0/api/update-a-report-schedule) | `/api/v1/report/{pk}` | +| `GET` | [Get a list of report schedule logs](/developer-docs/6.1.0/api/get-a-list-of-report-schedule-logs) | `/api/v1/report/{pk}/log/` | +| `GET` | [Get a report schedule log (report-pk-log-log-id)](/developer-docs/6.1.0/api/get-a-report-schedule-log-report-pk-log-log-id) | `/api/v1/report/{pk}/log/{log_id}` | +| `GET` | [Get related fields data (report-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-report-related-column-name) | `/api/v1/report/related/{column_name}` | +| `GET` | [Get slack channels](/developer-docs/6.1.0/api/get-slack-channels) | `/api/v1/report/slack_channels/` | @@ -416,17 +416,17 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | -| `GET` | [Get security roles](/developer-docs/api/get-security-roles) | `/api/v1/security/roles/` | -| `POST` | [Create security roles](/developer-docs/api/create-security-roles) | `/api/v1/security/roles/` | -| `GET` | [Get security roles info](/developer-docs/api/get-security-roles-info) | `/api/v1/security/roles/_info` | -| `DELETE` | [Delete security roles by pk](/developer-docs/api/delete-security-roles-by-pk) | `/api/v1/security/roles/{pk}` | -| `GET` | [Get security roles by pk](/developer-docs/api/get-security-roles-by-pk) | `/api/v1/security/roles/{pk}` | -| `PUT` | [Update security roles by pk](/developer-docs/api/update-security-roles-by-pk) | `/api/v1/security/roles/{pk}` | -| `PUT` | [Update security roles by role_id groups](/developer-docs/api/update-security-roles-by-role-id-groups) | `/api/v1/security/roles/{role_id}/groups` | -| `POST` | [Create security roles by role_id permissions](/developer-docs/api/create-security-roles-by-role-id-permissions) | `/api/v1/security/roles/{role_id}/permissions` | -| `GET` | [Get security roles by role_id permissions](/developer-docs/api/get-security-roles-by-role-id-permissions) | `/api/v1/security/roles/{role_id}/permissions/` | -| `PUT` | [Update security roles by role_id users](/developer-docs/api/update-security-roles-by-role-id-users) | `/api/v1/security/roles/{role_id}/users` | -| `GET` | [List roles](/developer-docs/api/list-roles) | `/api/v1/security/roles/search/` | +| `GET` | [Get security roles](/developer-docs/6.1.0/api/get-security-roles) | `/api/v1/security/roles/` | +| `POST` | [Create security roles](/developer-docs/6.1.0/api/create-security-roles) | `/api/v1/security/roles/` | +| `GET` | [Get security roles info](/developer-docs/6.1.0/api/get-security-roles-info) | `/api/v1/security/roles/_info` | +| `DELETE` | [Delete security roles by pk](/developer-docs/6.1.0/api/delete-security-roles-by-pk) | `/api/v1/security/roles/{pk}` | +| `GET` | [Get security roles by pk](/developer-docs/6.1.0/api/get-security-roles-by-pk) | `/api/v1/security/roles/{pk}` | +| `PUT` | [Update security roles by pk](/developer-docs/6.1.0/api/update-security-roles-by-pk) | `/api/v1/security/roles/{pk}` | +| `PUT` | [Update security roles by role_id groups](/developer-docs/6.1.0/api/update-security-roles-by-role-id-groups) | `/api/v1/security/roles/{role_id}/groups` | +| `POST` | [Create security roles by role_id permissions](/developer-docs/6.1.0/api/create-security-roles-by-role-id-permissions) | `/api/v1/security/roles/{role_id}/permissions` | +| `GET` | [Get security roles by role_id permissions](/developer-docs/6.1.0/api/get-security-roles-by-role-id-permissions) | `/api/v1/security/roles/{role_id}/permissions/` | +| `PUT` | [Update security roles by role_id users](/developer-docs/6.1.0/api/update-security-roles-by-role-id-users) | `/api/v1/security/roles/{role_id}/users` | +| `GET` | [List roles](/developer-docs/6.1.0/api/list-roles) | `/api/v1/security/roles/search/` | @@ -435,12 +435,12 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ------------------------------------------------------------------------------ | ------------------------------ | -| `GET` | [Get security users](/developer-docs/api/get-security-users) | `/api/v1/security/users/` | -| `POST` | [Create security users](/developer-docs/api/create-security-users) | `/api/v1/security/users/` | -| `GET` | [Get security users info](/developer-docs/api/get-security-users-info) | `/api/v1/security/users/_info` | -| `DELETE` | [Delete security users by pk](/developer-docs/api/delete-security-users-by-pk) | `/api/v1/security/users/{pk}` | -| `GET` | [Get security users by pk](/developer-docs/api/get-security-users-by-pk) | `/api/v1/security/users/{pk}` | -| `PUT` | [Update security users by pk](/developer-docs/api/update-security-users-by-pk) | `/api/v1/security/users/{pk}` | +| `GET` | [Get security users](/developer-docs/6.1.0/api/get-security-users) | `/api/v1/security/users/` | +| `POST` | [Create security users](/developer-docs/6.1.0/api/create-security-users) | `/api/v1/security/users/` | +| `GET` | [Get security users info](/developer-docs/6.1.0/api/get-security-users-info) | `/api/v1/security/users/_info` | +| `DELETE` | [Delete security users by pk](/developer-docs/6.1.0/api/delete-security-users-by-pk) | `/api/v1/security/users/{pk}` | +| `GET` | [Get security users by pk](/developer-docs/6.1.0/api/get-security-users-by-pk) | `/api/v1/security/users/{pk}` | +| `PUT` | [Update security users by pk](/developer-docs/6.1.0/api/update-security-users-by-pk) | `/api/v1/security/users/{pk}` | @@ -449,9 +449,9 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ------------------------------------------------------------------------------------ | ------------------------------------ | -| `GET` | [Get security permissions](/developer-docs/api/get-security-permissions) | `/api/v1/security/permissions/` | -| `GET` | [Get security permissions info](/developer-docs/api/get-security-permissions-info) | `/api/v1/security/permissions/_info` | -| `GET` | [Get security permissions by pk](/developer-docs/api/get-security-permissions-by-pk) | `/api/v1/security/permissions/{pk}` | +| `GET` | [Get security permissions](/developer-docs/6.1.0/api/get-security-permissions) | `/api/v1/security/permissions/` | +| `GET` | [Get security permissions info](/developer-docs/6.1.0/api/get-security-permissions-info) | `/api/v1/security/permissions/_info` | +| `GET` | [Get security permissions by pk](/developer-docs/6.1.0/api/get-security-permissions-by-pk) | `/api/v1/security/permissions/{pk}` | @@ -460,12 +460,12 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | -------------------------------------------------------------------------------------- | ---------------------------------- | -| `GET` | [Get security resources](/developer-docs/api/get-security-resources) | `/api/v1/security/resources/` | -| `POST` | [Create security resources](/developer-docs/api/create-security-resources) | `/api/v1/security/resources/` | -| `GET` | [Get security resources info](/developer-docs/api/get-security-resources-info) | `/api/v1/security/resources/_info` | -| `DELETE` | [Delete security resources by pk](/developer-docs/api/delete-security-resources-by-pk) | `/api/v1/security/resources/{pk}` | -| `GET` | [Get security resources by pk](/developer-docs/api/get-security-resources-by-pk) | `/api/v1/security/resources/{pk}` | -| `PUT` | [Update security resources by pk](/developer-docs/api/update-security-resources-by-pk) | `/api/v1/security/resources/{pk}` | +| `GET` | [Get security resources](/developer-docs/6.1.0/api/get-security-resources) | `/api/v1/security/resources/` | +| `POST` | [Create security resources](/developer-docs/6.1.0/api/create-security-resources) | `/api/v1/security/resources/` | +| `GET` | [Get security resources info](/developer-docs/6.1.0/api/get-security-resources-info) | `/api/v1/security/resources/_info` | +| `DELETE` | [Delete security resources by pk](/developer-docs/6.1.0/api/delete-security-resources-by-pk) | `/api/v1/security/resources/{pk}` | +| `GET` | [Get security resources by pk](/developer-docs/6.1.0/api/get-security-resources-by-pk) | `/api/v1/security/resources/{pk}` | +| `PUT` | [Update security resources by pk](/developer-docs/6.1.0/api/update-security-resources-by-pk) | `/api/v1/security/resources/{pk}` | @@ -474,12 +474,12 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| `GET` | [Get security permissions resources](/developer-docs/api/get-security-permissions-resources) | `/api/v1/security/permissions-resources/` | -| `POST` | [Create security permissions resources](/developer-docs/api/create-security-permissions-resources) | `/api/v1/security/permissions-resources/` | -| `GET` | [Get security permissions resources info](/developer-docs/api/get-security-permissions-resources-info) | `/api/v1/security/permissions-resources/_info` | -| `DELETE` | [Delete security permissions resources by pk](/developer-docs/api/delete-security-permissions-resources-by-pk) | `/api/v1/security/permissions-resources/{pk}` | -| `GET` | [Get security permissions resources by pk](/developer-docs/api/get-security-permissions-resources-by-pk) | `/api/v1/security/permissions-resources/{pk}` | -| `PUT` | [Update security permissions resources by pk](/developer-docs/api/update-security-permissions-resources-by-pk) | `/api/v1/security/permissions-resources/{pk}` | +| `GET` | [Get security permissions resources](/developer-docs/6.1.0/api/get-security-permissions-resources) | `/api/v1/security/permissions-resources/` | +| `POST` | [Create security permissions resources](/developer-docs/6.1.0/api/create-security-permissions-resources) | `/api/v1/security/permissions-resources/` | +| `GET` | [Get security permissions resources info](/developer-docs/6.1.0/api/get-security-permissions-resources-info) | `/api/v1/security/permissions-resources/_info` | +| `DELETE` | [Delete security permissions resources by pk](/developer-docs/6.1.0/api/delete-security-permissions-resources-by-pk) | `/api/v1/security/permissions-resources/{pk}` | +| `GET` | [Get security permissions resources by pk](/developer-docs/6.1.0/api/get-security-permissions-resources-by-pk) | `/api/v1/security/permissions-resources/{pk}` | +| `PUT` | [Update security permissions resources by pk](/developer-docs/6.1.0/api/update-security-permissions-resources-by-pk) | `/api/v1/security/permissions-resources/{pk}` | @@ -488,14 +488,14 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | -| `DELETE` | [Bulk delete RLS rules](/developer-docs/api/bulk-delete-rls-rules) | `/api/v1/rowlevelsecurity/` | -| `GET` | [Get a list of RLS](/developer-docs/api/get-a-list-of-rls) | `/api/v1/rowlevelsecurity/` | -| `POST` | [Create a new RLS rule](/developer-docs/api/create-a-new-rls-rule) | `/api/v1/rowlevelsecurity/` | -| `GET` | [Get metadata information about this API resource (rowlevelsecurity--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-rowlevelsecurity-info) | `/api/v1/rowlevelsecurity/_info` | -| `DELETE` | [Delete an RLS](/developer-docs/api/delete-an-rls) | `/api/v1/rowlevelsecurity/{pk}` | -| `GET` | [Get an RLS](/developer-docs/api/get-an-rls) | `/api/v1/rowlevelsecurity/{pk}` | -| `PUT` | [Update an RLS rule](/developer-docs/api/update-an-rls-rule) | `/api/v1/rowlevelsecurity/{pk}` | -| `GET` | [Get related fields data (rowlevelsecurity-related-column-name)](/developer-docs/api/get-related-fields-data-rowlevelsecurity-related-column-name) | `/api/v1/rowlevelsecurity/related/{column_name}` | +| `DELETE` | [Bulk delete RLS rules](/developer-docs/6.1.0/api/bulk-delete-rls-rules) | `/api/v1/rowlevelsecurity/` | +| `GET` | [Get a list of RLS](/developer-docs/6.1.0/api/get-a-list-of-rls) | `/api/v1/rowlevelsecurity/` | +| `POST` | [Create a new RLS rule](/developer-docs/6.1.0/api/create-a-new-rls-rule) | `/api/v1/rowlevelsecurity/` | +| `GET` | [Get metadata information about this API resource (rowlevelsecurity--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-rowlevelsecurity-info) | `/api/v1/rowlevelsecurity/_info` | +| `DELETE` | [Delete an RLS](/developer-docs/6.1.0/api/delete-an-rls) | `/api/v1/rowlevelsecurity/{pk}` | +| `GET` | [Get an RLS](/developer-docs/6.1.0/api/get-an-rls) | `/api/v1/rowlevelsecurity/{pk}` | +| `PUT` | [Update an RLS rule](/developer-docs/6.1.0/api/update-an-rls-rule) | `/api/v1/rowlevelsecurity/{pk}` | +| `GET` | [Get related fields data (rowlevelsecurity-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-rowlevelsecurity-related-column-name) | `/api/v1/rowlevelsecurity/related/{column_name}` | @@ -506,8 +506,8 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------- | ------------------------ | -| `GET` | [Export all assets](/developer-docs/api/export-all-assets) | `/api/v1/assets/export/` | -| `POST` | [Import multiple assets](/developer-docs/api/import-multiple-assets) | `/api/v1/assets/import/` | +| `GET` | [Export all assets](/developer-docs/6.1.0/api/export-all-assets) | `/api/v1/assets/export/` | +| `POST` | [Import multiple assets](/developer-docs/6.1.0/api/import-multiple-assets) | `/api/v1/assets/import/` | @@ -516,7 +516,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | -| `POST` | [Invalidate cache records and remove the database records](/developer-docs/api/invalidate-cache-records-and-remove-the-database-records) | `/api/v1/cachekey/invalidate` | +| `POST` | [Invalidate cache records and remove the database records](/developer-docs/6.1.0/api/invalidate-cache-records-and-remove-the-database-records) | `/api/v1/cachekey/invalidate` | @@ -525,10 +525,10 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------------------------------- | ------------------------------ | -| `GET` | [Get a list of logs](/developer-docs/api/get-a-list-of-logs) | `/api/v1/log/` | -| `POST` | [Create log](/developer-docs/api/create-log) | `/api/v1/log/` | -| `GET` | [Get a log detail information](/developer-docs/api/get-a-log-detail-information) | `/api/v1/log/{pk}` | -| `GET` | [Get recent activity data for a user](/developer-docs/api/get-recent-activity-data-for-a-user) | `/api/v1/log/recent_activity/` | +| `GET` | [Get a list of logs](/developer-docs/6.1.0/api/get-a-list-of-logs) | `/api/v1/log/` | +| `POST` | [Create log](/developer-docs/6.1.0/api/create-log) | `/api/v1/log/` | +| `GET` | [Get a log detail information](/developer-docs/6.1.0/api/get-a-log-detail-information) | `/api/v1/log/{pk}` | +| `GET` | [Get recent activity data for a user](/developer-docs/6.1.0/api/get-recent-activity-data-for-a-user) | `/api/v1/log/recent_activity/` | @@ -539,9 +539,9 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------- | ------------------- | -| `GET` | [Get the user object](/developer-docs/api/get-the-user-object) | `/api/v1/me/` | -| `PUT` | [Update the current user](/developer-docs/api/update-the-current-user) | `/api/v1/me/` | -| `GET` | [Get the user roles](/developer-docs/api/get-the-user-roles) | `/api/v1/me/roles/` | +| `GET` | [Get the user object](/developer-docs/6.1.0/api/get-the-user-object) | `/api/v1/me/` | +| `PUT` | [Update the current user](/developer-docs/6.1.0/api/update-the-current-user) | `/api/v1/me/` | +| `GET` | [Get the user roles](/developer-docs/6.1.0/api/get-the-user-roles) | `/api/v1/me/roles/` | @@ -550,7 +550,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | -------------------------------------------------------------- | ----------------------------------- | -| `GET` | [Get the user avatar](/developer-docs/api/get-the-user-avatar) | `/api/v1/user/{user_id}/avatar.png` | +| `GET` | [Get the user avatar](/developer-docs/6.1.0/api/get-the-user-avatar) | `/api/v1/user/{user_id}/avatar.png` | @@ -559,7 +559,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------- | --------------- | -| `GET` | [Get menu](/developer-docs/api/get-menu) | `/api/v1/menu/` | +| `GET` | [Get menu](/developer-docs/6.1.0/api/get-menu) | `/api/v1/menu/` | @@ -568,7 +568,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | -------------------------------------------------------------------------- | ---------------------------- | -| `GET` | [Get all available domains](/developer-docs/api/get-all-available-domains) | `/api/v1/available_domains/` | +| `GET` | [Get all available domains](/developer-docs/6.1.0/api/get-all-available-domains) | `/api/v1/available_domains/` | @@ -577,7 +577,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------------------------------- | ---------------------- | -| `GET` | [Read off of the Redis events stream](/developer-docs/api/read-off-of-the-redis-events-stream) | `/api/v1/async_event/` | +| `GET` | [Read off of the Redis events stream](/developer-docs/6.1.0/api/read-off-of-the-redis-events-stream) | `/api/v1/async_event/` | @@ -586,7 +586,7 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | ------ | ---------------------------------------------------------------------------- | ------------------------- | -| `GET` | [Get api by version openapi](/developer-docs/api/get-api-by-version-openapi) | `/api/{version}/_openapi` | +| `GET` | [Get api by version openapi](/developer-docs/6.1.0/api/get-api-by-version-openapi) | `/api/{version}/_openapi` | @@ -597,12 +597,12 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | -------------------------------------------------------------------------------- | ------------------------------- | -| `GET` | [Get security groups](/developer-docs/api/get-security-groups) | `/api/v1/security/groups/` | -| `POST` | [Create security groups](/developer-docs/api/create-security-groups) | `/api/v1/security/groups/` | -| `GET` | [Get security groups info](/developer-docs/api/get-security-groups-info) | `/api/v1/security/groups/_info` | -| `DELETE` | [Delete security groups by pk](/developer-docs/api/delete-security-groups-by-pk) | `/api/v1/security/groups/{pk}` | -| `GET` | [Get security groups by pk](/developer-docs/api/get-security-groups-by-pk) | `/api/v1/security/groups/{pk}` | -| `PUT` | [Update security groups by pk](/developer-docs/api/update-security-groups-by-pk) | `/api/v1/security/groups/{pk}` | +| `GET` | [Get security groups](/developer-docs/6.1.0/api/get-security-groups) | `/api/v1/security/groups/` | +| `POST` | [Create security groups](/developer-docs/6.1.0/api/create-security-groups) | `/api/v1/security/groups/` | +| `GET` | [Get security groups info](/developer-docs/6.1.0/api/get-security-groups-info) | `/api/v1/security/groups/_info` | +| `DELETE` | [Delete security groups by pk](/developer-docs/6.1.0/api/delete-security-groups-by-pk) | `/api/v1/security/groups/{pk}` | +| `GET` | [Get security groups by pk](/developer-docs/6.1.0/api/get-security-groups-by-pk) | `/api/v1/security/groups/{pk}` | +| `PUT` | [Update security groups by pk](/developer-docs/6.1.0/api/update-security-groups-by-pk) | `/api/v1/security/groups/{pk}` | @@ -611,20 +611,20 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -| `DELETE` | [Bulk delete themes](/developer-docs/api/bulk-delete-themes) | `/api/v1/theme/` | -| `GET` | [Get a list of themes](/developer-docs/api/get-a-list-of-themes) | `/api/v1/theme/` | -| `POST` | [Create a theme](/developer-docs/api/create-a-theme) | `/api/v1/theme/` | -| `GET` | [Get metadata information about this API resource (theme--info)](/developer-docs/api/get-metadata-information-about-this-api-resource-theme-info) | `/api/v1/theme/_info` | -| `DELETE` | [Delete a theme](/developer-docs/api/delete-a-theme) | `/api/v1/theme/{pk}` | -| `GET` | [Get a theme](/developer-docs/api/get-a-theme) | `/api/v1/theme/{pk}` | -| `PUT` | [Update a theme](/developer-docs/api/update-a-theme) | `/api/v1/theme/{pk}` | -| `PUT` | [Set a theme as the system dark theme](/developer-docs/api/set-a-theme-as-the-system-dark-theme) | `/api/v1/theme/{pk}/set_system_dark` | -| `PUT` | [Set a theme as the system default theme](/developer-docs/api/set-a-theme-as-the-system-default-theme) | `/api/v1/theme/{pk}/set_system_default` | -| `GET` | [Download multiple themes as YAML files](/developer-docs/api/download-multiple-themes-as-yaml-files) | `/api/v1/theme/export/` | -| `POST` | [Import themes from a ZIP file](/developer-docs/api/import-themes-from-a-zip-file) | `/api/v1/theme/import/` | -| `GET` | [Get related fields data (theme-related-column-name)](/developer-docs/api/get-related-fields-data-theme-related-column-name) | `/api/v1/theme/related/{column_name}` | -| `DELETE` | [Clear the system dark theme](/developer-docs/api/clear-the-system-dark-theme) | `/api/v1/theme/unset_system_dark` | -| `DELETE` | [Clear the system default theme](/developer-docs/api/clear-the-system-default-theme) | `/api/v1/theme/unset_system_default` | +| `DELETE` | [Bulk delete themes](/developer-docs/6.1.0/api/bulk-delete-themes) | `/api/v1/theme/` | +| `GET` | [Get a list of themes](/developer-docs/6.1.0/api/get-a-list-of-themes) | `/api/v1/theme/` | +| `POST` | [Create a theme](/developer-docs/6.1.0/api/create-a-theme) | `/api/v1/theme/` | +| `GET` | [Get metadata information about this API resource (theme--info)](/developer-docs/6.1.0/api/get-metadata-information-about-this-api-resource-theme-info) | `/api/v1/theme/_info` | +| `DELETE` | [Delete a theme](/developer-docs/6.1.0/api/delete-a-theme) | `/api/v1/theme/{pk}` | +| `GET` | [Get a theme](/developer-docs/6.1.0/api/get-a-theme) | `/api/v1/theme/{pk}` | +| `PUT` | [Update a theme](/developer-docs/6.1.0/api/update-a-theme) | `/api/v1/theme/{pk}` | +| `PUT` | [Set a theme as the system dark theme](/developer-docs/6.1.0/api/set-a-theme-as-the-system-dark-theme) | `/api/v1/theme/{pk}/set_system_dark` | +| `PUT` | [Set a theme as the system default theme](/developer-docs/6.1.0/api/set-a-theme-as-the-system-default-theme) | `/api/v1/theme/{pk}/set_system_default` | +| `GET` | [Download multiple themes as YAML files](/developer-docs/6.1.0/api/download-multiple-themes-as-yaml-files) | `/api/v1/theme/export/` | +| `POST` | [Import themes from a ZIP file](/developer-docs/6.1.0/api/import-themes-from-a-zip-file) | `/api/v1/theme/import/` | +| `GET` | [Get related fields data (theme-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-theme-related-column-name) | `/api/v1/theme/related/{column_name}` | +| `DELETE` | [Clear the system dark theme](/developer-docs/6.1.0/api/clear-the-system-dark-theme) | `/api/v1/theme/unset_system_dark` | +| `DELETE` | [Clear the system default theme](/developer-docs/6.1.0/api/clear-the-system-default-theme) | `/api/v1/theme/unset_system_default` | @@ -633,14 +633,14 @@ curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ | Method | Endpoint | Description | | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | -| `GET` | [Get security user registrations](/developer-docs/api/get-security-user-registrations) | `/api/v1/security/user_registrations/` | -| `POST` | [Create security user registrations](/developer-docs/api/create-security-user-registrations) | `/api/v1/security/user_registrations/` | -| `GET` | [Get security user registrations info](/developer-docs/api/get-security-user-registrations-info) | `/api/v1/security/user_registrations/_info` | -| `DELETE` | [Delete security user registrations by pk](/developer-docs/api/delete-security-user-registrations-by-pk) | `/api/v1/security/user_registrations/{pk}` | -| `GET` | [Get security user registrations by pk](/developer-docs/api/get-security-user-registrations-by-pk) | `/api/v1/security/user_registrations/{pk}` | -| `PUT` | [Update security user registrations by pk](/developer-docs/api/update-security-user-registrations-by-pk) | `/api/v1/security/user_registrations/{pk}` | -| `GET` | [Get distinct values from field data (security-user-registrations-distinct-column-name)](/developer-docs/api/get-distinct-values-from-field-data-security-user-registrations-distinct-column-name) | `/api/v1/security/user_registrations/distinct/{column_name}` | -| `GET` | [Get related fields data (security-user-registrations-related-column-name)](/developer-docs/api/get-related-fields-data-security-user-registrations-related-column-name) | `/api/v1/security/user_registrations/related/{column_name}` | +| `GET` | [Get security user registrations](/developer-docs/6.1.0/api/get-security-user-registrations) | `/api/v1/security/user_registrations/` | +| `POST` | [Create security user registrations](/developer-docs/6.1.0/api/create-security-user-registrations) | `/api/v1/security/user_registrations/` | +| `GET` | [Get security user registrations info](/developer-docs/6.1.0/api/get-security-user-registrations-info) | `/api/v1/security/user_registrations/_info` | +| `DELETE` | [Delete security user registrations by pk](/developer-docs/6.1.0/api/delete-security-user-registrations-by-pk) | `/api/v1/security/user_registrations/{pk}` | +| `GET` | [Get security user registrations by pk](/developer-docs/6.1.0/api/get-security-user-registrations-by-pk) | `/api/v1/security/user_registrations/{pk}` | +| `PUT` | [Update security user registrations by pk](/developer-docs/6.1.0/api/update-security-user-registrations-by-pk) | `/api/v1/security/user_registrations/{pk}` | +| `GET` | [Get distinct values from field data (security-user-registrations-distinct-column-name)](/developer-docs/6.1.0/api/get-distinct-values-from-field-data-security-user-registrations-distinct-column-name) | `/api/v1/security/user_registrations/distinct/{column_name}` | +| `GET` | [Get related fields data (security-user-registrations-related-column-name)](/developer-docs/6.1.0/api/get-related-fields-data-security-user-registrations-related-column-name) | `/api/v1/security/user_registrations/related/{column_name}` | diff --git a/docs/static/resources/openapi.json b/docs/static/resources/openapi.json index f3f29908b554..005f48d8cad3 100644 --- a/docs/static/resources/openapi.json +++ b/docs/static/resources/openapi.json @@ -11,9 +11,6 @@ } }, "type": "object" - }, - "example": { - "message": "Bad request: Invalid parameters provided" } } }, @@ -29,9 +26,6 @@ } }, "type": "object" - }, - "example": { - "message": "Unauthorized: Authentication required" } } }, @@ -47,9 +41,6 @@ } }, "type": "object" - }, - "example": { - "message": "Forbidden: You don't have permission to access this resource" } } }, @@ -65,9 +56,6 @@ } }, "type": "object" - }, - "example": { - "message": "Not found: The requested resource does not exist" } } }, @@ -144,7 +132,11 @@ "type": "object" }, "level": { - "enum": ["info", "warning", "error"], + "enum": [ + "info", + "warning", + "error" + ], "type": "string" }, "message": { @@ -175,9 +167,6 @@ } }, "type": "object" - }, - "example": { - "message": "Unprocessable entity: Validation error" } } }, @@ -193,9 +182,6 @@ } }, "type": "object" - }, - "example": { - "message": "Internal server error: An unexpected error occurred" } } }, @@ -203,6 +189,191 @@ } }, "schemas": { + "ActivityChangedBy": { + "properties": { + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "type": "string" + } + }, + "type": "object" + }, + "ActivityImpact": { + "properties": { + "charts": { + "description": "Number of sibling charts on the path entity affected by the same related-record change at this transaction.", + "type": "integer" + } + }, + "type": "object" + }, + "ActivityRecord": { + "properties": { + "action_kind": { + "description": "Transaction-level avenue that produced this record's batch: ``restore`` / ``import`` / ``clone``. ``null`` for ordinary saves. All records sharing a ``transaction_id`` share the same action_kind. The schema's third ``*_kind`` column (entity_kind / kind / action_kind), at transaction scope.", + "enum": [ + "clone", + "import", + "restore", + null + ], + "nullable": true, + "type": "string" + }, + "changed_by": { + "allOf": [ + { + "$ref": "#/components/schemas/ActivityChangedBy" + } + ], + "description": "User who produced the change, or ``null`` when the saving user no longer exists in ``ab_user``.", + "nullable": true + }, + "entity_deleted": { + "description": "True iff the source entity is hard-deleted (no live row by ``entity_id``). False for live and soft-deleted entities.", + "type": "boolean" + }, + "entity_deletion_state": { + "description": "Present when the source entity has non-null ``deleted_at`` Absent or ``null`` otherwise.", + "enum": [ + "soft_deleted", + null + ], + "nullable": true, + "type": "string" + }, + "entity_kind": { + "description": "User-facing kind of the source entity: one of ``\"dashboard\"`` / ``\"chart\"`` / ``\"dataset\"``.", + "enum": [ + "dashboard", + "chart", + "dataset" + ], + "type": "string" + }, + "entity_name": { + "description": "Name of the source entity *at the time of the change* \u2014 denormalized from the validity-strategy shadow row. Survives entity rename / delete.", + "type": "string" + }, + "entity_uuid": { + "description": "UUID of the source entity; ``null`` only when ``entity_deleted: true`` (the entity has been hard-deleted since the change was recorded).", + "nullable": true, + "type": "string" + }, + "first_tracked_save": { + "description": "True when this record's transaction is the entity's FIRST tracked save (first UPDATE after the retroactive baseline). Such transactions can carry dozens of params-normalization records for entities that predate versioning; clients use the marker to collapse them rather than render each delta as a user edit. Matched against the LIVE row's (id, uuid), so it is always false for hard-deleted entities (no live row) and for shadow rows predating the entity's current uuid.", + "type": "boolean" + }, + "from_value": { + "description": "Prior value; ``null`` = didn't exist.", + "nullable": true + }, + "impact": { + "allOf": [ + { + "$ref": "#/components/schemas/ActivityImpact" + } + ], + "description": "Optional dependent-count for ``source: \"related\"`` records \u2014 e.g., ``{\"charts\": 4}`` for a dataset edit that affected 4 charts on the path dashboard at the change's transaction. Absent for ``source: \"self\"`` records and for related records without dependents.", + "nullable": true + }, + "issued_at": { + "description": "UTC timestamp; primary ordering key (DESC).", + "format": "date-time", + "type": "string" + }, + "kind": { + "description": "Content category \u2014 what kind of thing changed. ``field`` is the fallback for scalar changes without a more specific category. Per-record.", + "enum": [ + "filter", + "metric", + "dimension", + "column", + "chart", + "row", + "tab", + "tabs", + "header", + "markdown", + "divider", + "time_range", + "color_palette", + "field", + "__meta__" + ], + "type": "string" + }, + "operation": { + "description": "Per-record verb: ``add`` / ``remove`` / ``move`` / ``edit``. Explicit instead of inferred from ``from_value`` / ``to_value`` null-tests. ``move`` only fires for layout records.", + "enum": [ + "add", + "remove", + "move", + "edit", + "update", + "announce" + ], + "type": "string" + }, + "path": { + "description": "Pure navigation address \u2014 no verb or kind embedded. Examples: ``['slice_name']``, ``['params', 'adhoc_filters', 'country']``, ``['CHART-x']`` for a layout add/remove/move, ``['HEADER-y', 'text']`` for a layout edit leaf. The verb lives in ``operation``, the element type in ``kind``.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "source": { + "description": "``\"self\"`` if ``(entity_kind, entity_id)`` matches the path entity; else ``\"related\"``. Drives the frontend's no-group-under-save rendering rule.", + "enum": [ + "self", + "related" + ], + "type": "string" + }, + "summary": { + "description": "Synthesized headline for ``source: \"related\"`` records \u2014 e.g., ``\"Dataset updated: Sales Transactions\"``. Empty string for ``source: \"self\"`` records, except ``__meta__`` self records (e.g. restore announcements), which carry their own headline.", + "type": "string" + }, + "to_value": { + "description": "New value; ``null`` = removed.", + "nullable": true + }, + "transaction_id": { + "description": "Stable secondary ordering key; never reused.", + "type": "integer" + }, + "version_uuid": { + "description": "Stable UUIDv5 identifier for the source version (``derive_version_uuid(entity_uuid, transaction_id)``). Identical to what ``/versions//`` would return for the same change.", + "type": "string" + } + }, + "type": "object" + }, + "ActivityResponse": { + "properties": { + "count": { + "description": "Total record count across all pages (the filtered + denormalized stream), not just the current page. When ``truncated`` is true this is a floor (the count within the fetched window), not the absolute total.", + "type": "integer" + }, + "result": { + "items": { + "$ref": "#/components/schemas/ActivityRecord" + }, + "type": "array" + }, + "truncated": { + "description": "True when the request hit the per-request fetch ceiling and older records exist beyond the returned window. Narrow the time range (``since``/``until``) to see them.", + "type": "boolean" + } + }, + "type": "object" + }, "AdvancedDataTypeSchema": { "properties": { "display_value": { @@ -232,7 +403,12 @@ "properties": { "annotationType": { "description": "Type of annotation layer", - "enum": ["FORMULA", "INTERVAL", "EVENT", "TIME_SERIES"], + "enum": [ + "FORMULA", + "INTERVAL", + "EVENT", + "TIME_SERIES" + ], "type": "string" }, "color": { @@ -263,7 +439,13 @@ }, "opacity": { "description": "Opacity of layer", - "enum": ["", "opacityLow", "opacityMedium", "opacityHigh", null], + "enum": [ + "", + "opacityLow", + "opacityMedium", + "opacityHigh", + null + ], "nullable": true, "type": "string" }, @@ -290,12 +472,22 @@ }, "sourceType": { "description": "Type of source for annotation data", - "enum": ["", "line", "NATIVE", "table"], + "enum": [ + "", + "line", + "NATIVE", + "table" + ], "type": "string" }, "style": { "description": "Line style. Only applies to time-series annotations", - "enum": ["dashed", "dotted", "solid", "longDashed"], + "enum": [ + "dashed", + "dotted", + "solid", + "longDashed" + ], "type": "string" }, "timeColumn": { @@ -317,7 +509,12 @@ "type": "number" } }, - "required": ["name", "show", "showMarkers", "value"], + "required": [ + "name", + "show", + "showMarkers", + "value" + ], "type": "object" }, "AnnotationLayerRestApi.get": { @@ -384,7 +581,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "AnnotationLayerRestApi.get_list.User1": { @@ -398,7 +598,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "AnnotationLayerRestApi.post": { @@ -415,7 +618,9 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, "AnnotationLayerRestApi.put": { @@ -465,7 +670,9 @@ "type": "string" } }, - "required": ["layer"], + "required": [ + "layer" + ], "type": "object" }, "AnnotationRestApi.get.AnnotationLayer": { @@ -527,7 +734,9 @@ "type": "integer" } }, - "required": ["first_name"], + "required": [ + "first_name" + ], "type": "object" }, "AnnotationRestApi.get_list.User1": { @@ -540,7 +749,9 @@ "type": "integer" } }, - "required": ["first_name"], + "required": [ + "first_name" + ], "type": "object" }, "AnnotationRestApi.post": { @@ -572,7 +783,11 @@ "type": "string" } }, - "required": ["end_dttm", "short_descr", "start_dttm"], + "required": [ + "end_dttm", + "short_descr", + "start_dttm" + ], "type": "object" }, "AnnotationRestApi.put": { @@ -720,7 +935,9 @@ "type": "string" } }, - "required": ["chart_id"], + "required": [ + "chart_id" + ], "type": "object" }, "ChartCacheWarmUpResponseSchema": { @@ -756,7 +973,17 @@ "properties": { "aggregate": { "description": "Aggregation operator.Only required for simple expression types.", - "enum": ["AVG", "COUNT", "COUNT_DISTINCT", "MAX", "MIN", "SUM"], + "enum": [ + "AVG", + "COUNT", + "COUNT_DISTINCT", + "MAX", + "MIN", + "SUM", + "MEDIAN", + "STDDEV_SAMP", + "VAR_SAMP" + ], "type": "string" }, "column": { @@ -764,7 +991,10 @@ }, "expressionType": { "description": "Simple or SQL metric", - "enum": ["SIMPLE", "SQL"], + "enum": [ + "SIMPLE", + "SQL" + ], "example": "SQL", "type": "string" }, @@ -798,7 +1028,9 @@ "type": "string" } }, - "required": ["expressionType"], + "required": [ + "expressionType" + ], "type": "object" }, "ChartDataAggregateOptionsSchema": { @@ -863,16 +1095,25 @@ }, "percentiles": { "description": "Upper and lower percentiles for percentile whisker type.", - "example": [1, 99] + "example": [ + 1, + 99 + ] }, "whisker_type": { "description": "Whisker type. Any numpy function will work.", - "enum": ["tukey", "min/max", "percentile"], + "enum": [ + "tukey", + "min/max", + "percentile" + ], "example": "tukey", "type": "string" } }, - "required": ["whisker_type"], + "required": [ + "whisker_type" + ], "type": "object" }, "ChartDataColumn": { @@ -894,12 +1135,17 @@ "properties": { "orientation": { "description": "Should cell values be calculated across the row or column.", - "enum": ["row", "column"], + "enum": [ + "row", + "column" + ], "example": "row", "type": "string" } }, - "required": ["orientation"], + "required": [ + "orientation" + ], "type": "object" }, "ChartDataDatasource": { @@ -909,11 +1155,20 @@ }, "type": { "description": "Datasource type", - "enum": ["table", "dataset", "query", "saved_query", "view"], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view" + ], "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "type": "object" }, "ChartDataExtras": { @@ -937,12 +1192,18 @@ }, "relative_end": { "description": "End time for relative time deltas. Default: `config[\"DEFAULT_RELATIVE_START_TIME\"]`", - "enum": ["today", "now"], + "enum": [ + "today", + "now" + ], "type": "string" }, "relative_start": { "description": "Start time for relative time deltas. Default: `config[\"DEFAULT_RELATIVE_START_TIME\"]`", - "enum": ["today", "now"], + "enum": [ + "today", + "now" + ], "type": "string" }, "time_grain_sqla": { @@ -1019,18 +1280,34 @@ "NOT IN", "IS TRUE", "IS FALSE", - "TEMPORAL_RANGE" + "TEMPORAL_RANGE", + "CONTAINS_ANY", + "CONTAINS_ALL", + "IS_EMPTY", + "IS_NOT_EMPTY", + "LENGTH_EQUALS", + "LENGTH_GREATER_THAN", + "LENGTH_LESS_THAN", + "LENGTH_GREATER_THAN_OR_EQUALS", + "LENGTH_LESS_THAN_OR_EQUALS" ], "example": "IN", "type": "string" }, "val": { "description": "The value or values to compare against. Can be a string, integer, decimal, None or list, depending on the operator.", - "example": ["China", "France", "Japan"], + "example": [ + "China", + "France", + "Japan" + ], "nullable": true } }, - "required": ["col", "op"], + "required": [ + "col", + "op" + ], "type": "object" }, "ChartDataGeodeticParseOptionsSchema": { @@ -1052,7 +1329,11 @@ "type": "string" } }, - "required": ["geodetic", "latitude", "longitude"], + "required": [ + "geodetic", + "latitude", + "longitude" + ], "type": "object" }, "ChartDataGeohashDecodeOptionsSchema": { @@ -1070,7 +1351,11 @@ "type": "string" } }, - "required": ["geohash", "latitude", "longitude"], + "required": [ + "geohash", + "latitude", + "longitude" + ], "type": "object" }, "ChartDataGeohashEncodeOptionsSchema": { @@ -1088,7 +1373,11 @@ "type": "string" } }, - "required": ["geohash", "latitude", "longitude"], + "required": [ + "geohash", + "latitude", + "longitude" + ], "type": "object" }, "ChartDataPivotOptionsSchema": { @@ -1140,29 +1429,6 @@ "properties": { "operation": { "description": "Post processing operation type", - "enum": [ - "aggregate", - "boxplot", - "compare", - "contribution", - "cum", - "diff", - "escape_separator", - "flatten", - "geodetic_parse", - "geohash_decode", - "geohash_encode", - "histogram", - "pivot", - "prophet", - "rank", - "rename", - "resample", - "rolling", - "select", - "sort", - "unescape_separator" - ], "example": "aggregate", "type": "string" }, @@ -1182,12 +1448,17 @@ } } }, - "groupby": ["country", "gender"] + "groupby": [ + "country", + "gender" + ] }, "type": "object" } }, - "required": ["operation"], + "required": [ + "operation" + ], "type": "object" }, "ChartDataProphetOptionsSchema": { @@ -1243,7 +1514,11 @@ "example": false } }, - "required": ["confidence_interval", "periods", "time_grain"], + "required": [ + "confidence_interval", + "periods", + "time_grain" + ], "type": "object" }, "ChartDataQueryContextSchema": { @@ -1271,7 +1546,12 @@ "type": "array" }, "result_format": { - "enum": ["csv", "json", "xlsx"] + "enum": [ + "csv", + "json", + "xlsx", + "arrow" + ] }, "result_type": { "enum": [ @@ -1364,6 +1644,18 @@ "nullable": true, "type": "array" }, + "grouping_sets": { + "default": null, + "description": "Rollup levels for non-additive totals: each entry is the list of groupby columns to group at that level (e.g. the empty list is the grand total). When set and the engine supports it, the levels are computed in a single GROUPING SETS query.", + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "nullable": true, + "type": "array" + }, "having": { "deprecated": true, "description": "HAVING clause to be added to aggregate queries using AND operator. This field is deprecated and should be passed to `extras`.", @@ -1394,8 +1686,14 @@ "orderby": { "description": "Expects a list of lists where the first element is the column name which to sort by, and the second element is a boolean.", "example": [ - ["my_col_1", false], - ["my_col_2", true] + [ + "my_col_1", + false + ], + [ + "my_col_2", + true + ] ], "items": {}, "nullable": true, @@ -1455,6 +1753,11 @@ "description": "Metric used to limit timeseries queries by. Requires `series` and `series_limit` to be set.", "nullable": true }, + "time_compare_full_range": { + "description": "When using a time comparison (time_offsets), plot each shifted series across its full time range instead of truncating it to the main series' range. Useful for comparing a partial current period against complete prior periods.", + "nullable": true, + "type": "boolean" + }, "time_offsets": { "items": { "type": "string" @@ -1500,6 +1803,37 @@ }, "type": "object" }, + "ChartDataQueryTiming": { + "properties": { + "cache_resolution_ms": { + "nullable": true, + "type": "number" + }, + "data_acquisition_ms": { + "nullable": true, + "type": "number" + }, + "payload_assembly_ms": { + "nullable": true, + "type": "number" + }, + "query_planning_ms": { + "nullable": true, + "type": "number" + }, + "total_ms": { + "type": "number" + } + }, + "required": [ + "cache_resolution_ms", + "data_acquisition_ms", + "payload_assembly_ms", + "query_planning_ms", + "total_ms" + ], + "type": "object" + }, "ChartDataResponseResult": { "properties": { "annotation_data": { @@ -1615,10 +1949,23 @@ ], "type": "string" }, + "timing": { + "allOf": [ + { + "$ref": "#/components/schemas/ChartDataTiming" + } + ], + "description": "Optional versioned query lifecycle timing breakdown in milliseconds. Present only when CHART_DATA_INCLUDE_TIMING is enabled; disabled by default." + }, "to_dttm": { "description": "End timestamp of time range", "nullable": true, "type": "integer" + }, + "warning": { + "description": "Warning message when results were truncated", + "nullable": true, + "type": "string" } }, "required": [ @@ -1632,6 +1979,14 @@ }, "ChartDataResponseSchema": { "properties": { + "dashboard_filters": { + "allOf": [ + { + "$ref": "#/components/schemas/DashboardFiltersResponseSchema" + } + ], + "description": "Metadata about dashboard native filters applied to the query. Only present when filters_dashboard_id is provided." + }, "result": { "description": "A list of results for each corresponding query in the request.", "items": { @@ -1689,7 +2044,10 @@ "readOnly": true }, "dashboards": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.Dashboard" + "items": { + "$ref": "#/components/schemas/ChartDataRestApi.get_list.Dashboard" + }, + "type": "array" }, "datasource_id": { "nullable": true, @@ -1716,6 +2074,12 @@ "edit_url": { "readOnly": true }, + "editors": { + "items": { + "$ref": "#/components/schemas/ChartDataRestApi.get_list.Subject" + }, + "type": "array" + }, "form_data": { "readOnly": true }, @@ -1733,9 +2097,6 @@ "last_saved_by": { "$ref": "#/components/schemas/ChartDataRestApi.get_list.User2" }, - "owners": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.User3" - }, "params": { "nullable": true, "type": "string" @@ -1752,7 +2113,10 @@ "$ref": "#/components/schemas/ChartDataRestApi.get_list.SqlaTable" }, "tags": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.Tag" + "items": { + "$ref": "#/components/schemas/ChartDataRestApi.get_list.Tag" + }, + "type": "array" }, "thumbnail_url": { "readOnly": true @@ -1765,8 +2129,14 @@ "nullable": true, "type": "string" }, - "viz_type": { - "maxLength": 250, + "viewers": { + "items": { + "$ref": "#/components/schemas/ChartDataRestApi.get_list.Subject1" + }, + "type": "array" + }, + "viz_type": { + "maxLength": 250, "nullable": true, "type": "string" } @@ -1797,43 +2167,71 @@ "type": "string" } }, - "required": ["table_name"], + "required": [ + "table_name" + ], "type": "object" }, - "ChartDataRestApi.get_list.Tag": { + "ChartDataRestApi.get_list.Subject": { "properties": { "id": { "type": "integer" }, - "name": { - "maxLength": 250, - "nullable": true, + "label": { + "maxLength": 255, "type": "string" }, "type": { - "enum": [1, 2, 3, 4] + "type": "integer" } }, + "required": [ + "label", + "type" + ], "type": "object" }, - "ChartDataRestApi.get_list.User": { + "ChartDataRestApi.get_list.Subject1": { "properties": { - "first_name": { - "maxLength": 64, + "id": { + "type": "integer" + }, + "label": { + "maxLength": 255, "type": "string" }, + "type": { + "type": "integer" + } + }, + "required": [ + "label", + "type" + ], + "type": "object" + }, + "ChartDataRestApi.get_list.Tag": { + "properties": { "id": { "type": "integer" }, - "last_name": { - "maxLength": 64, + "name": { + "maxLength": 250, + "nullable": true, "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, - "required": ["first_name", "last_name"], "type": "object" }, - "ChartDataRestApi.get_list.User1": { + "ChartDataRestApi.get_list.User": { "properties": { "first_name": { "maxLength": 64, @@ -1847,10 +2245,13 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "ChartDataRestApi.get_list.User2": { + "ChartDataRestApi.get_list.User1": { "properties": { "first_name": { "maxLength": 64, @@ -1864,10 +2265,13 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "ChartDataRestApi.get_list.User3": { + "ChartDataRestApi.get_list.User2": { "properties": { "first_name": { "maxLength": 64, @@ -1881,7 +2285,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "ChartDataRestApi.post": { @@ -1919,7 +2326,14 @@ }, "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", - "enum": ["table", "dataset", "query", "saved_query", "view"], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view" + ], "type": "string" }, "description": { @@ -1927,6 +2341,13 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the chart.", + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -1935,13 +2356,6 @@ "nullable": true, "type": "boolean" }, - "owners": { - "items": { - "description": "Owner are users ids allowed to delete or change this chart. If left empty you will be one of the owners of the chart.", - "type": "integer" - }, - "type": "array" - }, "params": { "description": "Parameters are generated dynamically when clicking the save or overwrite button in the explore view. This JSON object for power users who may want to alter specific parameters.", "nullable": true, @@ -1968,15 +2382,30 @@ "nullable": true, "type": "string" }, + "viewers": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can view the chart.", + "type": "integer" + }, + "type": "array" + }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "type": "string" } }, - "required": ["datasource_id", "datasource_type", "slice_name"], + "required": [ + "datasource_id", + "datasource_type", + "slice_name" + ], "type": "object" }, "ChartDataRestApi.put": { @@ -2010,7 +2439,15 @@ }, "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", - "enum": ["table", "dataset", "query", "saved_query", "view", null], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view", + null + ], "nullable": true, "type": "string" }, @@ -2019,6 +2456,13 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the chart.", + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -2027,12 +2471,34 @@ "nullable": true, "type": "boolean" }, - "owners": { + "normalization_changes": { + "description": "Optional advisory Explore hydration transitions used only to remove exact automatic normalization changes from human-readable version history. Invalid metadata is ignored.", "items": { - "description": "Owner are users ids allowed to delete or change this chart. If left empty you will be one of the owners of the chart.", - "type": "integer" + "properties": { + "control": { + "maxLength": 256, + "type": "string" + }, + "from_present": { + "type": "boolean" + }, + "from_value": {}, + "to_present": { + "type": "boolean" + }, + "to_value": {} + }, + "required": [ + "control", + "from_present", + "to_present" + ], + "type": "object" }, - "type": "array" + "maxItems": 256, + "nullable": true, + "type": "array", + "writeOnly": true }, "params": { "description": "Parameters are generated dynamically when clicking the save or overwrite button in the explore view. This JSON object for power users who may want to alter specific parameters.", @@ -2068,9 +2534,20 @@ "nullable": true, "type": "string" }, + "viewers": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can view the chart.", + "type": "integer" + }, + "type": "array" + }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "nullable": true, @@ -2148,17 +2625,26 @@ "window": { "description": "Size of the rolling window in days.", "example": 7, + "maximum": 10000, + "minimum": 1, "type": "integer" } }, - "required": ["rolling_type", "window"], + "required": [ + "rolling_type", + "window" + ], "type": "object" }, "ChartDataSelectOptionsSchema": { "properties": { "columns": { "description": "Columns which to select from the input data, in the desired order. If columns are renamed, the original column name should be referenced here.", - "example": ["country", "gender", "age"], + "example": [ + "country", + "gender", + "age" + ], "items": { "type": "string" }, @@ -2166,7 +2652,9 @@ }, "exclude": { "description": "Columns to exclude from selection.", - "example": ["my_temp_column"], + "example": [ + "my_temp_column" + ], "items": { "type": "string" }, @@ -2211,7 +2699,27 @@ "type": "object" } }, - "required": ["columns"], + "required": [ + "columns" + ], + "type": "object" + }, + "ChartDataTiming": { + "properties": { + "query": { + "$ref": "#/components/schemas/ChartDataQueryTiming" + }, + "version": { + "enum": [ + 1 + ], + "type": "integer" + } + }, + "required": [ + "query", + "version" + ], "type": "object" }, "ChartEntityResponseSchema": { @@ -2349,6 +2857,12 @@ "description": { "type": "string" }, + "editors": { + "items": { + "$ref": "#/components/schemas/SubjectResponse" + }, + "type": "array" + }, "id": { "description": "The id of the chart.", "type": "integer" @@ -2356,12 +2870,6 @@ "is_managed_externally": { "type": "boolean" }, - "owners": { - "items": { - "$ref": "#/components/schemas/User" - }, - "type": "array" - }, "params": { "type": "string" }, @@ -2387,6 +2895,12 @@ "format": "uuid", "type": "string" }, + "viewers": { + "items": { + "$ref": "#/components/schemas/SubjectResponse" + }, + "type": "array" + }, "viz_type": { "type": "string" } @@ -2440,7 +2954,10 @@ "readOnly": true }, "dashboards": { - "$ref": "#/components/schemas/ChartRestApi.get_list.Dashboard" + "items": { + "$ref": "#/components/schemas/ChartRestApi.get_list.Dashboard" + }, + "type": "array" }, "datasource_id": { "nullable": true, @@ -2467,6 +2984,12 @@ "edit_url": { "readOnly": true }, + "editors": { + "items": { + "$ref": "#/components/schemas/ChartRestApi.get_list.Subject" + }, + "type": "array" + }, "form_data": { "readOnly": true }, @@ -2484,9 +3007,6 @@ "last_saved_by": { "$ref": "#/components/schemas/ChartRestApi.get_list.User2" }, - "owners": { - "$ref": "#/components/schemas/ChartRestApi.get_list.User3" - }, "params": { "nullable": true, "type": "string" @@ -2503,7 +3023,10 @@ "$ref": "#/components/schemas/ChartRestApi.get_list.SqlaTable" }, "tags": { - "$ref": "#/components/schemas/ChartRestApi.get_list.Tag" + "items": { + "$ref": "#/components/schemas/ChartRestApi.get_list.Tag" + }, + "type": "array" }, "thumbnail_url": { "readOnly": true @@ -2516,6 +3039,12 @@ "nullable": true, "type": "string" }, + "viewers": { + "items": { + "$ref": "#/components/schemas/ChartRestApi.get_list.Subject1" + }, + "type": "array" + }, "viz_type": { "maxLength": 250, "nullable": true, @@ -2548,43 +3077,71 @@ "type": "string" } }, - "required": ["table_name"], + "required": [ + "table_name" + ], "type": "object" }, - "ChartRestApi.get_list.Tag": { + "ChartRestApi.get_list.Subject": { "properties": { "id": { "type": "integer" }, - "name": { - "maxLength": 250, - "nullable": true, + "label": { + "maxLength": 255, "type": "string" }, "type": { - "enum": [1, 2, 3, 4] + "type": "integer" } }, + "required": [ + "label", + "type" + ], "type": "object" }, - "ChartRestApi.get_list.User": { + "ChartRestApi.get_list.Subject1": { "properties": { - "first_name": { - "maxLength": 64, + "id": { + "type": "integer" + }, + "label": { + "maxLength": 255, "type": "string" }, + "type": { + "type": "integer" + } + }, + "required": [ + "label", + "type" + ], + "type": "object" + }, + "ChartRestApi.get_list.Tag": { + "properties": { "id": { "type": "integer" }, - "last_name": { - "maxLength": 64, + "name": { + "maxLength": 250, + "nullable": true, "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, - "required": ["first_name", "last_name"], "type": "object" }, - "ChartRestApi.get_list.User1": { + "ChartRestApi.get_list.User": { "properties": { "first_name": { "maxLength": 64, @@ -2598,10 +3155,13 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "ChartRestApi.get_list.User2": { + "ChartRestApi.get_list.User1": { "properties": { "first_name": { "maxLength": 64, @@ -2615,10 +3175,13 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "ChartRestApi.get_list.User3": { + "ChartRestApi.get_list.User2": { "properties": { "first_name": { "maxLength": 64, @@ -2632,7 +3195,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "ChartRestApi.post": { @@ -2670,7 +3236,14 @@ }, "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", - "enum": ["table", "dataset", "query", "saved_query", "view"], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view" + ], "type": "string" }, "description": { @@ -2678,6 +3251,13 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the chart.", + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -2686,13 +3266,6 @@ "nullable": true, "type": "boolean" }, - "owners": { - "items": { - "description": "Owner are users ids allowed to delete or change this chart. If left empty you will be one of the owners of the chart.", - "type": "integer" - }, - "type": "array" - }, "params": { "description": "Parameters are generated dynamically when clicking the save or overwrite button in the explore view. This JSON object for power users who may want to alter specific parameters.", "nullable": true, @@ -2719,15 +3292,30 @@ "nullable": true, "type": "string" }, + "viewers": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can view the chart.", + "type": "integer" + }, + "type": "array" + }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "type": "string" } }, - "required": ["datasource_id", "datasource_type", "slice_name"], + "required": [ + "datasource_id", + "datasource_type", + "slice_name" + ], "type": "object" }, "ChartRestApi.put": { @@ -2761,7 +3349,15 @@ }, "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", - "enum": ["table", "dataset", "query", "saved_query", "view", null], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view", + null + ], "nullable": true, "type": "string" }, @@ -2770,6 +3366,13 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the chart.", + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -2778,13 +3381,35 @@ "nullable": true, "type": "boolean" }, - "owners": { + "normalization_changes": { + "description": "Optional advisory Explore hydration transitions used only to remove exact automatic normalization changes from human-readable version history. Invalid metadata is ignored.", "items": { - "description": "Owner are users ids allowed to delete or change this chart. If left empty you will be one of the owners of the chart.", - "type": "integer" - }, - "type": "array" - }, + "properties": { + "control": { + "maxLength": 256, + "type": "string" + }, + "from_present": { + "type": "boolean" + }, + "from_value": {}, + "to_present": { + "type": "boolean" + }, + "to_value": {} + }, + "required": [ + "control", + "from_present", + "to_present" + ], + "type": "object" + }, + "maxItems": 256, + "nullable": true, + "type": "array", + "writeOnly": true + }, "params": { "description": "Parameters are generated dynamically when clicking the save or overwrite button in the explore view. This JSON object for power users who may want to alter specific parameters.", "nullable": true, @@ -2819,9 +3444,20 @@ "nullable": true, "type": "string" }, + "viewers": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can view the chart.", + "type": "integer" + }, + "type": "array" + }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "nullable": true, @@ -2870,7 +3506,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "CssTemplateRestApi.get.User1": { @@ -2887,7 +3526,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "CssTemplateRestApi.get_list": { @@ -2935,7 +3577,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "CssTemplateRestApi.get_list.User1": { @@ -2952,7 +3597,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "CssTemplateRestApi.post": { @@ -2985,6 +3633,11 @@ }, "CurrentUserPutSchema": { "properties": { + "current_password": { + "description": "The current user's existing password", + "type": "string", + "writeOnly": true + }, "first_name": { "description": "The current user's first name", "maxLength": 64, @@ -3043,6 +3696,58 @@ }, "type": "object" }, + "DashboardChartCustomizationsConfigUpdateSchema": { + "properties": { + "deleted": { + "items": { + "type": "string" + }, + "type": "array" + }, + "modified": { + "items": {}, + "type": "array" + }, + "reordered": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "DashboardColorsConfigUpdateSchema": { + "properties": { + "color_namespace": { + "nullable": true, + "type": "string" + }, + "color_scheme": { + "nullable": true, + "type": "string" + }, + "color_scheme_domain": { + "items": { + "type": "string" + }, + "type": "array" + }, + "label_colors": { + "type": "object" + }, + "map_label_colors": { + "type": "object" + }, + "shared_label_colors": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, "DashboardCopySchema": { "properties": { "css": { @@ -3065,7 +3770,9 @@ "type": "string" } }, - "required": ["json_metadata"], + "required": [ + "json_metadata" + ], "type": "object" }, "DashboardDatasetSchema": { @@ -3112,6 +3819,12 @@ "edit_url": { "type": "string" }, + "editors": { + "items": { + "$ref": "#/components/schemas/SubjectResponse" + }, + "type": "array" + }, "fetch_values_predicate": { "type": "string" }, @@ -3166,12 +3879,6 @@ }, "type": "array" }, - "owners": { - "items": { - "type": "object" - }, - "type": "array" - }, "params": { "type": "string" }, @@ -3217,6 +3924,75 @@ }, "type": "object" }, + "DashboardExportXlsxPostSchema": { + "properties": { + "active_data_mask": { + "additionalProperties": { + "type": "object" + }, + "description": "Live dashboard filter state keyed by native filter id, each carrying an extraFormData object.", + "type": "object" + }, + "mode": { + "default": "data", + "description": "Export mode: 'data' streams each chart's tabular result (default); 'images' embeds non-table charts as rendered images and keeps table charts tabular.", + "enum": [ + "data", + "images" + ], + "type": "string" + } + }, + "type": "object" + }, + "DashboardExportXlsxResponseSchema": { + "properties": { + "job_id": { + "description": "Correlation id for the async export task", + "type": "string" + } + }, + "type": "object" + }, + "DashboardFilterInfo": { + "properties": { + "column": { + "description": "Target column name for the filter", + "nullable": true, + "type": "string" + }, + "id": { + "description": "The native filter ID", + "type": "string" + }, + "name": { + "description": "The native filter name", + "type": "string" + }, + "status": { + "description": "Filter status: 'applied' (default value was included in the query), 'not_applied' (filter had no default value and was omitted, matching dashboard initial-load behavior), or 'not_applied_uses_default_to_first_item_prequery' (filter uses defaultToFirstItem which requires a pre-query to resolve and cannot be applied server-side)", + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "DashboardFiltersResponseSchema": { + "properties": { + "filters": { + "description": "Metadata about each in-scope dashboard native filter and whether its default value was applied to the query", + "items": { + "$ref": "#/components/schemas/DashboardFilterInfo" + }, + "type": "array" + } + }, + "type": "object" + }, "DashboardGetResponseSchema": { "properties": { "certification_details": { @@ -3228,7 +4004,7 @@ "type": "string" }, "changed_by": { - "$ref": "#/components/schemas/User1" + "$ref": "#/components/schemas/User" }, "changed_by_name": { "type": "string" @@ -3248,7 +4024,7 @@ "type": "array" }, "created_by": { - "$ref": "#/components/schemas/User1" + "$ref": "#/components/schemas/User" }, "created_on_delta_humanized": { "type": "string" @@ -3267,6 +4043,16 @@ "description": "A title for the dashboard.", "type": "string" }, + "description": { + "nullable": true, + "type": "string" + }, + "editors": { + "items": { + "$ref": "#/components/schemas/SubjectResponse" + }, + "type": "array" + }, "id": { "type": "integer" }, @@ -3278,12 +4064,6 @@ "description": "This JSON object is generated dynamically when clicking the save or overwrite button in the dashboard view. It is exposed here for reference and for power users who may want to alter specific parameters.", "type": "string" }, - "owners": { - "items": { - "$ref": "#/components/schemas/User1" - }, - "type": "array" - }, "position_json": { "description": "This json object describes the positioning of the widgets in the dashboard. It is dynamically generated when adjusting the widgets size and positions by using drag & drop in the dashboard view", "type": "string" @@ -3291,12 +4071,6 @@ "published": { "type": "boolean" }, - "roles": { - "items": { - "$ref": "#/components/schemas/Roles" - }, - "type": "array" - }, "slug": { "type": "string" }, @@ -3325,6 +4099,33 @@ "format": "uuid", "nullable": true, "type": "string" + }, + "viewers": { + "items": { + "$ref": "#/components/schemas/SubjectResponse" + }, + "type": "array" + } + }, + "type": "object" + }, + "DashboardNativeFiltersConfigUpdateSchema": { + "properties": { + "deleted": { + "items": { + "type": "string" + }, + "type": "array" + }, + "modified": { + "items": {}, + "type": "array" + }, + "reordered": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" @@ -3334,6 +4135,7 @@ "activeTabs": { "description": "Current active dashboard tabs", "items": { + "nullable": true, "type": "string" }, "nullable": true, @@ -3471,7 +4273,10 @@ "type": "integer" } }, - "required": ["label", "type"], + "required": [ + "label", + "type" + ], "type": "object" }, "DashboardRestApi.get_list.Subject1": { @@ -3487,7 +4292,10 @@ "type": "integer" } }, - "required": ["label", "type"], + "required": [ + "label", + "type" + ], "type": "object" }, "DashboardRestApi.get_list.Tag": { @@ -3501,7 +4309,12 @@ "type": "string" }, "type": { - "enum": [1, 2, 3, 4] + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" @@ -3520,7 +4333,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DashboardRestApi.get_list.User1": { @@ -3537,7 +4353,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DashboardRestApi.post": { @@ -3563,6 +4382,18 @@ "nullable": true, "type": "string" }, + "description": { + "description": "A description for the dashboard.", + "nullable": true, + "type": "string" + }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the dashboard.", + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -3575,13 +4406,6 @@ "description": "This JSON object is generated dynamically when clicking the save or overwrite button in the dashboard view. It is exposed here for reference and for power users who may want to alter specific parameters.", "type": "string" }, - "owners": { - "items": { - "description": "Owner are users ids allowed to delete or change this dashboard. If left empty you will be one of the owners of the dashboard.", - "type": "integer" - }, - "type": "array" - }, "position_json": { "description": "This json object describes the positioning of the widgets in the dashboard. It is dynamically generated when adjusting the widgets size and positions by using drag & drop in the dashboard view", "type": "string" @@ -3590,13 +4414,6 @@ "description": "Determines whether or not this dashboard is visible in the list of all dashboards.", "type": "boolean" }, - "roles": { - "items": { - "description": "Roles is a list which defines access to the dashboard. These roles are always applied in addition to restrictions on dataset level access. If no roles defined then the dashboard is available to all roles.", - "type": "integer" - }, - "type": "array" - }, "slug": { "description": "Unique identifying part for the web address of the dashboard.", "maxLength": 255, @@ -3613,6 +4430,13 @@ "format": "uuid", "nullable": true, "type": "string" + }, + "viewers": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can view the dashboard.", + "type": "integer" + }, + "type": "array" } }, "type": "object" @@ -3641,6 +4465,19 @@ "nullable": true, "type": "string" }, + "description": { + "description": "A description for the dashboard.", + "nullable": true, + "type": "string" + }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the dashboard.", + "nullable": true, + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -3654,14 +4491,6 @@ "nullable": true, "type": "string" }, - "owners": { - "items": { - "description": "Owner are users ids allowed to delete or change this dashboard. If left empty you will be one of the owners of the dashboard.", - "nullable": true, - "type": "integer" - }, - "type": "array" - }, "position_json": { "description": "This json object describes the positioning of the widgets in the dashboard. It is dynamically generated when adjusting the widgets size and positions by using drag & drop in the dashboard view", "nullable": true, @@ -3672,14 +4501,6 @@ "nullable": true, "type": "boolean" }, - "roles": { - "items": { - "description": "Roles is a list which defines access to the dashboard. These roles are always applied in addition to restrictions on dataset level access. If no roles defined then the dashboard is available to all roles.", - "nullable": true, - "type": "integer" - }, - "type": "array" - }, "slug": { "description": "Unique identifying part for the web address of the dashboard.", "maxLength": 255, @@ -3704,6 +4525,14 @@ "format": "uuid", "nullable": true, "type": "string" + }, + "viewers": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can view the dashboard.", + "nullable": true, + "type": "integer" + }, + "type": "array" } }, "type": "object" @@ -3805,7 +4634,8 @@ "type": "string" }, "cache_timeout": { - "description": "Duration (in seconds) of the caching timeout for charts of this database. A timeout of 0 indicates that the cache never expires. Note this defaults to the global timeout if undefined.", + "description": "Duration (in seconds) of the caching timeout for charts of this database. A timeout of 0 indicates that the cache never expires, and -1 bypasses the cache. Note this defaults to the global timeout if undefined.", + "minimum": -1, "nullable": true, "type": "integer" }, @@ -3833,7 +4663,7 @@ "type": "boolean" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.
7. The disable_drill_to_detail field is a boolean specifying whether or not drill to detail is disabled for the database.
8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.
9. The disable_sampling_read_limit_override field is a boolean specifying whether system-generated sampling queries (filter values, samples/preview, datetime format detection) that an engine rejects with a read-limit error should fail outright instead of being retried once with the engine's bounded-read override. Only affects engines that implement such an override.

", "type": "string" }, "force_ctas_schema": { @@ -4049,7 +4879,9 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatabaseRestApi.get_list": { @@ -4146,7 +4978,9 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatabaseRestApi.get_list.User": { @@ -4160,7 +4994,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatabaseRestApi.get_list.User1": { @@ -4174,7 +5011,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatabaseRestApi.post": { @@ -4200,14 +5040,18 @@ "type": "boolean" }, "cache_timeout": { - "description": "Duration (in seconds) of the caching timeout for charts of this database. A timeout of 0 indicates that the cache never expires. Note this defaults to the global timeout if undefined.", + "description": "Duration (in seconds) of the caching timeout for charts of this database. A timeout of 0 indicates that the cache never expires, and -1 bypasses the cache. Note this defaults to the global timeout if undefined.", + "minimum": -1, "nullable": true, "type": "integer" }, "configuration_method": { "default": "sqlalchemy_form", "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4234,7 +5078,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.
7. The disable_drill_to_detail field is a boolean specifying whether or not drill to detail is disabled for the database.
8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.
9. The disable_sampling_read_limit_override field is a boolean specifying whether system-generated sampling queries (filter values, samples/preview, datetime format detection) that an engine rejects with a read-limit error should fail outright instead of being retried once with the engine's bounded-read override. Only affects engines that implement such an override.

", "type": "string" }, "force_ctas_schema": { @@ -4285,7 +5129,9 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatabaseRestApi.put": { @@ -4311,14 +5157,18 @@ "type": "boolean" }, "cache_timeout": { - "description": "Duration (in seconds) of the caching timeout for charts of this database. A timeout of 0 indicates that the cache never expires. Note this defaults to the global timeout if undefined.", + "description": "Duration (in seconds) of the caching timeout for charts of this database. A timeout of 0 indicates that the cache never expires, and -1 bypasses the cache. Note this defaults to the global timeout if undefined.", + "minimum": -1, "nullable": true, "type": "integer" }, "configuration_method": { "default": "sqlalchemy_form", "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4346,7 +5196,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.
7. The disable_drill_to_detail field is a boolean specifying whether or not drill to detail is disabled for the database.
8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.
9. The disable_sampling_read_limit_override field is a boolean specifying whether system-generated sampling queries (filter values, samples/preview, datetime format detection) that an engine rejects with a read-limit error should fail outright instead of being retried once with the engine's bounded-read override. Only affects engines that implement such an override.

", "type": "string" }, "force_ctas_schema": { @@ -4407,21 +5257,70 @@ "type": "integer" }, "password": { + "type": "string", + "writeOnly": true + }, + "private_key": { + "type": "string", + "writeOnly": true + }, + "private_key_password": { + "type": "string", + "writeOnly": true + }, + "server_address": { + "maxLength": 256, + "minLength": 1, + "pattern": "^[A-Za-z0-9._:\\-\\[\\]]+$", + "type": "string" + }, + "server_host_key": { + "description": "Expected SSH server host key in authorized-key form (e.g. 'ssh-ed25519 AAAA...'). When set, the server's host key is verified against it before the tunnel is opened.", + "nullable": true, + "type": "string" + }, + "server_port": { + "type": "integer" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "DatabaseSSHTunnelValidation": { + "properties": { + "id": { + "description": "SSH Tunnel ID (for updates)", + "nullable": true, + "type": "integer" + }, + "password": { + "nullable": true, "type": "string" }, "private_key": { + "nullable": true, "type": "string" }, "private_key_password": { + "nullable": true, "type": "string" }, "server_address": { + "nullable": true, + "type": "string" + }, + "server_host_key": { + "nullable": true, "type": "string" }, "server_port": { + "nullable": true, "type": "integer" }, "username": { + "nullable": true, "type": "string" } }, @@ -4461,7 +5360,10 @@ "configuration_method": { "default": "sqlalchemy_form", "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4481,7 +5383,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.
7. The disable_drill_to_detail field is a boolean specifying whether or not drill to detail is disabled for the database.
8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.
9. The disable_sampling_read_limit_override field is a boolean specifying whether system-generated sampling queries (filter values, samples/preview, datetime format detection) that an engine rejects with a read-limit error should fail outright instead of being retried once with the engine's bounded-read override. Only affects engines that implement such an override.

", "type": "string" }, "impersonate_user": { @@ -4531,7 +5433,10 @@ }, "configuration_method": { "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4550,7 +5455,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.
7. The disable_drill_to_detail field is a boolean specifying whether or not drill to detail is disabled for the database.
8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.
9. The disable_sampling_read_limit_override field is a boolean specifying whether system-generated sampling queries (filter values, samples/preview, datetime format detection) that an engine rejects with a read-limit error should fail outright instead of being retried once with the engine's bounded-read override. Only affects engines that implement such an override.

", "type": "string" }, "id": { @@ -4578,9 +5483,20 @@ "description": "

Optional CA_BUNDLE contents to validate HTTPS requests. Only available on certain database engines.

", "nullable": true, "type": "string" + }, + "ssh_tunnel": { + "allOf": [ + { + "$ref": "#/components/schemas/DatabaseSSHTunnelValidation" + } + ], + "nullable": true } }, - "required": ["configuration_method", "engine"], + "required": [ + "configuration_method", + "engine" + ], "type": "object" }, "Dataset": { @@ -4620,6 +5536,13 @@ "description": "The URL for editing the dataset.", "type": "string" }, + "editors": { + "description": "List of editors", + "items": { + "$ref": "#/components/schemas/SubjectResponse" + }, + "type": "array" + }, "extra": { "description": "JSON string containing extra configuration elements.", "type": "object" @@ -4687,13 +5610,6 @@ }, "type": "array" }, - "owners": { - "description": "List of owners identifiers", - "items": { - "type": "integer" - }, - "type": "array" - }, "params": { "description": "Extra params for the dataset.", "type": "object" @@ -4702,6 +5618,14 @@ "description": "Permission expression.", "type": "string" }, + "rls_filters": { + "default": [], + "description": "Row-level security filters applied to this dataset.", + "items": { + "$ref": "#/components/schemas/RlsFilter" + }, + "type": "array" + }, "schema": { "description": "Dataset schema.", "type": "string" @@ -4766,7 +5690,10 @@ "type": "string" } }, - "required": ["db_name", "table_name"], + "required": [ + "db_name", + "table_name" + ], "type": "object" }, "DatasetCacheWarmUpResponseSchema": { @@ -4866,7 +5793,9 @@ "type": "string" } }, - "required": ["column_name"], + "required": [ + "column_name" + ], "type": "object" }, "DatasetColumnsRestApi.get": { @@ -4912,7 +5841,10 @@ "type": "string" } }, - "required": ["base_model_id", "table_name"], + "required": [ + "base_model_id", + "table_name" + ], "type": "object" }, "DatasetMetricCurrencyPut": { @@ -5017,7 +5949,90 @@ "type": "string" } }, - "required": ["expression", "metric_name"], + "required": [ + "expression", + "metric_name" + ], + "type": "object" + }, + "DatasetPurgeImpactCollection": { + "properties": { + "count": { + "minimum": 0, + "type": "integer" + }, + "restricted_count": { + "minimum": 0, + "type": "integer" + }, + "result": { + "items": { + "$ref": "#/components/schemas/DatasetPurgeImpactObject" + }, + "type": "array" + } + }, + "required": [ + "count", + "restricted_count", + "result" + ], + "type": "object" + }, + "DatasetPurgeImpactObject": { + "properties": { + "archived": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "url": { + "nullable": true, + "type": "string" + }, + "uuid": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "archived", + "name", + "url", + "uuid" + ], + "type": "object" + }, + "DatasetPurgeImpactSchema": { + "properties": { + "charts": { + "$ref": "#/components/schemas/DatasetPurgeImpactCollection" + }, + "dashboards": { + "$ref": "#/components/schemas/DatasetPurgeImpactCollection" + }, + "impact_token": { + "type": "string" + } + }, + "required": [ + "charts", + "dashboards", + "impact_token" + ], + "type": "object" + }, + "DatasetPurgeRequestSchema": { + "properties": { + "confirmed_impact_token": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "confirmed_impact_token" + ], "type": "object" }, "DatasetRelatedChart": { @@ -5109,7 +6124,7 @@ "type": "string" }, "changed_by": { - "$ref": "#/components/schemas/DatasetRestApi.get.User2" + "$ref": "#/components/schemas/DatasetRestApi.get.User1" }, "changed_on": { "format": "date-time", @@ -5123,10 +6138,13 @@ "readOnly": true }, "columns": { - "$ref": "#/components/schemas/DatasetRestApi.get.TableColumn" + "items": { + "$ref": "#/components/schemas/DatasetRestApi.get.TableColumn" + }, + "type": "array" }, "created_by": { - "$ref": "#/components/schemas/DatasetRestApi.get.User1" + "$ref": "#/components/schemas/DatasetRestApi.get.User" }, "created_on": { "format": "date-time", @@ -5158,6 +6176,12 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "$ref": "#/components/schemas/DatasetRestApi.get.Subject" + }, + "type": "array" + }, "extra": { "nullable": true, "type": "string" @@ -5195,7 +6219,10 @@ "type": "string" }, "metrics": { - "$ref": "#/components/schemas/DatasetRestApi.get.SqlMetric" + "items": { + "$ref": "#/components/schemas/DatasetRestApi.get.SqlMetric" + }, + "type": "array" }, "name": { "readOnly": true @@ -5211,9 +6238,6 @@ "order_by_choices": { "readOnly": true }, - "owners": { - "$ref": "#/components/schemas/DatasetRestApi.get.User" - }, "schema": { "maxLength": 255, "nullable": true, @@ -5252,7 +6276,12 @@ "readOnly": true } }, - "required": ["columns", "database", "metrics", "table_name"], + "required": [ + "columns", + "database", + "metrics", + "table_name" + ], "type": "object" }, "DatasetRestApi.get.Database": { @@ -5276,11 +6305,19 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatasetRestApi.get.SqlMetric": { "properties": { + "certification_details": { + "readOnly": true + }, + "certified_by": { + "readOnly": true + }, "changed_on": { "format": "date-time", "nullable": true, @@ -5313,6 +6350,9 @@ "id": { "type": "integer" }, + "is_certified": { + "readOnly": true + }, "metric_name": { "maxLength": 255, "type": "string" @@ -5332,12 +6372,37 @@ "nullable": true, "type": "string" }, + "warning_markdown": { + "readOnly": true + }, "warning_text": { "nullable": true, "type": "string" } }, - "required": ["expression", "metric_name"], + "required": [ + "expression", + "metric_name" + ], + "type": "object" + }, + "DatasetRestApi.get.Subject": { + "properties": { + "id": { + "type": "integer" + }, + "label": { + "maxLength": 255, + "type": "string" + }, + "type": { + "type": "integer" + } + }, + "required": [ + "label", + "type" + ], "type": "object" }, "DatasetRestApi.get.TableColumn": { @@ -5347,6 +6412,12 @@ "nullable": true, "type": "string" }, + "certification_details": { + "readOnly": true + }, + "certified_by": { + "readOnly": true + }, "changed_on": { "format": "date-time", "nullable": true, @@ -5388,6 +6459,9 @@ "nullable": true, "type": "boolean" }, + "is_certified": { + "readOnly": true + }, "is_dttm": { "nullable": true, "type": "boolean" @@ -5413,9 +6487,14 @@ "maxLength": 1024, "nullable": true, "type": "string" + }, + "warning_markdown": { + "readOnly": true } }, - "required": ["column_name"], + "required": [ + "column_name" + ], "type": "object" }, "DatasetRestApi.get.User": { @@ -5424,15 +6503,15 @@ "maxLength": 64, "type": "string" }, - "id": { - "type": "integer" - }, "last_name": { "maxLength": 64, "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatasetRestApi.get.User1": { @@ -5446,21 +6525,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "DatasetRestApi.get.User2": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatasetRestApi.get_list": { @@ -5496,6 +6564,12 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "$ref": "#/components/schemas/DatasetRestApi.get_list.Subject" + }, + "type": "array" + }, "explore_url": { "readOnly": true }, @@ -5509,9 +6583,6 @@ "kind": { "readOnly": true }, - "owners": { - "$ref": "#/components/schemas/DatasetRestApi.get_list.User1" - }, "schema": { "maxLength": 255, "nullable": true, @@ -5531,7 +6602,10 @@ "type": "string" } }, - "required": ["database", "table_name"], + "required": [ + "database", + "table_name" + ], "type": "object" }, "DatasetRestApi.get_list.Database": { @@ -5549,27 +6623,31 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, - "DatasetRestApi.get_list.User": { + "DatasetRestApi.get_list.Subject": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, "id": { "type": "integer" }, - "last_name": { - "maxLength": 64, - "type": "string" + "label": { + "maxLength": 255, + "type": "string" + }, + "type": { + "type": "integer" } }, - "required": ["first_name", "last_name"], + "required": [ + "label", + "type" + ], "type": "object" }, - "DatasetRestApi.get_list.User1": { + "DatasetRestApi.get_list.User": { "properties": { "first_name": { "maxLength": 64, @@ -5583,7 +6661,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatasetRestApi.post": { @@ -5598,9 +6679,21 @@ "nullable": true, "type": "string" }, + "currency_code_column": { + "maxLength": 250, + "minLength": 0, + "nullable": true, + "type": "string" + }, "database": { "type": "integer" }, + "editors": { + "items": { + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -5613,12 +6706,6 @@ "default": false, "type": "boolean" }, - "owners": { - "items": { - "type": "integer" - }, - "type": "array" - }, "schema": { "maxLength": 250, "minLength": 0, @@ -5644,7 +6731,10 @@ "type": "string" } }, - "required": ["database", "table_name"], + "required": [ + "database", + "table_name" + ], "type": "object" }, "DatasetRestApi.put": { @@ -5686,6 +6776,12 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "type": "integer" + }, + "type": "array" + }, "external_url": { "nullable": true, "type": "string" @@ -5736,12 +6832,6 @@ "nullable": true, "type": "integer" }, - "owners": { - "items": { - "type": "integer" - }, - "type": "array" - }, "schema": { "maxLength": 255, "minLength": 0, @@ -5787,7 +6877,14 @@ }, "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", - "enum": ["table", "dataset", "query", "saved_query", "view"], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view" + ], "type": "string" }, "schema": { @@ -5795,7 +6892,112 @@ "type": "string" } }, - "required": ["datasource_type"], + "required": [ + "datasource_type" + ], + "type": "object" + }, + "DatasourceQueryOrder": { + "properties": { + "column": { + "description": "Metric or dimension name to sort by.", + "type": "string" + }, + "descending": { + "default": true, + "description": "Sort this column descending.", + "type": "boolean" + } + }, + "required": [ + "column" + ], + "type": "object" + }, + "DatasourceQuerySchema": { + "properties": { + "cache_timeout": { + "default": null, + "description": "Seconds to cache for; -1 disables caching.", + "minimum": -1, + "nullable": true, + "type": "integer" + }, + "dimensions": { + "description": "Dimension/column names to group by.", + "items": {}, + "type": "array" + }, + "filters": { + "description": "Filters to apply, AND-ed together.", + "items": { + "$ref": "#/components/schemas/ChartDataFilter" + }, + "type": "array" + }, + "force": { + "default": false, + "type": "boolean" + }, + "limit": { + "default": null, + "description": "Rows to return. Also clamped server-side by ROW_LIMIT.", + "maximum": 50000, + "minimum": 1, + "nullable": true, + "type": "integer" + }, + "metrics": { + "description": "Saved metric names, or ad-hoc metric objects (datasets only). See ChartDataAdhocMetricSchema.", + "items": {}, + "type": "array" + }, + "offset": { + "default": 0, + "description": "Rows to skip, for pagination.", + "minimum": 0, + "type": "integer" + }, + "order": { + "description": "Ordering terms, applied in sequence. Each carries its own direction.", + "items": { + "$ref": "#/components/schemas/DatasourceQueryOrder" + }, + "type": "array" + }, + "result_format": { + "default": "json", + "description": "'json' (default) or 'arrow' for an Arrow IPC stream.", + "enum": [ + "csv", + "json", + "xlsx", + "arrow" + ] + }, + "time_column": { + "default": null, + "description": "Temporal column the time range applies to. Inferred from the datasource when omitted.", + "nullable": true, + "type": "string" + }, + "time_grain": { + "default": null, + "description": "ISO 8601 duration, e.g. 'P1D' or 'PT1H'.", + "nullable": true, + "type": "string" + }, + "time_range": { + "default": null, + "description": "e.g. 'Last 30 days' or '2024-01-01 : 2024-12-31'.", + "nullable": true, + "type": "string" + }, + "use_cache": { + "default": true, + "type": "boolean" + } + }, "type": "object" }, "DistincResponseSchema": { @@ -5831,7 +7033,9 @@ "type": "array" } }, - "required": ["allowed_domains"], + "required": [ + "allowed_domains" + ], "type": "object" }, "EmbeddedDashboardResponseSchema": { @@ -5843,7 +7047,7 @@ "type": "array" }, "changed_by": { - "$ref": "#/components/schemas/User2" + "$ref": "#/components/schemas/User1" }, "changed_on": { "format": "date-time", @@ -5900,6 +7104,14 @@ "description": "SSH tunnel is not available to the database", "type": "boolean" }, + "identifier_quote": { + "allOf": [ + { + "$ref": "#/components/schemas/IdentifierQuote" + } + ], + "description": "Characters used to quote identifiers for this dialect" + }, "supports_dynamic_catalog": { "description": "The database supports multiple catalogs in a single connection", "type": "boolean" @@ -5911,6 +7123,14 @@ "supports_oauth2": { "description": "The database supports OAuth2", "type": "boolean" + }, + "supports_offset": { + "description": "The database supports OFFSET in SQL queries. Engines like Elasticsearch SQL return False.", + "type": "boolean" + }, + "supports_schemas": { + "description": "The database uses schemas to organize tables", + "type": "boolean" } }, "type": "object" @@ -5940,7 +7160,10 @@ "type": "object" } }, - "required": ["database_id", "sql"], + "required": [ + "database_id", + "sql" + ], "type": "object" }, "ExecutePayloadSchema": { @@ -5997,10 +7220,14 @@ }, "tmp_table_name": { "nullable": true, + "pattern": "^([A-Za-z_][A-Za-z0-9_]*)?\\Z", "type": "string" } }, - "required": ["database_id", "sql"], + "required": [ + "database_id", + "sql" + ], "type": "object" }, "ExploreContextSchema": { @@ -6024,6 +7251,11 @@ }, "ExplorePermalinkStateSchema": { "properties": { + "chartState": { + "description": "Chart-level state for stateful tables (column filters, sorting, column order)", + "nullable": true, + "type": "object" + }, "formData": { "description": "Chart form data", "type": "object" @@ -6038,7 +7270,9 @@ "type": "array" } }, - "required": ["formData"], + "required": [ + "formData" + ], "type": "object" }, "Folder": { @@ -6062,7 +7296,11 @@ "type": "string" }, "type": { - "enum": ["metric", "column", "folder"], + "enum": [ + "metric", + "column", + "folder" + ], "type": "string" }, "uuid": { @@ -6070,7 +7308,9 @@ "type": "string" } }, - "required": ["uuid"], + "required": [ + "uuid" + ], "type": "object" }, "FormDataPostSchema": { @@ -6085,7 +7325,14 @@ }, "datasource_type": { "description": "The datasource type", - "enum": ["table", "dataset", "query", "saved_query", "view"], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view" + ], "type": "string" }, "form_data": { @@ -6093,7 +7340,11 @@ "type": "string" } }, - "required": ["datasource_id", "datasource_type", "form_data"], + "required": [ + "datasource_id", + "datasource_type", + "form_data" + ], "type": "object" }, "FormDataPutSchema": { @@ -6108,7 +7359,14 @@ }, "datasource_type": { "description": "The datasource type", - "enum": ["table", "dataset", "query", "saved_query", "view"], + "enum": [ + "table", + "dataset", + "query", + "saved_query", + "view", + "semantic_view" + ], "type": "string" }, "form_data": { @@ -6116,7 +7374,11 @@ "type": "string" } }, - "required": ["datasource_id", "datasource_type", "form_data"], + "required": [ + "datasource_id", + "datasource_type", + "form_data" + ], "type": "object" }, "FormatQueryPayloadSchema": { @@ -6139,7 +7401,9 @@ "type": "string" } }, - "required": ["sql"], + "required": [ + "sql" + ], "type": "object" }, "GetFavStarIdsSchema": { @@ -6191,120 +7455,13 @@ "type": "string" } }, - "required": ["database_id", "table_name"], - "type": "object" - }, - "GroupApi.get": { - "properties": { - "description": { - "maxLength": 512, - "nullable": true, - "type": "string" - }, - "id": { - "type": "integer" - }, - "label": { - "maxLength": 150, - "nullable": true, - "type": "string" - }, - "name": { - "maxLength": 100, - "type": "string" - }, - "roles": { - "$ref": "#/components/schemas/GroupApi.get.Role" - }, - "users": { - "$ref": "#/components/schemas/GroupApi.get.User" - } - }, - "required": ["name"], - "type": "object" - }, - "GroupApi.get.Role": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "GroupApi.get.User": { - "properties": { - "id": { - "type": "integer" - }, - "username": { - "maxLength": 128, - "type": "string" - } - }, - "required": ["username"], - "type": "object" - }, - "GroupApi.get_list": { - "properties": { - "description": { - "maxLength": 512, - "nullable": true, - "type": "string" - }, - "id": { - "type": "integer" - }, - "label": { - "maxLength": 150, - "nullable": true, - "type": "string" - }, - "name": { - "maxLength": 100, - "type": "string" - }, - "roles": { - "$ref": "#/components/schemas/GroupApi.get_list.Role" - }, - "users": { - "$ref": "#/components/schemas/GroupApi.get_list.User" - } - }, - "required": ["name"], - "type": "object" - }, - "GroupApi.get_list.Role": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "GroupApi.get_list.User": { - "properties": { - "id": { - "type": "integer" - }, - "username": { - "maxLength": 128, - "type": "string" - } - }, - "required": ["username"], + "required": [ + "database_id", + "table_name" + ], "type": "object" }, - "GroupApi.post": { + "GroupPostSchema": { "properties": { "description": { "description": "Group description", @@ -6341,10 +7498,12 @@ "type": "array" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, - "GroupApi.put": { + "GroupPutSchema": { "properties": { "description": { "description": "Group description", @@ -6383,87 +7542,17 @@ }, "type": "object" }, - "GroupPostSchema": { + "GuestTokenCreate": { "properties": { - "description": { - "description": "Group description", - "maxLength": 512, - "minLength": 0, - "nullable": true, - "type": "string" - }, - "label": { - "description": "Group label", - "maxLength": 150, - "minLength": 0, - "nullable": true, - "type": "string" - }, - "name": { - "description": "Group name", - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "roles": { - "description": "Group roles", - "items": { - "type": "integer" - }, - "type": "array" - }, - "users": { - "description": "Group users", + "datasets": { + "default": null, + "description": "Optional allowlist of dataset IDs the guest may access. When omitted all datasets linked to the embedded dashboard are accessible, preserving the default behaviour.", "items": { "type": "integer" }, - "type": "array" - } - }, - "required": ["name"], - "type": "object" - }, - "GroupPutSchema": { - "properties": { - "description": { - "description": "Group description", - "maxLength": 512, - "minLength": 0, - "nullable": true, - "type": "string" - }, - "label": { - "description": "Group label", - "maxLength": 150, - "minLength": 0, "nullable": true, - "type": "string" - }, - "name": { - "description": "Group name", - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "roles": { - "description": "Group roles", - "items": { - "type": "integer" - }, "type": "array" }, - "users": { - "description": "Group users", - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "GuestTokenCreate": { - "properties": { "resources": { "items": { "$ref": "#/components/schemas/Resource" @@ -6477,137 +7566,27 @@ "type": "array" }, "user": { - "$ref": "#/components/schemas/User3" + "$ref": "#/components/schemas/User2" } }, - "required": ["resources", "rls"], + "required": [ + "resources", + "rls" + ], "type": "object" }, - "ImportV1Database": { + "IdentifierQuote": { "properties": { - "allow_csv_upload": { - "type": "boolean" - }, - "allow_ctas": { - "type": "boolean" - }, - "allow_cvas": { - "type": "boolean" - }, - "allow_dml": { - "type": "boolean" - }, - "allow_run_async": { - "type": "boolean" - }, - "cache_timeout": { - "nullable": true, - "type": "integer" - }, - "configuration_method": { - "default": "sqlalchemy_form", - "enum": ["sqlalchemy_form", "dynamic_form", null], - "nullable": true - }, - "database_name": { - "type": "string" - }, - "encrypted_extra": { - "nullable": true, - "type": "string" - }, - "expose_in_sqllab": { - "type": "boolean" - }, - "external_url": { - "nullable": true, - "type": "string" - }, - "extra": { - "$ref": "#/components/schemas/ImportV1DatabaseExtra" - }, - "impersonate_user": { - "type": "boolean" - }, - "is_managed_externally": { - "nullable": true, - "type": "boolean" - }, - "password": { - "nullable": true, - "type": "string" - }, - "sqlalchemy_uri": { - "type": "string" - }, - "ssh_tunnel": { - "allOf": [ - { - "$ref": "#/components/schemas/DatabaseSSHTunnel" - } - ], - "nullable": true - }, - "uuid": { - "format": "uuid", - "type": "string" - }, - "version": { + "end": { + "description": "Character that closes a quoted identifier", "type": "string" - } - }, - "required": ["database_name", "sqlalchemy_uri", "uuid", "version"], - "type": "object" - }, - "ImportV1DatabaseExtra": { - "properties": { - "allow_multi_catalog": { - "type": "boolean" - }, - "allows_virtual_table_explore": { - "type": "boolean" - }, - "cancel_query_on_windows_unload": { - "type": "boolean" - }, - "cost_estimate_enabled": { - "type": "boolean" - }, - "disable_data_preview": { - "type": "boolean" - }, - "disable_drill_to_detail": { - "type": "boolean" - }, - "engine_params": { - "additionalProperties": {}, - "type": "object" - }, - "metadata_cache_timeout": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "metadata_params": { - "additionalProperties": {}, - "type": "object" }, - "per_user_caching": { + "escape_by_doubling": { + "description": "Whether an embedded closing-quote character is escaped by doubling it (True) or with a backslash escape (False, e.g. BigQuery's GoogleSQL backtick identifiers)", "type": "boolean" }, - "schema_options": { - "additionalProperties": {}, - "type": "object" - }, - "schemas_allowed_for_csv_upload": { - "items": { - "type": "string" - }, - "type": "array" - }, - "version": { - "nullable": true, + "start": { + "description": "Character that opens a quoted identifier", "type": "string" } }, @@ -6649,7 +7628,10 @@ "user": { "$ref": "#/components/schemas/LogRestApi.get.User" }, - "user_id": {} + "user_id": { + "default": null, + "nullable": true + } }, "type": "object" }, @@ -6668,7 +7650,11 @@ "type": "string" } }, - "required": ["first_name", "last_name", "username"], + "required": [ + "first_name", + "last_name", + "username" + ], "type": "object" }, "LogRestApi.get_list": { @@ -6707,7 +7693,10 @@ "user": { "$ref": "#/components/schemas/LogRestApi.get_list.User" }, - "user_id": {} + "user_id": { + "default": null, + "nullable": true + } }, "type": "object" }, @@ -6726,7 +7715,11 @@ "type": "string" } }, - "required": ["first_name", "last_name", "username"], + "required": [ + "first_name", + "last_name", + "username" + ], "type": "object" }, "LogRestApi.post": { @@ -6769,7 +7762,9 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, "PermissionApi.get_list": { @@ -6782,7 +7777,9 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, "PermissionApi.post": { @@ -6792,7 +7789,9 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, "PermissionApi.put": { @@ -6802,134 +7801,54 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, - "PermissionViewMenuApi.get": { + "QueryExecutionResponseSchema": { "properties": { - "id": { + "columns": { + "items": { + "type": "object" + }, + "type": "array" + }, + "data": { + "items": { + "type": "object" + }, + "type": "array" + }, + "expanded_columns": { + "items": { + "type": "object" + }, + "type": "array" + }, + "query": { + "$ref": "#/components/schemas/QueryResult" + }, + "query_id": { "type": "integer" }, - "permission": { - "$ref": "#/components/schemas/PermissionViewMenuApi.get.Permission" + "selected_columns": { + "items": { + "type": "object" + }, + "type": "array" }, - "view_menu": { - "$ref": "#/components/schemas/PermissionViewMenuApi.get.ViewMenu" - } - }, - "type": "object" - }, - "PermissionViewMenuApi.get.Permission": { - "properties": { - "name": { - "maxLength": 100, + "status": { "type": "string" } }, - "required": ["name"], "type": "object" }, - "PermissionViewMenuApi.get.ViewMenu": { + "QueryRestApi.get": { "properties": { - "name": { - "maxLength": 250, - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "PermissionViewMenuApi.get_list": { - "properties": { - "id": { - "type": "integer" - }, - "permission": { - "$ref": "#/components/schemas/PermissionViewMenuApi.get_list.Permission" - }, - "view_menu": { - "$ref": "#/components/schemas/PermissionViewMenuApi.get_list.ViewMenu" - } - }, - "type": "object" - }, - "PermissionViewMenuApi.get_list.Permission": { - "properties": { - "name": { - "maxLength": 100, - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "PermissionViewMenuApi.get_list.ViewMenu": { - "properties": { - "name": { - "maxLength": 250, - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "PermissionViewMenuApi.post": { - "properties": { - "permission_id": {}, - "view_menu_id": {} - }, - "type": "object" - }, - "PermissionViewMenuApi.put": { - "properties": { - "permission_id": {}, - "view_menu_id": {} - }, - "type": "object" - }, - "QueryExecutionResponseSchema": { - "properties": { - "columns": { - "items": { - "type": "object" - }, - "type": "array" - }, - "data": { - "items": { - "type": "object" - }, - "type": "array" - }, - "expanded_columns": { - "items": { - "type": "object" - }, - "type": "array" - }, - "query": { - "$ref": "#/components/schemas/QueryResult" - }, - "query_id": { - "type": "integer" - }, - "selected_columns": { - "items": { - "type": "object" - }, - "type": "array" - }, - "status": { - "type": "string" - } - }, - "type": "object" - }, - "QueryRestApi.get": { - "properties": { - "changed_on": { - "format": "date-time", - "nullable": true, + "changed_on": { + "format": "date-time", + "nullable": true, "type": "string" }, "client_id": { @@ -7033,7 +7952,10 @@ "readOnly": true } }, - "required": ["client_id", "database"], + "required": [ + "client_id", + "database" + ], "type": "object" }, "QueryRestApi.get.Database": { @@ -7074,6 +7996,9 @@ "sql_tables": { "readOnly": true }, + "start_running_time": { + "type": "number" + }, "start_time": { "type": "number" }, @@ -7090,7 +8015,7 @@ "type": "string" }, "user": { - "$ref": "#/components/schemas/User1" + "$ref": "#/components/schemas/User" } }, "type": "object" @@ -7214,7 +8139,10 @@ }, "filter_type": { "description": "filter_type_description", - "enum": ["Regular", "Base"], + "enum": [ + "Regular", + "Base" + ], "type": "string" }, "group_key": { @@ -7229,9 +8157,9 @@ "description": "name_description", "type": "string" }, - "roles": { + "subjects": { "items": { - "$ref": "#/components/schemas/Roles1" + "$ref": "#/components/schemas/SubjectResponse" }, "type": "array" }, @@ -7247,7 +8175,7 @@ "RLSRestApi.get_list": { "properties": { "changed_by": { - "$ref": "#/components/schemas/User1" + "$ref": "#/components/schemas/User" }, "changed_on_delta_humanized": { "readOnly": true @@ -7262,7 +8190,10 @@ }, "filter_type": { "description": "filter_type_description", - "enum": ["Regular", "Base"], + "enum": [ + "Regular", + "Base" + ], "type": "string" }, "group_key": { @@ -7277,9 +8208,9 @@ "description": "name_description", "type": "string" }, - "roles": { + "subjects": { "items": { - "$ref": "#/components/schemas/Roles1" + "$ref": "#/components/schemas/SubjectResponse" }, "type": "array" }, @@ -7305,7 +8236,10 @@ }, "filter_type": { "description": "filter_type_description", - "enum": ["Regular", "Base"], + "enum": [ + "Regular", + "Base" + ], "type": "string" }, "group_key": { @@ -7319,8 +8253,8 @@ "minLength": 1, "type": "string" }, - "roles": { - "description": "roles_description", + "subjects": { + "description": "Subjects (users, roles, groups) associated with this RLS rule. For regular filters, the rule applies to these subjects. For base filters, these subjects are excluded from the filter.", "items": { "type": "integer" }, @@ -7335,7 +8269,12 @@ "type": "array" } }, - "required": ["clause", "filter_type", "name", "roles", "tables"], + "required": [ + "clause", + "filter_type", + "name", + "tables" + ], "type": "object" }, "RLSRestApi.put": { @@ -7351,7 +8290,10 @@ }, "filter_type": { "description": "filter_type_description", - "enum": ["Regular", "Base"], + "enum": [ + "Regular", + "Base" + ], "type": "string" }, "group_key": { @@ -7365,8 +8307,8 @@ "minLength": 1, "type": "string" }, - "roles": { - "description": "roles_description", + "subjects": { + "description": "Subjects (users, roles, groups) associated with this RLS rule. For regular filters, the rule applies to these subjects. For base filters, these subjects are excluded from the filter.", "items": { "type": "integer" }, @@ -7377,6 +8319,7 @@ "items": { "type": "integer" }, + "minItems": 1, "type": "array" } }, @@ -7525,7 +8468,10 @@ "type": "string" } }, - "required": ["scheduled_dttm", "state"], + "required": [ + "scheduled_dttm", + "state" + ], "type": "object" }, "ReportExecutionLogRestApi.get_list": { @@ -7569,7 +8515,10 @@ "type": "string" } }, - "required": ["scheduled_dttm", "state"], + "required": [ + "scheduled_dttm", + "state" + ], "type": "object" }, "ReportExecutionLogRestApi.post": { @@ -7595,11 +8544,18 @@ }, "type": { "description": "The recipient type, check spec for valid options", - "enum": ["Email", "Slack", "SlackV2", "Webhook"], + "enum": [ + "Email", + "Slack", + "SlackV2", + "Webhook" + ], "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, "ReportRecipientConfigJSON": { @@ -7652,6 +8608,12 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get.Subject" + }, + "type": "array" + }, "email_subject": { "maxLength": 255, "nullable": true, @@ -7671,6 +8633,10 @@ "id": { "type": "integer" }, + "include_cta": { + "nullable": true, + "type": "boolean" + }, "last_eval_dttm": { "format": "date-time", "nullable": true, @@ -7697,17 +8663,32 @@ "maxLength": 150, "type": "string" }, - "owners": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.User" - }, "recipients": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.ReportRecipients" + "items": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get.ReportRecipients" + }, + "type": "array" }, "report_format": { "maxLength": 50, "nullable": true, "type": "string" }, + "retry_max_attempts": { + "type": "integer" + }, + "retry_notify_owners": { + "type": "boolean" + }, + "retry_notify_recipients": { + "type": "boolean" + }, + "retry_on_failure": { + "type": "boolean" + }, + "send_failed_reports": { + "type": "boolean" + }, "sql": { "nullable": true, "type": "string" @@ -7734,7 +8715,12 @@ "type": "integer" } }, - "required": ["crontab", "name", "recipients", "type"], + "required": [ + "crontab", + "name", + "recipients", + "type" + ], "type": "object" }, "ReportScheduleRestApi.get.Dashboard": { @@ -7760,7 +8746,9 @@ "type": "integer" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "ReportScheduleRestApi.get.ReportRecipients": { @@ -7777,7 +8765,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, "ReportScheduleRestApi.get.Slice": { @@ -7798,21 +8788,23 @@ }, "type": "object" }, - "ReportScheduleRestApi.get.User": { + "ReportScheduleRestApi.get.Subject": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, "id": { "type": "integer" }, - "last_name": { - "maxLength": 64, + "label": { + "maxLength": 255, "type": "string" + }, + "type": { + "type": "integer" } }, - "required": ["first_name", "last_name"], + "required": [ + "label", + "type" + ], "type": "object" }, "ReportScheduleRestApi.get_list": { @@ -7832,7 +8824,10 @@ "changed_on_delta_humanized": { "readOnly": true }, - "chart_id": {}, + "chart_id": { + "default": null, + "nullable": true + }, "created_by": { "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User1" }, @@ -7853,11 +8848,20 @@ "crontab_humanized": { "readOnly": true }, - "dashboard_id": {}, + "dashboard_id": { + "default": null, + "nullable": true + }, "description": { "nullable": true, "type": "string" }, + "editors": { + "items": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.Subject" + }, + "type": "array" + }, "extra": { "readOnly": true }, @@ -7878,11 +8882,26 @@ "maxLength": 150, "type": "string" }, - "owners": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User2" - }, "recipients": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.ReportRecipients" + "items": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.ReportRecipients" + }, + "type": "array" + }, + "retry_max_attempts": { + "type": "integer" + }, + "retry_notify_owners": { + "type": "boolean" + }, + "retry_notify_recipients": { + "type": "boolean" + }, + "retry_on_failure": { + "type": "boolean" + }, + "send_failed_reports": { + "type": "boolean" }, "timezone": { "maxLength": 100, @@ -7893,7 +8912,12 @@ "type": "string" } }, - "required": ["crontab", "name", "recipients", "type"], + "required": [ + "crontab", + "name", + "recipients", + "type" + ], "type": "object" }, "ReportScheduleRestApi.get_list.ReportRecipients": { @@ -7906,24 +8930,31 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, - "ReportScheduleRestApi.get_list.User": { + "ReportScheduleRestApi.get_list.Subject": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "id": { + "type": "integer" }, - "last_name": { - "maxLength": 64, + "label": { + "maxLength": 255, "type": "string" + }, + "type": { + "type": "integer" } }, - "required": ["first_name", "last_name"], + "required": [ + "label", + "type" + ], "type": "object" }, - "ReportScheduleRestApi.get_list.User1": { + "ReportScheduleRestApi.get_list.User": { "properties": { "first_name": { "maxLength": 64, @@ -7934,24 +8965,27 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "ReportScheduleRestApi.get_list.User2": { + "ReportScheduleRestApi.get_list.User1": { "properties": { "first_name": { "maxLength": 64, "type": "string" }, - "id": { - "type": "integer" - }, "last_name": { "maxLength": 64, "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "ReportScheduleRestApi.post": { @@ -7970,7 +9004,11 @@ }, "creation_method": { "description": "Creation method is used to inform the frontend whether the report/alert was created in the dashboard, chart, or alerts and reports UI.", - "enum": ["charts", "dashboards", "alerts_reports"] + "enum": [ + "charts", + "dashboards", + "alerts_reports" + ] }, "crontab": { "description": "A CRON expression.[Crontab Guru](https://crontab.guru/) is a helpful resource that can help you craft a CRON expression.", @@ -7998,6 +9036,13 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the report.", + "type": "integer" + }, + "type": "array" + }, "email_subject": { "description": "The report schedule subject line", "example": "[Report] Report name: Dashboard or chart name", @@ -8016,6 +9061,11 @@ "minimum": 1, "type": "integer" }, + "include_cta": { + "description": "Whether to include the call-to-action link back to Superset (e.g. 'Explore in Superset') in the delivered notifications", + "nullable": true, + "type": "boolean" + }, "log_retention": { "description": "How long to keep the logs around for this report (in days)", "example": 90, @@ -8029,13 +9079,6 @@ "minLength": 1, "type": "string" }, - "owners": { - "items": { - "description": "Owner are users ids allowed to delete or change this report. If left empty you will be one of the owners of the report.", - "type": "integer" - }, - "type": "array" - }, "recipients": { "items": { "$ref": "#/components/schemas/ReportRecipient" @@ -8043,15 +9086,42 @@ "type": "array" }, "report_format": { - "enum": ["PDF", "PNG", "CSV", "TEXT"], + "enum": [ + "PDF", + "PNG", + "CSV", + "XLSX", + "TEXT" + ], "type": "string" }, - "selected_tabs": { - "items": { - "type": "integer" - }, - "nullable": true, - "type": "array" + "retry_max_attempts": { + "default": 3, + "description": "Maximum number of retry attempts (1\u201310)", + "example": 3, + "maximum": 10, + "minimum": 1, + "type": "integer" + }, + "retry_notify_owners": { + "default": true, + "description": "Notify report owners on each retry attempt", + "type": "boolean" + }, + "retry_notify_recipients": { + "default": false, + "description": "Notify report recipients on each retry attempt", + "type": "boolean" + }, + "retry_on_failure": { + "default": false, + "description": "Enable automatic retries on report failure", + "type": "boolean" + }, + "send_failed_reports": { + "default": false, + "description": "Send the failed report to all recipients after retries are exhausted", + "type": "boolean" }, "sql": { "description": "A SQL statement that defines whether the alert should get triggered or not. The query is expected to return either NULL or a number value.", @@ -8663,7 +9733,10 @@ }, "type": { "description": "The report schedule type", - "enum": ["Alert", "Report"], + "enum": [ + "Alert", + "Report" + ], "type": "string" }, "validator_config_json": { @@ -8671,7 +9744,10 @@ }, "validator_type": { "description": "Determines when to trigger alert based off value from alert query. Alerts will be triggered with these validator types:\n- Not Null - When the return value is Not NULL, Empty, or 0\n- Operator - When `sql_return_value comparison_operator threshold` is True e.g. `50 <= 75`
Supports the comparison operators <, <=, >, >=, ==, and !=", - "enum": ["not null", "operator"], + "enum": [ + "not null", + "operator" + ], "type": "string" }, "working_timeout": { @@ -8681,7 +9757,11 @@ "type": "integer" } }, - "required": ["crontab", "name", "type"], + "required": [ + "crontab", + "name", + "type" + ], "type": "object" }, "ReportScheduleRestApi.put": { @@ -8700,7 +9780,12 @@ }, "creation_method": { "description": "Creation method is used to inform the frontend whether the report/alert was created in the dashboard, chart, or alerts and reports UI.", - "enum": ["charts", "dashboards", "alerts_reports", null], + "enum": [ + "charts", + "dashboards", + "alerts_reports", + null + ], "nullable": true }, "crontab": { @@ -8720,6 +9805,7 @@ "type": "integer" }, "database": { + "nullable": true, "type": "integer" }, "description": { @@ -8728,6 +9814,13 @@ "nullable": true, "type": "string" }, + "editors": { + "items": { + "description": "A list of subject IDs (users, roles, or groups) that can alter the report.", + "type": "integer" + }, + "type": "array" + }, "email_subject": { "description": "The report schedule subject line", "example": "[Report] Report name: Dashboard or chart name", @@ -8746,6 +9839,11 @@ "minimum": 1, "type": "integer" }, + "include_cta": { + "description": "Whether to include the call-to-action link back to Superset (e.g. 'Explore in Superset') in the delivered notifications", + "nullable": true, + "type": "boolean" + }, "log_retention": { "description": "How long to keep the logs around for this report (in days)", "example": 90, @@ -8758,13 +9856,6 @@ "minLength": 1, "type": "string" }, - "owners": { - "items": { - "description": "Owner are users ids allowed to delete or change this report. If left empty you will be one of the owners of the report.", - "type": "integer" - }, - "type": "array" - }, "recipients": { "items": { "$ref": "#/components/schemas/ReportRecipient" @@ -8772,9 +9863,38 @@ "type": "array" }, "report_format": { - "enum": ["PDF", "PNG", "CSV", "TEXT"], + "enum": [ + "PDF", + "PNG", + "CSV", + "XLSX", + "TEXT" + ], "type": "string" }, + "retry_max_attempts": { + "description": "Maximum number of retry attempts (1\u201310)", + "example": 3, + "maximum": 10, + "minimum": 1, + "type": "integer" + }, + "retry_notify_owners": { + "description": "Notify report owners on each retry attempt", + "type": "boolean" + }, + "retry_notify_recipients": { + "description": "Notify report recipients on each retry attempt", + "type": "boolean" + }, + "retry_on_failure": { + "description": "Enable automatic retries on report failure", + "type": "boolean" + }, + "send_failed_reports": { + "description": "Send the failed report to all recipients after retries are exhausted", + "type": "boolean" + }, "sql": { "description": "A SQL statement that defines whether the alert should get triggered or not. The query is expected to return either NULL or a number value.", "example": "SELECT value FROM time_series_table", @@ -9386,7 +10506,10 @@ }, "type": { "description": "The report schedule type", - "enum": ["Alert", "Report"], + "enum": [ + "Alert", + "Report" + ], "type": "string" }, "validator_config_json": { @@ -9394,7 +10517,11 @@ }, "validator_type": { "description": "Determines when to trigger alert based off value from alert query. Alerts will be triggered with these validator types:\n- Not Null - When the return value is Not NULL, Empty, or 0\n- Operator - When `sql_return_value comparison_operator threshold` is True e.g. `50 <= 75`
Supports the comparison operators <, <=, >, >=, ==, and !=", - "enum": ["not null", "operator", null], + "enum": [ + "not null", + "operator", + null + ], "nullable": true, "type": "string" }, @@ -9414,22 +10541,85 @@ "type": "string" }, "type": { - "enum": ["dashboard"] + "enum": [ + "dashboard" + ] + } + }, + "required": [ + "id", + "type" + ], + "type": "object" + }, + "RlsFilter": { + "properties": { + "clause": { + "description": "RLS filter clause.", + "nullable": true, + "type": "string" + }, + "filter_type": { + "description": "RLS filter type.", + "nullable": true, + "type": "string" + }, + "group_key": { + "description": "RLS filter group key.", + "nullable": true, + "type": "string" + }, + "id": { + "description": "RLS filter ID.", + "type": "integer" + }, + "inherited": { + "default": false, + "description": "If the filter is inherited from underlying physical tables.", + "type": "boolean" + }, + "name": { + "description": "RLS filter name.", + "type": "string" + }, + "roles": { + "default": [], + "description": "Roles associated with the RLS filter.", + "items": { + "$ref": "#/components/schemas/RlsRole" + }, + "type": "array" + } + }, + "type": "object" + }, + "RlsRole": { + "properties": { + "id": { + "description": "Role ID.", + "type": "integer" + }, + "name": { + "description": "Role name.", + "type": "string" } }, - "required": ["id", "type"], "type": "object" }, "RlsRule": { + "additionalProperties": false, "properties": { "clause": { "type": "string" }, "dataset": { + "minimum": 1, "type": "integer" } }, - "required": ["clause"], + "required": [ + "clause" + ], "type": "object" }, "RoleGroupPutSchema": { @@ -9442,7 +10632,9 @@ "type": "array" } }, - "required": ["group_ids"], + "required": [ + "group_ids" + ], "type": "object" }, "RolePermissionListSchema": { @@ -9469,7 +10661,9 @@ "type": "array" } }, - "required": ["permission_view_menu_ids"], + "required": [ + "permission_view_menu_ids" + ], "type": "object" }, "RoleResponseSchema": { @@ -9505,29 +10699,9 @@ "type": "array" } }, - "required": ["user_ids"], - "type": "object" - }, - "Roles": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "Roles1": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, + "required": [ + "user_ids" + ], "type": "object" }, "RolesResponseSchema": { @@ -9550,6 +10724,72 @@ }, "type": "object" }, + "SQLLabBootstrapDatabase": { + "properties": { + "allow_ctas": { + "type": "boolean" + }, + "allow_cvas": { + "type": "boolean" + }, + "allow_dml": { + "type": "boolean" + }, + "allow_file_upload": { + "type": "boolean" + }, + "allow_multi_catalog": { + "type": "boolean" + }, + "allow_run_async": { + "type": "boolean" + }, + "allows_cost_estimate": { + "nullable": true, + "type": "boolean" + }, + "allows_subquery": { + "type": "boolean" + }, + "allows_virtual_table_explore": { + "type": "boolean" + }, + "backend": { + "description": "The database backend", + "type": "string" + }, + "database_name": { + "description": "The database name", + "type": "string" + }, + "disable_data_preview": { + "type": "boolean" + }, + "disable_drill_to_detail": { + "type": "boolean" + }, + "engine_information": { + "allOf": [ + { + "$ref": "#/components/schemas/EngineInformation" + } + ], + "description": "Dialect capabilities, including identifier_quote" + }, + "expose_in_sqllab": { + "type": "boolean" + }, + "force_ctas_schema": { + "nullable": true, + "type": "string" + }, + "id": { + "description": "The database id", + "type": "integer" + } + }, + "type": "object" + }, "SQLLabBootstrapSchema": { "properties": { "active_tab": { @@ -9557,7 +10797,7 @@ }, "databases": { "additionalProperties": { - "$ref": "#/components/schemas/ImportV1Database" + "$ref": "#/components/schemas/SQLLabBootstrapDatabase" }, "type": "object" }, @@ -9641,7 +10881,9 @@ "type": "integer" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "SavedQueryRestApi.get.User": { @@ -9658,7 +10900,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "SavedQueryRestApi.get.User1": { @@ -9675,7 +10920,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "SavedQueryRestApi.get_list": { @@ -9707,7 +10955,10 @@ "database": { "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Database" }, - "db_id": {}, + "db_id": { + "default": null, + "nullable": true + }, "description": { "nullable": true, "type": "string" @@ -9743,7 +10994,10 @@ "readOnly": true }, "tags": { - "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Tag" + "items": { + "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Tag" + }, + "type": "array" } }, "type": "object" @@ -9758,7 +11012,9 @@ "type": "integer" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "SavedQueryRestApi.get_list.Tag": { @@ -9772,7 +11028,12 @@ "type": "string" }, "type": { - "enum": [1, 2, 3, 4] + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" @@ -9791,7 +11052,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "SavedQueryRestApi.get_list.User1": { @@ -9808,7 +11072,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "SavedQueryRestApi.post": { @@ -9818,7 +11085,10 @@ "nullable": true, "type": "string" }, - "db_id": {}, + "db_id": { + "default": null, + "nullable": true + }, "description": { "nullable": true, "type": "string" @@ -9855,7 +11125,10 @@ "nullable": true, "type": "string" }, - "db_id": {}, + "db_id": { + "default": null, + "nullable": true + }, "description": { "nullable": true, "type": "string" @@ -9945,6 +11218,13 @@ "description": "The URL for editing the slice.", "type": "string" }, + "editors": { + "description": "List of editors", + "items": { + "$ref": "#/components/schemas/SubjectResponse" + }, + "type": "array" + }, "form_data": { "description": "Form data associated with the slice.", "type": "object" @@ -9957,13 +11237,6 @@ "description": "Last modification in human readable form.", "type": "string" }, - "owners": { - "description": "Owners identifiers.", - "items": { - "type": "integer" - }, - "type": "array" - }, "query_context": { "description": "The context associated with the query.", "type": "object" @@ -10016,7 +11289,11 @@ "type": "string" } }, - "required": ["dbId", "name", "sql"], + "required": [ + "dbId", + "name", + "sql" + ], "type": "object" }, "StopQuerySchema": { @@ -10027,117 +11304,102 @@ }, "type": "object" }, - "SupersetRoleApi.get": { + "SubjectResponse": { "properties": { "id": { "type": "integer" }, - "name": { - "maxLength": 64, + "img": { "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "SupersetRoleApi.get_list": { - "properties": { - "id": { - "type": "integer" }, - "name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "SupersetRoleApi.post": { - "properties": { - "name": { - "maxLength": 64, + "label": { "type": "string" - } - }, - "required": ["name"], - "type": "object" - }, - "SupersetRoleApi.put": { - "properties": { - "name": { - "maxLength": 64, + }, + "secondary_label": { "type": "string" + }, + "type": { + "type": "integer" } }, - "required": ["name"], "type": "object" }, - "SupersetUserApi.get": { + "SubjectRestApi.get": { "properties": { "active": { "nullable": true, "type": "boolean" }, "changed_by": { - "$ref": "#/components/schemas/SupersetUserApi.get.User1" + "$ref": "#/components/schemas/SubjectRestApi.get.User1" }, "changed_on": { "format": "date-time", "nullable": true, "type": "string" }, - "created_by": { - "$ref": "#/components/schemas/SupersetUserApi.get.User" - }, "created_on": { "format": "date-time", "nullable": true, "type": "string" }, - "email": { - "maxLength": 320, + "extra_search": { + "maxLength": 255, + "nullable": true, "type": "string" }, - "fail_login_count": { - "nullable": true, - "type": "integer" + "group": { + "$ref": "#/components/schemas/SubjectRestApi.get.Group" }, - "first_name": { - "maxLength": 64, - "type": "string" - }, - "groups": { - "$ref": "#/components/schemas/SupersetUserApi.get.Group" + "group_id": { + "default": null, + "nullable": true }, "id": { "type": "integer" }, - "last_login": { - "format": "date-time", - "nullable": true, - "type": "string" + "img": { + "readOnly": true }, - "last_name": { - "maxLength": 64, + "label": { + "maxLength": 255, "type": "string" }, - "login_count": { + "role": { + "$ref": "#/components/schemas/SubjectRestApi.get.Role" + }, + "role_id": { + "default": null, + "nullable": true + }, + "secondary_label": { + "maxLength": 255, "nullable": true, + "type": "string" + }, + "type": { "type": "integer" }, - "roles": { - "$ref": "#/components/schemas/SupersetUserApi.get.Role" + "user": { + "$ref": "#/components/schemas/SubjectRestApi.get.User" }, - "username": { - "maxLength": 128, + "user_id": { + "default": null, + "nullable": true + }, + "uuid": { + "format": "uuid", + "nullable": true, "type": "string" } }, - "required": ["email", "first_name", "last_name", "username"], + "required": [ + "label", + "type" + ], "type": "object" }, - "SupersetUserApi.get.Group": { + "SubjectRestApi.get.Group": { "properties": { "description": { "maxLength": 512, @@ -10157,10 +11419,12 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, - "SupersetUserApi.get.Role": { + "SubjectRestApi.get.Role": { "properties": { "id": { "type": "integer" @@ -10170,90 +11434,162 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, - "SupersetUserApi.get.User": { + "SubjectRestApi.get.User": { "properties": { + "active": { + "nullable": true, + "type": "boolean" + }, + "email": { + "maxLength": 320, + "type": "string" + }, + "first_name": { + "maxLength": 64, + "type": "string" + }, "id": { "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + }, + "username": { + "maxLength": 128, + "type": "string" } }, + "required": [ + "email", + "first_name", + "last_name", + "username" + ], "type": "object" }, - "SupersetUserApi.get.User1": { + "SubjectRestApi.get.User1": { "properties": { - "id": { - "type": "integer" + "first_name": { + "maxLength": 64, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "SupersetUserApi.get_list": { + "SubjectRestApi.get_list": { "properties": { "active": { "nullable": true, "type": "boolean" }, "changed_by": { - "$ref": "#/components/schemas/SupersetUserApi.get_list.User1" + "$ref": "#/components/schemas/SubjectRestApi.get_list.User" }, "changed_on": { "format": "date-time", "nullable": true, "type": "string" }, - "created_by": { - "$ref": "#/components/schemas/SupersetUserApi.get_list.User" - }, "created_on": { "format": "date-time", "nullable": true, "type": "string" }, - "email": { - "maxLength": 320, + "extra_search": { + "maxLength": 255, + "nullable": true, "type": "string" }, - "fail_login_count": { - "nullable": true, + "group_id": { + "default": null, + "nullable": true + }, + "id": { "type": "integer" }, - "first_name": { - "maxLength": 64, + "img": { + "readOnly": true + }, + "label": { + "maxLength": 255, "type": "string" }, - "groups": { - "$ref": "#/components/schemas/SupersetUserApi.get_list.Group" + "role_id": { + "default": null, + "nullable": true }, - "id": { + "secondary_label": { + "maxLength": 255, + "nullable": true, + "type": "string" + }, + "type": { "type": "integer" }, - "last_login": { - "format": "date-time", + "user_id": { + "default": null, + "nullable": true + }, + "uuid": { + "format": "uuid", "nullable": true, "type": "string" + } + }, + "required": [ + "label", + "type" + ], + "type": "object" + }, + "SubjectRestApi.get_list.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" }, "last_name": { "maxLength": 64, "type": "string" - }, - "login_count": { - "nullable": true, + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "SubjectRestApi.post": { + "properties": { + "id": { "type": "integer" - }, - "roles": { - "$ref": "#/components/schemas/SupersetUserApi.get_list.Role" - }, - "username": { - "maxLength": 128, - "type": "string" } }, - "required": ["email", "first_name", "last_name", "username"], "type": "object" }, - "SupersetUserApi.get_list.Group": { + "SubjectRestApi.put": { + "properties": { + "id": { + "type": "integer" + } + }, + "type": "object" + }, + "SupersetGroupApi.get": { "properties": { "description": { "maxLength": 512, @@ -10271,12 +11607,26 @@ "name": { "maxLength": 100, "type": "string" + }, + "roles": { + "items": { + "$ref": "#/components/schemas/SupersetGroupApi.get.Role" + }, + "type": "array" + }, + "users": { + "items": { + "$ref": "#/components/schemas/SupersetGroupApi.get.User" + }, + "type": "array" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, - "SupersetUserApi.get_list.Role": { + "SupersetGroupApi.get.Role": { "properties": { "id": { "type": "integer" @@ -10286,1790 +11636,4224 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, - "SupersetUserApi.get_list.User": { + "SupersetGroupApi.get.User": { "properties": { "id": { "type": "integer" + }, + "username": { + "maxLength": 128, + "type": "string" } }, + "required": [ + "username" + ], "type": "object" }, - "SupersetUserApi.get_list.User1": { + "SupersetGroupApi.get_list": { "properties": { + "description": { + "maxLength": 512, + "nullable": true, + "type": "string" + }, "id": { "type": "integer" - } - }, - "type": "object" - }, - "SupersetUserApi.post": { - "properties": { - "active": { - "description": "Is user active?It's not a good policy to remove a user, just make it inactive", - "type": "boolean" }, - "email": { - "description": "The user's email", + "label": { + "maxLength": 150, + "nullable": true, "type": "string" }, - "first_name": { - "description": "The user's first name", + "name": { + "maxLength": 100, "type": "string" }, - "groups": { - "description": "The user's roles", + "roles": { "items": { - "type": "integer" + "$ref": "#/components/schemas/SupersetGroupApi.get_list.Role" }, "type": "array" }, - "last_name": { - "description": "The user's last name", - "type": "string" - }, - "password": { - "description": "The user's password for authentication", - "type": "string" - }, - "roles": { - "description": "The user's roles", + "users": { "items": { - "type": "integer" + "$ref": "#/components/schemas/SupersetGroupApi.get_list.User" }, "type": "array" - }, - "username": { - "description": "The user's username", - "maxLength": 250, - "minLength": 1, - "type": "string" } }, "required": [ - "email", - "first_name", - "last_name", - "password", - "username" + "name" ], "type": "object" }, - "SupersetUserApi.put": { + "SupersetGroupApi.get_list.Role": { "properties": { - "active": { - "description": "Is user active?It's not a good policy to remove a user, just make it inactive", - "type": "boolean" + "id": { + "type": "integer" }, - "email": { - "description": "The user's email", + "name": { + "maxLength": 64, "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "SupersetGroupApi.get_list.User": { + "properties": { + "id": { + "type": "integer" }, - "first_name": { - "description": "The user's first name", + "username": { + "maxLength": 128, + "type": "string" + } + }, + "required": [ + "username" + ], + "type": "object" + }, + "SupersetGroupApi.post": { + "properties": { + "description": { + "description": "Group description", + "maxLength": 512, + "minLength": 0, + "nullable": true, "type": "string" }, - "groups": { - "description": "The user's roles", - "items": { - "type": "integer" - }, - "type": "array" - }, - "last_name": { - "description": "The user's last name", + "label": { + "description": "Group label", + "maxLength": 150, + "minLength": 0, + "nullable": true, "type": "string" }, - "password": { - "description": "The user's password for authentication", + "name": { + "description": "Group name", + "maxLength": 100, + "minLength": 1, "type": "string" }, "roles": { - "description": "The user's roles", + "description": "Group roles", "items": { "type": "integer" }, "type": "array" }, - "username": { - "description": "The user's username", - "maxLength": 250, - "minLength": 1, - "type": "string" - } - }, - "type": "object" - }, - "Tab": { - "properties": { - "children": { - "items": { - "$ref": "#/components/schemas/Tab" - }, - "type": "array" - }, - "parents": { + "users": { + "description": "Group users", "items": { - "type": "string" + "type": "integer" }, "type": "array" - }, - "title": { - "type": "string" - }, - "value": { - "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TabState": { + "SupersetGroupApi.put": { "properties": { - "active": { - "type": "boolean" - }, - "autorun": { - "type": "boolean" - }, - "database_id": { - "type": "integer" - }, - "extra_json": { - "type": "object" - }, - "hide_left_bar": { - "type": "boolean" - }, - "id": { + "description": { + "description": "Group description", + "maxLength": 512, + "minLength": 0, + "nullable": true, "type": "string" }, "label": { - "type": "string" - }, - "latest_query": { - "$ref": "#/components/schemas/QueryResult" - }, - "query_limit": { - "type": "integer" - }, - "saved_query": { + "description": "Group label", + "maxLength": 150, + "minLength": 0, "nullable": true, - "type": "object" - }, - "schema": { "type": "string" }, - "sql": { + "name": { + "description": "Group name", + "maxLength": 100, + "minLength": 1, "type": "string" }, - "table_schemas": { + "roles": { + "description": "Group roles", "items": { - "$ref": "#/components/schemas/Table" + "type": "integer" }, "type": "array" }, - "user_id": { - "type": "integer" + "users": { + "description": "Group users", + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "Table": { + "SupersetPermissionViewMenuApi.get": { "properties": { - "database_id": { - "type": "integer" - }, - "description": { - "type": "string" - }, - "expanded": { - "type": "boolean" - }, "id": { "type": "integer" }, - "schema": { - "type": "string" - }, - "tab_state_id": { - "type": "integer" + "permission": { + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.get.Permission" }, - "table": { - "type": "string" + "view_menu": { + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.get.ViewMenu" } }, + "required": [ + "permission", + "view_menu" + ], "type": "object" }, - "TableExtraMetadataResponseSchema": { + "SupersetPermissionViewMenuApi.get.Permission": { "properties": { - "clustering": { - "type": "object" - }, - "metadata": { - "type": "object" - }, - "partitions": { - "type": "object" + "name": { + "maxLength": 100, + "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TableMetadataColumnsResponse": { + "SupersetPermissionViewMenuApi.get.ViewMenu": { "properties": { - "duplicates_constraint": { - "type": "string" - }, - "keys": { - "description": "", - "items": { - "type": "string" - }, - "type": "array" - }, - "longType": { - "description": "The actual backend long type for the column", - "type": "string" - }, "name": { - "description": "The column name", - "type": "string" - }, - "type": { - "description": "The column type", + "maxLength": 250, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TableMetadataForeignKeysIndexesResponse": { + "SupersetPermissionViewMenuApi.get_list": { "properties": { - "column_names": { - "items": { - "description": "A list of column names that compose the foreign key or index", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": "The name of the foreign key or index", - "type": "string" - }, - "options": { - "$ref": "#/components/schemas/TableMetadataOptionsResponse" - }, - "referred_columns": { - "items": { - "type": "string" - }, - "type": "array" - }, - "referred_schema": { - "type": "string" + "id": { + "type": "integer" }, - "referred_table": { - "type": "string" + "permission": { + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.get_list.Permission" }, - "type": { - "type": "string" + "view_menu": { + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.get_list.ViewMenu" } }, + "required": [ + "permission", + "view_menu" + ], "type": "object" }, - "TableMetadataOptionsResponse": { + "SupersetPermissionViewMenuApi.get_list.Permission": { "properties": { - "deferrable": { - "type": "boolean" - }, - "initially": { - "type": "boolean" - }, - "match": { - "type": "boolean" - }, - "ondelete": { - "type": "boolean" - }, - "onupdate": { - "type": "boolean" + "name": { + "maxLength": 100, + "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TableMetadataPrimaryKeyResponse": { + "SupersetPermissionViewMenuApi.get_list.ViewMenu": { "properties": { - "column_names": { - "items": { - "description": "A list of column names that compose the primary key", - "type": "string" - }, - "type": "array" - }, "name": { - "description": "The primary key index name", - "type": "string" - }, - "type": { + "maxLength": 250, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TableMetadataResponseSchema": { + "SupersetPermissionViewMenuApi.post": { "properties": { - "columns": { - "description": "A list of columns and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataColumnsResponse" - }, - "type": "array" + "permission_id": { + "default": null, + "nullable": true }, - "foreignKeys": { - "description": "A list of foreign keys and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" - }, - "type": "array" - }, - "indexes": { - "description": "A list of indexes and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" - }, - "type": "array" - }, - "name": { - "description": "The name of the table", - "type": "string" - }, - "primaryKey": { - "allOf": [ - { - "$ref": "#/components/schemas/TableMetadataPrimaryKeyResponse" - } - ], - "description": "Primary keys metadata" - }, - "selectStar": { - "description": "SQL select star", - "type": "string" - } - }, - "type": "object" - }, - "Tables": { - "properties": { - "id": { - "type": "integer" - }, - "schema": { - "type": "string" - }, - "table_name": { - "type": "string" + "view_menu_id": { + "default": null, + "nullable": true } }, "type": "object" }, - "TabsPayloadSchema": { + "SupersetPermissionViewMenuApi.put": { "properties": { - "all_tabs": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "permission_id": { + "default": null, + "nullable": true }, - "tab_tree": { - "items": { - "$ref": "#/components/schemas/Tab" - }, - "type": "array" + "view_menu_id": { + "default": null, + "nullable": true } }, "type": "object" }, - "Tag": { + "SupersetRoleApi.get": { "properties": { "id": { "type": "integer" }, "name": { + "maxLength": 64, "type": "string" - }, - "type": { - "enum": [1, 2, 3, 4] } }, + "required": [ + "name" + ], "type": "object" }, - "Tag1": { + "SupersetRoleApi.get_list": { "properties": { "id": { "type": "integer" }, "name": { + "maxLength": 64, "type": "string" - }, - "type": { - "enum": [1, 2, 3, 4] } }, + "required": [ + "name" + ], "type": "object" }, - "TagGetResponseSchema": { + "SupersetRoleApi.post": { "properties": { - "id": { - "type": "integer" - }, "name": { - "type": "string" - }, - "type": { + "maxLength": 64, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TagObject": { + "SupersetRoleApi.put": { "properties": { - "description": { - "nullable": true, - "type": "string" - }, "name": { - "minLength": 1, + "maxLength": 64, "type": "string" - }, - "objects_to_tag": { - "description": "Objects to tag", - "items": {}, - "type": "array" } }, + "required": [ + "name" + ], "type": "object" }, - "TagPostBulkResponseObject": { + "SupersetUserApi.get": { "properties": { - "objects_skipped": { - "description": "Objects to tag", - "items": {}, - "type": "array" + "active": { + "nullable": true, + "type": "boolean" }, - "objects_tagged": { - "description": "Objects to tag", - "items": {}, - "type": "array" - } - }, - "type": "object" - }, - "TagPostBulkResponseSchema": { - "properties": { - "result": { - "$ref": "#/components/schemas/TagPostBulkResponseObject" - } - }, - "type": "object" - }, - "TagPostBulkSchema": { - "properties": { - "tags": { - "items": { - "$ref": "#/components/schemas/TagObject" - }, - "type": "array" - } - }, - "type": "object" - }, - "TagRestApi.get": { - "properties": { "changed_by": { - "$ref": "#/components/schemas/TagRestApi.get.User" + "$ref": "#/components/schemas/SupersetUserApi.get.User1" }, - "changed_on_delta_humanized": { - "readOnly": true + "changed_on": { + "format": "date-time", + "nullable": true, + "type": "string" }, "created_by": { - "$ref": "#/components/schemas/TagRestApi.get.User1" - }, - "created_on_delta_humanized": { - "readOnly": true + "$ref": "#/components/schemas/SupersetUserApi.get.User" }, - "description": { + "created_on": { + "format": "date-time", "nullable": true, "type": "string" }, - "id": { - "type": "integer" + "email": { + "maxLength": 320, + "type": "string" }, - "name": { - "maxLength": 250, + "fail_login_count": { "nullable": true, - "type": "string" + "type": "integer" }, - "type": { - "enum": [1, 2, 3, 4] - } - }, - "type": "object" - }, - "TagRestApi.get.User": { - "properties": { "first_name": { "maxLength": 64, "type": "string" }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "TagRestApi.get.User1": { - "properties": { - "first_name": { - "maxLength": 64, + "groups": { + "items": { + "$ref": "#/components/schemas/SupersetUserApi.get.Group" + }, + "type": "array" + }, + "id": { + "type": "integer" + }, + "last_login": { + "format": "date-time", + "nullable": true, "type": "string" }, "last_name": { "maxLength": 64, "type": "string" + }, + "login_count": { + "nullable": true, + "type": "integer" + }, + "roles": { + "items": { + "$ref": "#/components/schemas/SupersetUserApi.get.Role" + }, + "type": "array" + }, + "username": { + "maxLength": 128, + "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "email", + "first_name", + "last_name", + "username" + ], "type": "object" }, - "TagRestApi.get_list": { + "SupersetUserApi.get.Group": { "properties": { - "changed_by": { - "$ref": "#/components/schemas/TagRestApi.get_list.User" - }, - "changed_on_delta_humanized": { - "readOnly": true - }, - "created_by": { - "$ref": "#/components/schemas/TagRestApi.get_list.User1" - }, - "created_on_delta_humanized": { - "readOnly": true - }, "description": { + "maxLength": 512, "nullable": true, "type": "string" }, "id": { "type": "integer" }, - "name": { - "maxLength": 250, + "label": { + "maxLength": 150, "nullable": true, "type": "string" }, - "type": { - "enum": [1, 2, 3, 4] + "name": { + "maxLength": 100, + "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TagRestApi.get_list.User": { + "SupersetUserApi.get.Role": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "id": { + "type": "integer" }, - "last_name": { + "name": { "maxLength": 64, "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "name" + ], "type": "object" }, - "TagRestApi.get_list.User1": { + "SupersetUserApi.get.User": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } + "id": { + "type": "integer" + } }, - "required": ["first_name", "last_name"], "type": "object" }, - "TagRestApi.post": { + "SupersetUserApi.get.User1": { "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "minLength": 1, - "type": "string" - }, - "objects_to_tag": { - "description": "Objects to tag", - "items": {}, - "type": "array" + "id": { + "type": "integer" } }, "type": "object" }, - "TagRestApi.put": { + "SupersetUserApi.get_list": { "properties": { - "description": { + "active": { "nullable": true, - "type": "string" + "type": "boolean" }, - "name": { - "minLength": 1, - "type": "string" + "changed_by": { + "$ref": "#/components/schemas/SupersetUserApi.get_list.User1" }, - "objects_to_tag": { - "description": "Objects to tag", - "items": {}, - "type": "array" - } - }, - "type": "object" - }, - "TaggedObjectEntityResponseSchema": { - "properties": { "changed_on": { "format": "date-time", + "nullable": true, "type": "string" }, "created_by": { - "$ref": "#/components/schemas/User1" + "$ref": "#/components/schemas/SupersetUserApi.get_list.User" }, - "creator": { + "created_on": { + "format": "date-time", + "nullable": true, "type": "string" }, - "id": { + "email": { + "maxLength": 320, + "type": "string" + }, + "fail_login_count": { + "nullable": true, "type": "integer" }, - "name": { + "first_name": { + "maxLength": 64, "type": "string" }, - "owners": { + "groups": { "items": { - "$ref": "#/components/schemas/User2" + "$ref": "#/components/schemas/SupersetUserApi.get_list.Group" }, "type": "array" }, - "tags": { - "items": { - "$ref": "#/components/schemas/TagGetResponseSchema" - }, - "type": "array" + "id": { + "type": "integer" }, - "type": { + "last_login": { + "format": "date-time", + "nullable": true, "type": "string" }, - "url": { + "last_name": { + "maxLength": 64, "type": "string" - } - }, - "type": "object" - }, - "TemporaryCachePostSchema": { - "properties": { - "value": { - "description": "Any type of JSON supported text.", + }, + "login_count": { + "nullable": true, + "type": "integer" + }, + "roles": { + "items": { + "$ref": "#/components/schemas/SupersetUserApi.get_list.Role" + }, + "type": "array" + }, + "username": { + "maxLength": 128, "type": "string" } }, - "required": ["value"], + "required": [ + "email", + "first_name", + "last_name", + "username" + ], "type": "object" }, - "TemporaryCachePutSchema": { + "SupersetUserApi.get_list.Group": { "properties": { - "value": { - "description": "Any type of JSON supported text.", + "description": { + "maxLength": 512, + "nullable": true, "type": "string" - } - }, - "required": ["value"], - "type": "object" - }, - "Theme": { - "properties": { + }, "id": { "type": "integer" }, - "json_data": { + "label": { + "maxLength": 150, + "nullable": true, "type": "string" }, - "theme_name": { + "name": { + "maxLength": 100, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "ThemeRestApi.get": { + "SupersetUserApi.get_list.Role": { "properties": { - "changed_by": { - "$ref": "#/components/schemas/ThemeRestApi.get.User" - }, - "changed_on_delta_humanized": { - "readOnly": true - }, - "created_by": { - "$ref": "#/components/schemas/ThemeRestApi.get.User1" - }, "id": { "type": "integer" }, - "is_system": { - "type": "boolean" - }, - "is_system_dark": { - "type": "boolean" - }, - "is_system_default": { - "type": "boolean" - }, - "json_data": { - "nullable": true, - "type": "string" - }, - "theme_name": { - "maxLength": 250, - "nullable": true, - "type": "string" - }, - "uuid": { - "format": "uuid", - "nullable": true, + "name": { + "maxLength": 64, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "ThemeRestApi.get.User": { + "SupersetUserApi.get_list.User": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, "id": { "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" } }, - "required": ["first_name", "last_name"], "type": "object" }, - "ThemeRestApi.get.User1": { + "SupersetUserApi.get_list.User1": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, "id": { "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" } }, - "required": ["first_name", "last_name"], "type": "object" }, - "ThemeRestApi.get_list": { + "SupersetUserApi.post": { "properties": { - "changed_by": { - "$ref": "#/components/schemas/ThemeRestApi.get_list.User" - }, - "changed_by_name": { - "readOnly": true - }, - "changed_on_delta_humanized": { - "readOnly": true - }, - "created_by": { - "$ref": "#/components/schemas/ThemeRestApi.get_list.User1" + "active": { + "description": "Is user active?It's not a good policy to remove a user, just make it inactive", + "type": "boolean" }, - "created_on": { - "format": "date-time", - "nullable": true, + "email": { + "description": "The user's email", "type": "string" }, - "id": { - "type": "integer" - }, - "is_system": { - "type": "boolean" - }, - "is_system_dark": { - "type": "boolean" + "first_name": { + "description": "The user's first name", + "type": "string" }, - "is_system_default": { - "type": "boolean" + "groups": { + "description": "The user's roles", + "items": { + "type": "integer" + }, + "type": "array" }, - "json_data": { - "nullable": true, + "last_name": { + "description": "The user's last name", "type": "string" }, - "theme_name": { - "maxLength": 250, - "nullable": true, + "password": { + "description": "The user's password for authentication", "type": "string" }, - "uuid": { - "format": "uuid", - "nullable": true, + "roles": { + "description": "The user's roles", + "items": { + "type": "integer" + }, + "type": "array" + }, + "username": { + "description": "The user's username", + "maxLength": 250, + "minLength": 1, "type": "string" } }, + "required": [ + "email", + "first_name", + "last_name", + "password", + "username" + ], "type": "object" }, - "ThemeRestApi.get_list.User": { + "SupersetUserApi.put": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "active": { + "description": "Is user active?It's not a good policy to remove a user, just make it inactive", + "type": "boolean" }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, + "email": { + "description": "The user's email", "type": "string" - } - }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "ThemeRestApi.get_list.User1": { - "properties": { + }, "first_name": { - "maxLength": 64, + "description": "The user's first name", "type": "string" }, - "id": { - "type": "integer" + "groups": { + "description": "The user's roles", + "items": { + "type": "integer" + }, + "type": "array" }, "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "ThemeRestApi.post": { - "properties": { - "json_data": { + "description": "The user's last name", "type": "string" }, - "theme_name": { - "type": "string" - } - }, - "required": ["json_data", "theme_name"], - "type": "object" - }, - "ThemeRestApi.put": { - "properties": { - "json_data": { + "password": { + "description": "The user's password for authentication", "type": "string" }, - "theme_name": { + "roles": { + "description": "The user's roles", + "items": { + "type": "integer" + }, + "type": "array" + }, + "username": { + "description": "The user's username", + "maxLength": 250, + "minLength": 1, "type": "string" } }, - "required": ["json_data", "theme_name"], "type": "object" }, - "UploadFileMetadata": { + "Tab": { "properties": { - "items": { + "children": { "items": { - "$ref": "#/components/schemas/UploadFileMetadataItem" + "$ref": "#/components/schemas/Tab" }, "type": "array" - } - }, - "type": "object" - }, - "UploadFileMetadataItem": { - "properties": { - "column_names": { - "description": "A list of columns names in the sheet", + }, + "parents": { "items": { "type": "string" }, "type": "array" }, - "sheet_name": { - "description": "The name of the sheet", - "type": "string" - } - }, - "type": "object" - }, - "UploadFileMetadataPostSchema": { - "properties": { - "delimiter": { - "description": "The character used to separate values in the CSV file (e.g., a comma, semicolon, or tab).", + "title": { "type": "string" }, - "file": { - "description": "The file to upload", - "format": "binary", + "value": { "type": "string" - }, - "header_row": { - "description": "Row containing the headers to use as column names(0 is first line of data). Leave empty if there is no header row.", - "type": "integer" - }, - "type": { - "description": "File type to upload", - "enum": ["csv", "excel", "columnar"] } }, - "required": ["file", "type"], "type": "object" }, - "UploadPostSchema": { + "TabState": { "properties": { - "already_exists": { - "default": "fail", - "description": "What to do if the table already exists accepts: fail, replace, append", - "enum": ["fail", "replace", "append"], - "type": "string" - }, - "column_data_types": { - "description": "[CSV only] A dictionary with column names and their data types if you need to change the defaults. Example: {'user_id':'int'}. Check Python Pandas library for supported data types", - "type": "string" + "active": { + "type": "boolean" }, - "column_dates": { - "description": "[CSV and Excel only] A list of column names that should be parsed as dates. Example: date,timestamp", - "items": { - "type": "string" - }, - "type": "array" + "autorun": { + "type": "boolean" }, - "columns_read": { - "description": "A List of the column names that should be read", - "items": { - "type": "string" - }, - "type": "array" + "database_id": { + "type": "integer" }, - "dataframe_index": { - "description": "Write dataframe index as a column.", - "type": "boolean" + "extra_json": { + "type": "object" }, - "day_first": { - "description": "[CSV only] DD/MM format dates, international and European format", + "hide_left_bar": { "type": "boolean" }, - "decimal_character": { - "description": "[CSV and Excel only] Character to recognize as decimal point. Default is '.'", + "id": { "type": "string" }, - "delimiter": { - "description": "[CSV only] The character used to separate values in the CSV file (e.g., a comma, semicolon, or tab).", + "label": { "type": "string" }, - "file": { - "description": "The file to upload", - "format": "text/csv", - "type": "string" + "latest_query": { + "$ref": "#/components/schemas/QueryResult" }, - "header_row": { - "description": "[CSV and Excel only] Row containing the headers to use as column names (0 is first line of data). Leave empty if there is no header row.", + "query_limit": { "type": "integer" }, - "index_column": { - "description": "[CSV and Excel only] Column to use as the row labels of the dataframe. Leave empty if no index column", + "saved_query": { + "nullable": true, + "type": "object" + }, + "schema": { "type": "string" }, - "index_label": { - "description": "Index label for index column.", + "sql": { "type": "string" }, - "null_values": { - "description": "[CSV and Excel only] A list of strings that should be treated as null. Examples: '' for empty strings, 'None', 'N/A', Warning: Hive database supports only a single value", + "table_schemas": { "items": { - "type": "string" + "$ref": "#/components/schemas/Table" }, "type": "array" }, - "rows_to_read": { - "description": "[CSV and Excel only] Number of rows to read from the file. If None, reads all rows.", - "minimum": 1, - "nullable": true, + "user_id": { + "type": "integer" + } + }, + "type": "object" + }, + "Table": { + "properties": { + "database_id": { "type": "integer" }, - "schema": { - "description": "The schema to upload the data file to.", - "type": "string" - }, - "sheet_name": { - "description": "[Excel only]] Strings used for sheet names (default is the first sheet).", + "description": { "type": "string" }, - "skip_blank_lines": { - "description": "[CSV only] Skip blank lines in the CSV file.", - "type": "boolean" - }, - "skip_initial_space": { - "description": "[CSV only] Skip spaces after delimiter.", + "expanded": { "type": "boolean" }, - "skip_rows": { - "description": "[CSV and Excel only] Number of rows to skip at start of file.", + "id": { "type": "integer" }, - "table_name": { - "description": "The name of the table to be created/appended", - "maxLength": 10000, - "minLength": 1, - "type": "string" - }, - "type": { - "description": "File type to upload", - "enum": ["csv", "excel", "columnar"] - } - }, - "required": ["file", "table_name", "type"], - "type": "object" - }, - "User": { - "properties": { - "first_name": { + "schema": { "type": "string" }, - "id": { + "tab_state_id": { "type": "integer" }, - "last_name": { + "table": { "type": "string" } }, "type": "object" }, - "User1": { + "TableExtraMetadataResponseSchema": { "properties": { - "first_name": { - "type": "string" + "clustering": { + "type": "object" }, - "id": { - "type": "integer" + "metadata": { + "type": "object" }, - "last_name": { - "type": "string" + "partitions": { + "type": "object" } }, "type": "object" }, - "User2": { + "TableMetadataColumnsResponse": { "properties": { - "first_name": { + "duplicates_constraint": { "type": "string" }, - "id": { - "type": "integer" + "keys": { + "description": "", + "items": { + "type": "string" + }, + "type": "array" }, - "last_name": { + "longType": { + "description": "The actual backend long type for the column", "type": "string" }, - "username": { + "name": { + "description": "The column name", + "type": "string" + }, + "type": { + "description": "The column type", "type": "string" } }, "type": "object" }, - "User3": { + "TableMetadataForeignKeysIndexesResponse": { "properties": { - "attributes": { - "additionalProperties": { - "nullable": true + "column_names": { + "items": { + "description": "A list of column names that compose the foreign key or index", + "type": "string" }, - "nullable": true, - "type": "object" - }, - "first_name": { - "type": "string" - }, - "last_name": { - "type": "string" - }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "UserRegistrationsRestAPI.get": { - "properties": { - "id": { - "type": "integer" - } - }, - "type": "object" - }, - "UserRegistrationsRestAPI.get_list": { - "properties": { - "email": { - "maxLength": 320, - "type": "string" + "type": "array" }, - "first_name": { - "maxLength": 64, + "name": { + "description": "The name of the foreign key or index", "type": "string" }, - "id": { - "type": "integer" + "options": { + "$ref": "#/components/schemas/TableMetadataOptionsResponse" }, - "last_name": { - "maxLength": 64, - "type": "string" + "referred_columns": { + "items": { + "type": "string" + }, + "type": "array" }, - "registration_date": { - "format": "date-time", - "nullable": true, + "referred_schema": { "type": "string" }, - "registration_hash": { - "maxLength": 256, - "nullable": true, + "referred_table": { "type": "string" }, - "username": { - "maxLength": 128, + "type": { "type": "string" } }, - "required": ["email", "first_name", "last_name", "username"], "type": "object" }, - "UserRegistrationsRestAPI.post": { + "TableMetadataOptionsResponse": { "properties": { - "id": { - "type": "integer" + "deferrable": { + "type": "boolean" + }, + "initially": { + "type": "boolean" + }, + "match": { + "type": "boolean" + }, + "ondelete": { + "type": "boolean" + }, + "onupdate": { + "type": "boolean" } }, "type": "object" }, - "UserRegistrationsRestAPI.put": { + "TableMetadataPrimaryKeyResponse": { "properties": { - "id": { - "type": "integer" + "column_names": { + "items": { + "description": "A list of column names that compose the primary key", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "The primary key index name", + "type": "string" + }, + "type": { + "type": "string" } }, "type": "object" }, - "UserResponseSchema": { + "TableMetadataResponseSchema": { "properties": { - "email": { - "type": "string" - }, - "first_name": { - "type": "string" - }, - "id": { - "type": "integer" + "columns": { + "description": "A list of columns and their metadata", + "items": { + "$ref": "#/components/schemas/TableMetadataColumnsResponse" + }, + "type": "array" }, - "is_active": { - "type": "boolean" + "foreignKeys": { + "description": "A list of foreign keys and their metadata", + "items": { + "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" + }, + "type": "array" }, - "is_anonymous": { - "type": "boolean" + "indexes": { + "description": "A list of indexes and their metadata", + "items": { + "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" + }, + "type": "array" }, - "last_name": { + "name": { + "description": "The name of the table", "type": "string" }, - "login_count": { - "type": "integer" + "primaryKey": { + "allOf": [ + { + "$ref": "#/components/schemas/TableMetadataPrimaryKeyResponse" + } + ], + "description": "Primary keys metadata" }, - "username": { + "selectStar": { + "description": "SQL select star", "type": "string" } }, "type": "object" }, - "ValidateSQLRequest": { + "Tables": { "properties": { - "catalog": { - "nullable": true, - "type": "string" + "id": { + "type": "integer" }, "schema": { - "nullable": true, "type": "string" }, - "sql": { - "description": "SQL statement to validate", + "table_name": { "type": "string" - }, - "template_params": { - "nullable": true, - "type": "object" } }, - "required": ["sql"], "type": "object" }, - "ValidateSQLResponse": { + "TabsPayloadSchema": { "properties": { - "end_column": { - "type": "integer" - }, - "line_number": { - "type": "integer" - }, - "message": { - "type": "string" + "all_tabs": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "start_column": { - "type": "integer" + "tab_tree": { + "items": { + "$ref": "#/components/schemas/Tab" + }, + "type": "array" } }, "type": "object" }, - "ValidatorConfigJSON": { + "Tag": { "properties": { - "op": { - "description": "The operation to compare with a threshold to apply to the SQL output\n", - "enum": ["<", "<=", ">", ">=", "==", "!="], + "id": { + "type": "integer" + }, + "name": { "type": "string" }, - "threshold": { - "type": "number" + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" }, - "ViewMenuApi.get": { + "Tag1": { "properties": { "id": { "type": "integer" }, "name": { - "maxLength": 250, "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, - "required": ["name"], "type": "object" }, - "ViewMenuApi.get_list": { + "TagGetResponseSchema": { "properties": { "id": { "type": "integer" }, "name": { - "maxLength": 250, + "type": "string" + }, + "type": { "type": "string" } }, - "required": ["name"], "type": "object" }, - "ViewMenuApi.post": { + "TagObject": { "properties": { + "description": { + "nullable": true, + "type": "string" + }, "name": { - "maxLength": 250, + "minLength": 1, "type": "string" + }, + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, + "type": "array" } }, - "required": ["name"], "type": "object" }, - "ViewMenuApi.put": { + "TagPostBulkResponseObject": { "properties": { - "name": { - "maxLength": 250, - "type": "string" + "objects_skipped": { + "description": "Objects to tag", + "items": {}, + "type": "array" + }, + "objects_tagged": { + "description": "Objects to tag", + "items": {}, + "type": "array" } }, - "required": ["name"], "type": "object" }, - "advanced_data_type_convert_schema": { + "TagPostBulkResponseSchema": { "properties": { - "type": { - "default": "port", - "type": "string" - }, - "values": { - "items": { - "default": "http" - }, - "minItems": 1, - "type": "array" + "result": { + "$ref": "#/components/schemas/TagPostBulkResponseObject" } }, - "required": ["type", "values"], "type": "object" }, - "database_catalogs_query_schema": { + "TagPostBulkSchema": { "properties": { - "force": { - "type": "boolean" + "tags": { + "items": { + "$ref": "#/components/schemas/TagObject" + }, + "type": "array" } }, "type": "object" }, - "database_schemas_query_schema": { + "TagRestApi.get": { "properties": { - "catalog": { - "type": "string" + "changed_by": { + "$ref": "#/components/schemas/TagRestApi.get.User" }, - "force": { - "type": "boolean" + "changed_on_delta_humanized": { + "readOnly": true }, - "upload_allowed": { - "type": "boolean" - } - }, - "type": "object" - }, - "database_tables_query_schema": { - "properties": { - "catalog_name": { + "created_by": { + "$ref": "#/components/schemas/TagRestApi.get.User1" + }, + "created_on_delta_humanized": { + "readOnly": true + }, + "description": { + "nullable": true, "type": "string" }, - "force": { - "type": "boolean" + "id": { + "type": "integer" }, - "schema_name": { + "name": { + "maxLength": 250, + "nullable": true, "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, - "required": ["schema_name"], "type": "object" }, - "delete_tags_schema": { - "items": { - "type": "string" - }, - "type": "array" - }, - "get_delete_ids_schema": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "get_export_ids_schema": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "get_fav_star_ids_schema": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "get_info_schema": { + "TagRestApi.get.User": { "properties": { - "add_columns": { - "additionalProperties": { - "properties": { - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "object" - }, - "edit_columns": { - "additionalProperties": { - "properties": { - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "object" + "first_name": { + "maxLength": 64, + "type": "string" }, - "keys": { - "items": { - "enum": [ - "add_columns", - "edit_columns", - "filters", - "permissions", - "add_title", - "edit_title", - "none" - ], - "type": "string" - }, - "type": "array" + "last_name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "get_item_schema": { + "TagRestApi.get.User1": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" + "first_name": { + "maxLength": 64, + "type": "string" }, - "keys": { - "items": { - "enum": [ - "show_columns", - "description_columns", - "label_columns", - "show_title", - "none" - ], - "type": "string" - }, - "type": "array" + "last_name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "get_list_schema": { + "TagRestApi.get_list": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" + "changed_by": { + "$ref": "#/components/schemas/TagRestApi.get_list.User" }, - "filters": { - "items": { - "properties": { - "col": { - "type": "string" - }, - "opr": { - "type": "string" - }, - "value": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "items": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - } - ] - }, - "type": "array" - } - ] - } - }, - "required": ["col", "opr", "value"], - "type": "object" - }, - "type": "array" + "changed_on_delta_humanized": { + "readOnly": true }, - "keys": { - "items": { - "enum": [ - "list_columns", - "order_columns", - "label_columns", - "description_columns", - "list_title", - "none" - ], - "type": "string" - }, - "type": "array" + "created_by": { + "$ref": "#/components/schemas/TagRestApi.get_list.User1" }, - "order_column": { - "type": "string" + "created_on_delta_humanized": { + "readOnly": true }, - "order_direction": { - "enum": ["asc", "desc"], + "description": { + "nullable": true, "type": "string" }, - "page": { + "id": { "type": "integer" }, - "page_size": { - "type": "integer" + "name": { + "maxLength": 250, + "nullable": true, + "type": "string" }, - "select_columns": { - "items": { - "type": "string" - }, - "type": "array" + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" }, - "get_recent_activity_schema": { + "TagRestApi.get_list.User": { "properties": { - "actions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "distinct": { - "type": "boolean" - }, - "page": { - "type": "number" + "first_name": { + "maxLength": 64, + "type": "string" }, - "page_size": { - "type": "number" + "last_name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "get_related_schema": { + "TagRestApi.get_list.User1": { "properties": { - "filter": { + "first_name": { + "maxLength": 64, "type": "string" }, - "include_ids": { - "items": { - "type": "integer" - }, - "type": "array" + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "TagRestApi.post": { + "properties": { + "description": { + "nullable": true, + "type": "string" }, - "page": { - "type": "integer" + "name": { + "minLength": 1, + "type": "string" }, - "page_size": { - "type": "integer" + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, + "type": "array" } }, "type": "object" }, - "queries_get_updated_since_schema": { + "TagRestApi.put": { "properties": { - "last_updated_ms": { - "type": "number" + "description": { + "nullable": true, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, + "type": "array" } }, - "required": ["last_updated_ms"], "type": "object" }, - "screenshot_query_schema": { + "TaggedObjectEntityResponseSchema": { "properties": { - "force": { - "type": "boolean" + "changed_on": { + "format": "date-time", + "type": "string" }, - "thumb_size": { + "created_by": { + "$ref": "#/components/schemas/User" + }, + "creator": { + "type": "string" + }, + "editors": { "items": { - "type": "integer" + "$ref": "#/components/schemas/SubjectResponse" }, "type": "array" }, - "window_size": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "tags": { "items": { - "type": "integer" + "$ref": "#/components/schemas/TagGetResponseSchema" }, "type": "array" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sql_lab_get_results_schema": { + "TemporaryCachePostSchema": { "properties": { - "key": { + "value": { + "description": "Any type of JSON supported text.", "type": "string" } }, - "required": ["key"], + "required": [ + "value" + ], "type": "object" }, - "thumbnail_query_schema": { + "TemporaryCachePutSchema": { "properties": { - "force": { + "value": { + "description": "Any type of JSON supported text.", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "Theme": { + "properties": { + "id": { + "type": "integer" + }, + "json_data": { + "type": "string" + }, + "theme_name": { + "type": "string" + } + }, + "type": "object" + }, + "ThemeRestApi.get": { + "properties": { + "changed_by": { + "$ref": "#/components/schemas/ThemeRestApi.get.User" + }, + "changed_on_delta_humanized": { + "readOnly": true + }, + "created_by": { + "$ref": "#/components/schemas/ThemeRestApi.get.User1" + }, + "id": { + "type": "integer" + }, + "is_system": { + "type": "boolean" + }, + "is_system_dark": { + "type": "boolean" + }, + "is_system_default": { "type": "boolean" + }, + "json_data": { + "nullable": true, + "type": "string" + }, + "theme_name": { + "maxLength": 250, + "nullable": true, + "type": "string" + }, + "uuid": { + "format": "uuid", + "nullable": true, + "type": "string" } }, "type": "object" }, - "DashboardNativeFiltersConfigUpdateSchema": { - "type": "object", + "ThemeRestApi.get.User": { "properties": { - "deleted": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of deleted filter IDs." + "first_name": { + "maxLength": 64, + "type": "string" }, - "modified": { - "type": "array", - "items": { - "type": "object" - }, - "description": "List of modified filter configurations." + "id": { + "type": "integer" }, - "reordered": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of filter IDs in new order." + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ThemeRestApi.get.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ThemeRestApi.get_list": { + "properties": { + "changed_by": { + "$ref": "#/components/schemas/ThemeRestApi.get_list.User" + }, + "changed_by_name": { + "readOnly": true + }, + "changed_on_delta_humanized": { + "readOnly": true + }, + "created_by": { + "$ref": "#/components/schemas/ThemeRestApi.get_list.User1" + }, + "created_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_system": { + "type": "boolean" + }, + "is_system_dark": { + "type": "boolean" + }, + "is_system_default": { + "type": "boolean" + }, + "json_data": { + "nullable": true, + "type": "string" + }, + "theme_name": { + "maxLength": 250, + "nullable": true, + "type": "string" + }, + "uuid": { + "format": "uuid", + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "ThemeRestApi.get_list.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ThemeRestApi.get_list.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ThemeRestApi.post": { + "properties": { + "json_data": { + "type": "string" + }, + "theme_name": { + "type": "string" + } + }, + "required": [ + "json_data", + "theme_name" + ], + "type": "object" + }, + "ThemeRestApi.put": { + "properties": { + "json_data": { + "type": "string" + }, + "theme_name": { + "type": "string" + } + }, + "required": [ + "json_data", + "theme_name" + ], + "type": "object" + }, + "UploadFileMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/UploadFileMetadataItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "UploadFileMetadataItem": { + "properties": { + "column_names": { + "description": "A list of columns names in the sheet", + "items": { + "type": "string" + }, + "type": "array" + }, + "sheet_name": { + "description": "The name of the sheet", + "type": "string" + } + }, + "type": "object" + }, + "UploadFileMetadataPostSchema": { + "properties": { + "delimiter": { + "description": "The character used to separate values in the CSV file (e.g., a comma, semicolon, or tab).", + "type": "string" + }, + "file": { + "description": "The file to upload", + "format": "binary", + "type": "string" + }, + "header_row": { + "description": "Row containing the headers to use as column names(0 is first line of data). Leave empty if there is no header row.", + "type": "integer" + }, + "type": { + "description": "File type to upload", + "enum": [ + "csv", + "excel", + "columnar" + ] + } + }, + "required": [ + "file", + "type" + ], + "type": "object" + }, + "UploadPostSchema": { + "properties": { + "already_exists": { + "default": "fail", + "description": "What to do if the table already exists accepts: fail, replace, append", + "enum": [ + "fail", + "replace", + "append" + ], + "type": "string" + }, + "column_data_types": { + "description": "[CSV only] A dictionary with column names and their data types if you need to change the defaults. Example: {'user_id':'int'}. Check Python Pandas library for supported data types", + "type": "string" + }, + "column_dates": { + "description": "[CSV and Excel only] A list of column names that should be parsed as dates. Example: date,timestamp", + "items": { + "type": "string" + }, + "type": "array" + }, + "columns_read": { + "description": "A List of the column names that should be read", + "items": { + "type": "string" + }, + "type": "array" + }, + "dataframe_index": { + "description": "Write dataframe index as a column.", + "type": "boolean" + }, + "day_first": { + "description": "[CSV only] DD/MM format dates, international and European format", + "type": "boolean" + }, + "decimal_character": { + "description": "[CSV and Excel only] Character to recognize as decimal point. Default is '.'", + "type": "string" + }, + "delimiter": { + "description": "[CSV only] The character used to separate values in the CSV file (e.g., a comma, semicolon, or tab).", + "type": "string" + }, + "file": { + "description": "The file to upload", + "format": "text/csv", + "type": "string" + }, + "header_row": { + "description": "[CSV and Excel only] Row containing the headers to use as column names (0 is first line of data). Leave empty if there is no header row.", + "type": "integer" + }, + "index_column": { + "description": "[CSV and Excel only] Column to use as the row labels of the dataframe. Leave empty if no index column", + "type": "string" + }, + "index_label": { + "description": "Index label for index column.", + "type": "string" + }, + "null_values": { + "description": "[CSV and Excel only] A list of strings that should be treated as null. Examples: '' for empty strings, 'None', 'N/A', Warning: Hive database supports only a single value", + "items": { + "type": "string" + }, + "type": "array" + }, + "rows_to_read": { + "description": "[CSV and Excel only] Number of rows to read from the file. If None, reads all rows.", + "minimum": 1, + "nullable": true, + "type": "integer" + }, + "schema": { + "description": "The schema to upload the data file to.", + "type": "string" + }, + "sheet_name": { + "description": "[Excel only]] Strings used for sheet names (default is the first sheet).", + "type": "string" + }, + "skip_blank_lines": { + "description": "[CSV only] Skip blank lines in the CSV file.", + "type": "boolean" + }, + "skip_initial_space": { + "description": "[CSV only] Skip spaces after delimiter.", + "type": "boolean" + }, + "skip_rows": { + "description": "[CSV and Excel only] Number of rows to skip at start of file.", + "type": "integer" + }, + "table_name": { + "description": "The name of the table to be created/appended", + "maxLength": 10000, + "minLength": 1, + "type": "string" + }, + "type": { + "description": "File type to upload", + "enum": [ + "csv", + "excel", + "columnar" + ] + } + }, + "required": [ + "file", + "table_name", + "type" + ], + "type": "object" + }, + "User": { + "properties": { + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "type": "string" + } + }, + "type": "object" + }, + "User1": { + "properties": { + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "User2": { + "properties": { + "attributes": { + "additionalProperties": { + "nullable": true + }, + "nullable": true, + "type": "object" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "UserGroup": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "UserRegistrationsRestAPI.get": { + "properties": { + "id": { + "type": "integer" + } + }, + "type": "object" + }, + "UserRegistrationsRestAPI.get_list": { + "properties": { + "email": { + "maxLength": 320, + "type": "string" + }, + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + }, + "registration_date": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "username": { + "maxLength": 128, + "type": "string" + } + }, + "required": [ + "email", + "first_name", + "last_name", + "username" + ], + "type": "object" + }, + "UserRegistrationsRestAPI.post": { + "properties": { + "id": { + "type": "integer" + } + }, + "type": "object" + }, + "UserRegistrationsRestAPI.put": { + "properties": { + "id": { + "type": "integer" + } + }, + "type": "object" + }, + "UserResponseSchema": { + "properties": { + "email": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "groups": { + "items": { + "$ref": "#/components/schemas/UserGroup" + }, + "type": "array" + }, + "id": { + "type": "integer" + }, + "is_active": { + "type": "boolean" + }, + "is_anonymous": { + "type": "boolean" + }, + "last_name": { + "type": "string" + }, + "login_count": { + "type": "integer" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "ValidateSQLRequest": { + "properties": { + "catalog": { + "nullable": true, + "type": "string" + }, + "schema": { + "nullable": true, + "type": "string" + }, + "sql": { + "description": "SQL statement to validate", + "type": "string" + }, + "template_params": { + "nullable": true, + "type": "object" + } + }, + "required": [ + "sql" + ], + "type": "object" + }, + "ValidateSQLResponse": { + "properties": { + "end_column": { + "type": "integer" + }, + "line_number": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "start_column": { + "type": "integer" + } + }, + "type": "object" + }, + "ValidatorConfigJSON": { + "properties": { + "op": { + "description": "The operation to compare with a threshold to apply to the SQL output\n", + "enum": [ + "<", + "<=", + ">", + ">=", + "==", + "!=" + ], + "type": "string" + }, + "threshold": { + "type": "number" + } + }, + "type": "object" + }, + "VersionChangeRecord": { + "properties": { + "from_value": { + "description": "Value at path before the save; null when the field did not exist.", + "nullable": true + }, + "kind": { + "description": "Semantic category of the change. First-class values in V1: 'filter', 'metric', 'dimension', 'column', 'chart', 'time_range', 'color_palette'. Falls back to 'field' for generic scalar changes that don't map to a named kind.", + "type": "string" + }, + "operation": { + "description": "The verb for this change: 'add', 'remove', 'move', 'edit', 'update' (a collapsed-summary record for a field whose per-leaf changes exceeded the cap), or 'announce' (a synthetic headline record). Surfaced explicitly so consumers need not infer the verb from from_value/to_value null-tests \u2014 'move' in particular cannot be derived that way.", + "type": "string" + }, + "path": { + "description": "Array of segments locating the change in the entity's state. Example: ['params', 'adhoc_filters', 'country']." + }, + "to_value": { + "description": "Value at path after the save; null when the field was removed.", + "nullable": true + } + }, + "type": "object" + }, + "VersionChangedBy": { + "properties": { + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "type": "string" + } + }, + "type": "object" + }, + "VersionListItemSchema": { + "properties": { + "changed_by": { + "allOf": [ + { + "$ref": "#/components/schemas/VersionChangedBy" + } + ], + "description": "User who produced the version, or null when the commit had no authenticated Flask user (CLI, Celery, import).", + "nullable": true + }, + "changes": { + "description": "Structured diff records describing the atomic field-level changes at this version, ordered by emission sequence. Empty for baseline (op=0) transactions per spec M4.", + "items": { + "$ref": "#/components/schemas/VersionChangeRecord" + }, + "type": "array" + }, + "issued_at": { + "description": "UTC timestamp of the commit that produced the row", + "format": "date-time", + "type": "string" + }, + "operation_type": { + "description": "One of 'baseline', 'update', or 'delete', derived from the Continuum integer constant. Restore is not a distinct operation_type: a restore surfaces as 'update' carrying ``action_kind='restore'`` (see ACTIVITY_ACTION_KINDS).", + "type": "string" + }, + "transaction_id": { + "description": "Underlying Continuum transaction id", + "type": "integer" + }, + "version_number": { + "description": "0-based position in the history, oldest first", + "type": "integer" + }, + "version_uuid": { + "description": "Deterministic UUIDv5 derived from the entity UUID and the Continuum transaction id \u2014 stable across replicas and retention pruning. The handle accepted by the get/restore version endpoints.", + "format": "uuid", + "type": "string" + } + }, + "type": "object" + }, + "ViewMenuApi.get": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "ViewMenuApi.get_list": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "ViewMenuApi.post": { + "properties": { + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "ViewMenuApi.put": { + "properties": { + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "advanced_data_type_convert_schema": { + "properties": { + "type": { + "default": "port", + "type": "string" + }, + "values": { + "items": { + "default": "http" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "type", + "values" + ], + "type": "object" + }, + "database_catalogs_query_schema": { + "properties": { + "force": { + "type": "boolean" + } + }, + "type": "object" + }, + "database_schemas_query_schema": { + "properties": { + "catalog": { + "type": "string" + }, + "force": { + "type": "boolean" + }, + "upload_allowed": { + "type": "boolean" + } + }, + "type": "object" + }, + "database_tables_query_schema": { + "properties": { + "catalog_name": { + "type": "string" + }, + "force": { + "type": "boolean" + }, + "schema_name": { + "type": "string" + } + }, + "required": [ + "schema_name" + ], + "type": "object" + }, + "delete_tags_schema": { + "items": { + "type": "string" + }, + "type": "array" + }, + "get_delete_ids_schema": { + "example": [ + 1, + 2, + 3 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, + "get_export_ids_schema": { + "example": [ + 1, + 2, + 3 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, + "get_fav_star_ids_schema": { + "example": [ + 1, + 2, + 3 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, + "get_info_schema": { + "properties": { + "add_columns": { + "additionalProperties": { + "properties": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "object" + }, + "edit_columns": { + "additionalProperties": { + "properties": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "object" + }, + "keys": { + "items": { + "enum": [ + "add_columns", + "edit_columns", + "filters", + "permissions", + "add_title", + "edit_title", + "none" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "get_item_schema": { + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "keys": { + "items": { + "enum": [ + "show_columns", + "description_columns", + "label_columns", + "show_title", + "none" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "get_list_schema": { + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "filters": { + "items": { + "properties": { + "col": { + "type": "string" + }, + "opr": { + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "items": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "type": "array" + } + ] + } + }, + "required": [ + "col", + "opr", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "keys": { + "items": { + "enum": [ + "list_columns", + "order_columns", + "label_columns", + "description_columns", + "list_title", + "none" + ], + "type": "string" + }, + "type": "array" + }, + "order_column": { + "type": "string" + }, + "order_direction": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "select_columns": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "get_recent_activity_schema": { + "properties": { + "actions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "distinct": { + "type": "boolean" + }, + "page": { + "type": "number" + }, + "page_size": { + "type": "number" + } + }, + "type": "object" + }, + "get_related_schema": { + "properties": { + "filter": { + "type": "string" + }, + "include_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + } + }, + "type": "object" + }, + "get_slack_channels_schema": { + "properties": { + "exact_match": { + "type": "boolean" + }, + "force": { + "type": "boolean" + }, + "page": { + "minimum": 0, + "type": "integer" + }, + "page_size": { + "minimum": 1, + "type": "integer" + }, + "search_string": { + "type": "string" + }, + "types": { + "items": { + "enum": [ + "public_channel", + "private_channel" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "queries_get_updated_since_schema": { + "properties": { + "last_updated_ms": { + "type": "number" + } + }, + "required": [ + "last_updated_ms" + ], + "type": "object" + }, + "screenshot_query_schema": { + "properties": { + "force": { + "type": "boolean" + }, + "thumb_size": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "window_size": { + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "type": "object" + }, + "sql_lab_get_results_schema": { + "properties": { + "key": { + "type": "string" + } + }, + "required": [ + "key" + ], + "type": "object" + }, + "thumbnail_query_schema": { + "properties": { + "force": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "securitySchemes": { + "api_key": { + "bearerFormat": "API Key", + "description": "API key authentication using Bearer token", + "scheme": "bearer", + "type": "http" + }, + "jwt": { + "bearerFormat": "JWT", + "scheme": "bearer", + "type": "http" + }, + "jwt_refresh": { + "bearerFormat": "JWT", + "scheme": "bearer", + "type": "http" + } + } + }, + "info": { + "description": "Superset", + "title": "Superset", + "version": "v1" + }, + "openapi": "3.0.2", + "paths": { + "/api/v1/advanced_data_type/convert": { + "get": { + "description": "Returns an AdvancedDataTypeResponse object populated with the passed in args.", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/advanced_data_type_convert_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AdvancedDataTypeSchema" + } + } + }, + "description": "AdvancedDataTypeResponse object has been returned." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Return an AdvancedDataTypeResponse", + "tags": [ + "Advanced Data Type" + ] + } + }, + "/api/v1/advanced_data_type/types": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "a successful return of the available advanced data types has taken place." + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Return a list of available advanced data types", + "tags": [ + "Advanced Data Type" + ] + } + }, + "/api/v1/annotation_layer/": { + "delete": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "CSS templates bulk delete" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Delete multiple annotation layers in a bulk operation", + "tags": [ + "Annotation Layers" + ] + }, + "get": { + "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Items from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Get a list of annotation layers", + "tags": [ + "Annotation Layers" + ] + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + } + } + }, + "description": "Annotation Layer schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Annotation added" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Create an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/related/{column_name}": { + "get": { + "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RelatedResponseSchema" + } + } + }, + "description": "Related column data" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Get related fields data", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/{pk}": { + "delete": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Item deleted" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Delete annotation layer", + "tags": [ + "Annotation Layers" + ] + }, + "get": { + "description": "Get an item model", + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Get an annotation layer", + "tags": [ + "Annotation Layers" + ] + }, + "put": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.put" + } + } + }, + "description": "Annotation schema", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.put" + } + }, + "type": "object" + } + } + }, + "description": "Annotation changed" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Update an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/{pk}/annotation/": { + "delete": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Annotations bulk delete" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Bulk delete annotation layers", + "tags": [ + "Annotation Layers" + ] + }, + "get": { + "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "parameters": [ + { + "description": "The annotation layer id for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "ids": { + "description": "A list of annotation ids", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/AnnotationRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Items from Annotations" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Get a list of annotation layers", + "tags": [ + "Annotation Layers" + ] + }, + "post": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnnotationRestApi.post" + } + } + }, + "description": "Annotation schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Annotation added" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Create an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/{pk}/annotation/{annotation_id}": { + "delete": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The annotation pk for this annotation", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Item deleted" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Delete annotation layer", + "tags": [ + "Annotation Layers" + ] + }, + "get": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The annotation pk", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "description": "The item id", + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/AnnotationRestApi.get" + } + }, + "type": "object" + } + } + }, + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Get an annotation layer", + "tags": [ + "Annotation Layers" + ] + }, + "put": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The annotation pk for this annotation", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnnotationRestApi.put" + } + } + }, + "description": "Annotation schema", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationRestApi.put" + } + }, + "type": "object" + } + } + }, + "description": "Annotation changed" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Update an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/assets/export/": { + "get": { + "description": "Gets a ZIP file with all the Superset assets (databases, datasets, charts, dashboards, saved queries) as YAML files.", + "responses": { + "200": { + "content": { + "application/zip": { + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "description": "ZIP file" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Export all assets", + "tags": [ + "Import/export" + ] + } + }, + "/api/v1/assets/import/": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "bundle": { + "description": "upload file (ZIP or JSON)", + "format": "binary", + "type": "string" + }, + "encrypted_extra_secrets": { + "description": "JSON map of secret values for masked encrypted_extra fields. Each key is a database file path and the value is a map of JSONPath expressions to secret values. For example: `{\"databases/db.yaml\": {\"$.credentials_info.secret\": \"foo\"}}`.", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing assets? Defaults to ``true`` for backwards compatibility. When ``false``, the import fails if any of the assets already exist.", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "sparse": { + "description": "allow sparse update of resources", + "type": "boolean" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Assets import result" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Import multiple assets", + "tags": [ + "Import/export" + ] + } + }, + "/api/v1/async_event/": { + "get": { + "description": "Reads off of the Redis events stream, using the user's JWT token and optional query params for last event received.", + "parameters": [ + { + "description": "Last ID received by the client", + "in": "query", + "name": "last_id", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "items": { + "properties": { + "channel_id": { + "type": "string" + }, + "errors": { + "items": { + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "job_id": { + "type": "string" + }, + "result_url": { + "type": "string" + }, + "status": { + "type": "string" + }, + "user_id": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Async event results" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Read off of the Redis events stream", + "tags": [ + "AsyncEventsRestApi" + ] + } + }, + "/api/v1/async_event/{job_id}/cancel": { + "post": { + "description": "Revokes the Celery task backing an in-flight async query. The caller is authorized against the job's original owner (channel and user), both resolved server-side from the request, so a client cannot cancel a job it did not submit.", + "parameters": [ + { + "description": "The job ID returned when the async query was submitted", + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "properties": { + "job_id": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "Job cancelled" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Cancel a running async query job", + "tags": [ + "AsyncEventsRestApi" + ] + } + }, + "/api/v1/available_domains/": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "$ref": "#/components/schemas/AvailableDomainsSchema" + } + }, + "type": "object" + } + } + }, + "description": "a list of available domains" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Get all available domains", + "tags": [ + "Available Domains" + ] + } + }, + "/api/v1/cachekey/invalidate": { + "post": { + "description": "Takes a list of datasources, finds and invalidates the associated cache records and removes the database records.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CacheInvalidationRequestSchema" + } + } + }, + "description": "A list of datasources uuid or the tuples of database and datasource names", + "required": true + }, + "responses": { + "201": { + "description": "cache was successfully invalidated" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Invalidate cache records and remove the database records", + "tags": [ + "CacheRestApi" + ] + } + }, + "/api/v1/chart/": { + "delete": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Charts bulk delete" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Bulk delete charts (soft delete, recoverable via restore, when the SOFT_DELETE feature flag is enabled; permanent otherwise)", + "tags": [ + "Charts" + ] + }, + "get": { + "description": "Gets a list of charts, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/ChartRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Items from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] } - } + ], + "summary": "Get a list of charts", + "tags": [ + "Charts" + ] }, - "DashboardColorsConfigUpdateSchema": { - "type": "object", - "properties": { - "color_namespace": { - "type": "string", - "nullable": true, - "description": "The color namespace." - }, - "color_scheme": { - "type": "string", - "nullable": true, - "description": "The color scheme name." + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartRestApi.post" + } + } }, - "map_label_colors": { - "type": "object", - "additionalProperties": { - "type": "string" + "description": "Chart schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/ChartRestApi.post" + } + }, + "type": "object" + } + } }, - "description": "Mapping of labels to colors." + "description": "Chart added" }, - "shared_label_colors": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Shared label colors across charts." + "400": { + "$ref": "#/components/responses/400" }, - "label_colors": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Label to color mapping." + "401": { + "$ref": "#/components/responses/401" }, - "color_scheme_domain": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Color scheme domain values." - } - } - }, - "get_slack_channels_schema": { - "type": "object", - "properties": { - "search_string": { - "type": "string", - "description": "String to search for in channel names." + "403": { + "$ref": "#/components/responses/403" }, - "types": { - "type": "array", - "items": { - "type": "string", - "enum": ["public_channel", "private_channel"] - }, - "description": "Types of channels to search." + "422": { + "$ref": "#/components/responses/422" }, - "exact_match": { - "type": "boolean", - "description": "Whether to match channel names exactly." + "500": { + "$ref": "#/components/responses/500" } - } - }, - "DashboardChartCustomizationsConfigUpdateSchema": { - "type": "object", - "properties": { - "deleted": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of deleted chart customization IDs." - }, - "modified": { - "type": "array", - "items": { - "type": "object" - }, - "description": "List of modified chart customization configurations." + }, + "security": [ + { + "jwt": [] }, - "reordered": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of chart customization IDs in new order." + { + "api_key": [] } - } + ], + "summary": "Create a new chart", + "tags": [ + "Charts" + ] } }, - "securitySchemes": { - "jwt": { - "bearerFormat": "JWT", - "scheme": "bearer", - "type": "http" - }, - "jwt_refresh": { - "bearerFormat": "JWT", - "scheme": "bearer", - "type": "http" - } - } - }, - "info": { - "description": "Superset", - "title": "Superset", - "version": "v1" - }, - "openapi": "3.0.2", - "paths": { - "/api/v1/advanced_data_type/convert": { + "/api/v1/chart/_info": { "get": { - "description": "Returns an AdvancedDataTypeResponse object populated with the passed in args.", + "description": "Get metadata information about this API resource", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/advanced_data_type_convert_schema" + "$ref": "#/components/schemas/get_info_schema" } } }, @@ -12082,17 +15866,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdvancedDataTypeSchema" - }, - "example": { - "display_value": "string", - "error_message": "string", - "valid_filter_operators": ["string"], - "values": ["string"] + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "AdvancedDataTypeResponse object has been returned." + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -12100,11 +15914,8 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -12113,52 +15924,54 @@ "security": [ { "jwt": [] - } - ], - "summary": "Return an AdvancedDataTypeResponse", - "tags": ["Advanced Data Type"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/advanced_data_type/convert\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/advanced_data_type/convert\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/advanced_data_type/convert\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Charts" ] } }, - "/api/v1/advanced_data_type/types": { - "get": { + "/api/v1/chart/data": { + "post": { + "description": "Takes a query context constructed in the client and returns payload data response for the given query.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartDataQueryContextSchema" + } + } + }, + "description": "A query context consists of a datasource from which to fetch data and one or many query objects.", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "example": { - "result": ["string"] + "$ref": "#/components/schemas/ChartDataResponseSchema" } } }, - "description": "a successful return of the available advanced data types has taken place." + "description": "Query result" + }, + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" + } + } + }, + "description": "Async job details" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -12166,9 +15979,6 @@ "403": { "$ref": "#/components/responses/403" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -12176,42 +15986,28 @@ "security": [ { "jwt": [] - } - ], - "summary": "Return a list of available advanced data types", - "tags": ["Advanced Data Type"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/advanced_data_type/types\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/advanced_data_type/types\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/advanced_data_type/types\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Return payload data response for the given query", + "tags": [ + "Charts" ] } }, - "/api/v1/annotation_layer/": { - "delete": { + "/api/v1/chart/data/{cache_key}": { + "get": { + "description": "Takes a query context cache key and returns payload data response for the given query.", "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" + { + "in": "path", + "name": "cache_key", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -12219,23 +16015,21 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "$ref": "#/components/schemas/ChartDataResponseSchema" } } }, - "description": "CSS templates bulk delete" + "description": "Query result" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -12249,36 +16043,25 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete multiple annotation layers in a bulk operation", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/annotation_layer/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/annotation_layer/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Return payload data response for the given query", + "tags": [ + "Charts" ] - }, + } + }, + "/api/v1/chart/export/": { "get": { - "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "$ref": "#/components/schemas/get_export_ids_schema" } } }, @@ -12289,86 +16072,14 @@ "responses": { "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.get_list" - }, - "type": "array" - } - }, - "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] + "format": "binary", + "type": "string" } } }, - "description": "Items from Model" + "description": "A zip file with chart(s), dataset(s) and database(s) as YAML" }, "400": { "$ref": "#/components/responses/400" @@ -12376,8 +16087,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -12386,69 +16097,42 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of annotation layers (annotation-layer)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/annotation_layer/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/annotation_layer/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Download multiple charts as YAML files", + "tags": [ + "Charts" ] - }, - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.post" - }, - "example": { - "descr": "string", - "name": "string" + } + }, + "/api/v1/chart/favorite_status/": { + "get": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_fav_star_ids_schema" + } } - } - }, - "description": "Annotation Layer schema", - "required": true - }, + }, + "in": "query", + "name": "q" + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.post" - } - }, - "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "descr": "string", - "name": "string" - } + "$ref": "#/components/schemas/GetFavStarIdsSchema" } } }, - "description": "Annotation added" + "description": "None" }, "400": { "$ref": "#/components/responses/400" @@ -12466,99 +16150,71 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create an annotation layer (annotation-layer)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/annotation_layer/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/annotation_layer/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Check favorited charts for current user", + "tags": [ + "Charts" ] } }, - "/api/v1/annotation_layer/_info": { - "get": { - "description": "Get metadata information about this API resource", - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "/api/v1/chart/import/": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "formData": { + "description": "upload file (ZIP)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing charts?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, - "description": "Item from Model" + "description": "Chart import result" }, "400": { "$ref": "#/components/responses/400" @@ -12576,31 +16232,20 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (annotation-layer--info)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/annotation_layer/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/annotation_layer/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Import chart(s) with associated datasets and databases", + "tags": [ + "Charts" ] } }, - "/api/v1/annotation_layer/related/{column_name}": { + "/api/v1/chart/related/{column_name}": { "get": { + "description": "Get a list of all possible related entities for a chart. Use `editors` as the `column_name` parameter", "parameters": [ { "in": "path", @@ -12628,10 +16273,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -12643,6 +16284,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -12653,67 +16297,48 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (annotation-layer-related-column-name)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/annotation_layer/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/annotation_layer/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Charts" ] } }, - "/api/v1/annotation_layer/{pk}": { - "delete": { - "parameters": [ - { - "description": "The annotation layer pk for this annotation", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/api/v1/chart/warm_up_cache": { + "put": { + "description": "Warms up the cache for the chart. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore` action.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartCacheWarmUpRequestSchema" + } } - } - ], + }, + "description": "Identifies the chart to warm up cache for, and any additional dashboard or filter context to use.", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "$ref": "#/components/schemas/ChartCacheWarmUpResponseSchema" } } }, - "description": "Item deleted" + "description": "Each chart's warmup status" + }, + "400": { + "$ref": "#/components/responses/400" }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -12721,49 +16346,29 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete annotation layer (annotation-layer-pk)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/annotation_layer/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/annotation_layer/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Warm up the cache for the chart", + "tags": [ + "Charts" ] - }, + } + }, + "/api/v1/chart/{id_or_uuid}": { "get": { - "description": "Get an item model", + "description": "Get a chart", "parameters": [ { + "description": "Either the id of the chart, or its uuid", "in": "path", - "name": "pk", + "name": "id_or_uuid", "required": true, "schema": { - "type": "integer" + "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_item_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -12772,67 +16377,18 @@ "application/json": { "schema": { "properties": { - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "id": { - "description": "The item id", - "type": "string" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.get" - }, - "show_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "show_title": { - "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", - "type": "string" + "$ref": "#/components/schemas/ChartGetResponseSchema" } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "descr": "string", - "id": 1, - "name": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, - "description": "Item from Model" + "description": "Chart" + }, + "302": { + "description": "Redirects to the current digest" }, "400": { "$ref": "#/components/responses/400" @@ -12842,43 +16398,26 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get an annotation layer (annotation-layer-pk)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/annotation_layer/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/annotation_layer/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a chart detail information", + "tags": [ + "Charts" ] - }, - "put": { + } + }, + "/api/v1/chart/{pk}": { + "delete": { "parameters": [ { - "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, @@ -12887,56 +16426,34 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.put" - }, - "example": { - "descr": "string", - "name": "string" - } - } - }, - "description": "Annotation schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.put" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "descr": "string", - "name": "string" - } } } }, - "description": "Annotation changed" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart delete" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -12944,75 +16461,98 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update an annotation layer (annotation-layer-pk)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/annotation_layer/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/annotation_layer/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a chart (soft delete, recoverable via restore, when the SOFT_DELETE feature flag is enabled; permanent otherwise)", + "tags": [ + "Charts" ] - } - }, - "/api/v1/annotation_layer/{pk}/annotation/": { - "delete": { + }, + "put": { "parameters": [ { - "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartRestApi.put" + } + } + }, + "description": "Chart schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { + "id": { + "type": "number" + }, + "new_transaction_id": { + "description": "Continuum transaction_id of the live row after this update. Differs from old_transaction_id when the update produced a new version row.", + "nullable": true, + "type": "integer" + }, + "new_version": { + "description": "0-based version_number of the newly-live row after this update. Can equal old_version when no versioned column changed, or when retention pruning dropped an older closed row in the same commit.", + "nullable": true, + "type": "integer" + }, + "new_version_uuid": { + "description": "Deterministic version_uuid of the live row after this update. Null when version capture is disabled.", + "format": "uuid", + "nullable": true, + "type": "string" + }, + "old_transaction_id": { + "description": "Continuum transaction_id of the live row before this update. Stable across pruning.", + "nullable": true, + "type": "integer" + }, + "old_version": { + "description": "0-based version_number of the live row before this update. Unstable under retention pruning \u2014 see old_transaction_id for a stable identifier.", + "nullable": true, + "type": "integer" + }, + "old_version_uuid": { + "description": "Deterministic version_uuid of the live row before this update. Null when version capture is disabled or the entity has no version rows yet.", + "format": "uuid", + "nullable": true, "type": "string" + }, + "result": { + "$ref": "#/components/schemas/ChartRestApi.put" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Annotations bulk delete" + "description": "Chart changed" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -13026,33 +16566,21 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete annotation layers", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Update a chart", + "tags": [ + "Charts" ] - }, + } + }, + "/api/v1/chart/{pk}/cache_screenshot/": { "get": { - "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "description": "The annotation layer id for this annotation", "in": "path", "name": "pk", "required": true, @@ -13064,7 +16592,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "$ref": "#/components/schemas/screenshot_query_schema" } } }, @@ -13077,36 +16605,21 @@ "content": { "application/json": { "schema": { - "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "ids": { - "description": "A list of annotation ids", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/AnnotationRestApi.get_list" - }, - "type": "array" - } - }, - "type": "object" - }, - "example": { - "count": 1.0, - "ids": ["string"], - "result": [{}] + "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" } } }, - "description": "Items from Annotations" + "description": "Chart async result" + }, + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" + } + } + }, + "description": "Chart screenshot task created" }, "400": { "$ref": "#/components/responses/400" @@ -13114,8 +16627,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -13124,86 +16637,83 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of annotation layers (annotation-layer-pk-annotation)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Compute and cache a screenshot", + "tags": [ + "Charts" ] - }, - "post": { + } + }, + "/api/v1/chart/{pk}/data/": { + "get": { + "description": "Takes a chart ID and uses the query context stored when the chart was saved to return payload data response. When filters_dashboard_id is provided, the chart's compiled SQL includes in scope dashboard filter default values.", "parameters": [ { - "description": "The annotation layer pk for this annotation", + "description": "The chart ID", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } + }, + { + "description": "The format in which the data should be returned", + "in": "query", + "name": "format", + "schema": { + "type": "string" + } + }, + { + "description": "The type in which the data should be returned", + "in": "query", + "name": "type", + "schema": { + "type": "string" + } + }, + { + "description": "Should the queries be forced to load from the source", + "in": "query", + "name": "force", + "schema": { + "type": "boolean" + } + }, + { + "description": "Dashboard ID whose filter defaults should be applied to the chart's query context. The chart must belong to the specified dashboard. Only in scope filters with static default values are applied; filters that require a database query (I.E. defaultToFirstItem) or have no default are reported in the dashboard_filters response metadata.", + "in": "query", + "name": "filters_dashboard_id", + "schema": { + "type": "integer" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnnotationRestApi.post" - }, - "example": { - "end_dttm": "2024-01-15T10:30:00Z", - "json_metadata": "string", - "long_descr": "string", - "short_descr": "string", - "start_dttm": "2024-01-15T10:30:00Z" + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartDataResponseSchema" + } } - } + }, + "description": "Query result" }, - "description": "Annotation schema", - "required": true - }, - "responses": { - "201": { + "202": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/AnnotationRestApi.post" - } - }, - "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "end_dttm": "2024-01-15T10:30:00Z", - "json_metadata": "string", - "long_descr": "string", - "short_descr": "string", - "start_dttm": "2024-01-15T10:30:00Z" - } + "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" } } }, - "description": "Annotation added" + "description": "Async job details" }, "400": { "$ref": "#/components/responses/400" @@ -13211,6 +16721,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -13221,49 +16734,29 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create an annotation layer (annotation-layer-pk-annotation)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Return payload data response for a chart", + "tags": [ + "Charts" ] } }, - "/api/v1/annotation_layer/{pk}/annotation/{annotation_id}": { - "delete": { + "/api/v1/chart/{pk}/deck_layers/": { + "get": { + "description": "Multiple Layers charts (viz_type \"deck_multi\") reference other saved charts as layers via their `deck_slices` config, but those layer charts typically sit on no dashboard of their own, so a per-layer `GET /api/v1/chart/` can 404 for a principal (e.g. an embedded guest) who is only entitled to the container. This endpoint gates on the container chart and resolves the layers it declares, mirroring the access the legacy explore_json pipeline granted server-side.", "parameters": [ { - "description": "The annotation layer pk for this annotation", + "description": "The id of the Multiple Layers container chart", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "description": "The annotation pk for this annotation", - "in": "path", - "name": "annotation_id", - "required": true, - "schema": { - "type": "integer" - } } ], "responses": { @@ -13272,25 +16765,45 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "items": { + "properties": { + "datasource_id": { + "type": "integer" + }, + "datasource_type": { + "type": "string" + }, + "params": { + "type": "string" + }, + "slice_id": { + "type": "integer" + }, + "viz_type": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Item deleted" + "description": "The container's declared layer charts" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -13298,58 +16811,27 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete annotation layer (annotation-layer-pk-annotation-annotation-id)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Get the sub-layer charts declared by a deck.gl Multiple Layers chart", + "tags": [ + "Charts" ] - }, - "get": { + } + }, + "/api/v1/chart/{pk}/favorites/": { + "delete": { "parameters": [ { - "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "description": "The annotation pk", - "in": "path", - "name": "annotation_id", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_item_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -13358,33 +16840,15 @@ "application/json": { "schema": { "properties": { - "id": { - "description": "The item id", - "type": "string" - }, "result": { - "$ref": "#/components/schemas/AnnotationRestApi.get" + "type": "object" } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "end_dttm": "2024-01-15T10:30:00Z", - "id": 1, - "json_metadata": "string", - "long_descr": "string", - "short_descr": "string", - "start_dttm": "2024-01-15T10:30:00Z" - } } } }, - "description": "Item from Model" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart removed from favorites" }, "401": { "$ref": "#/components/responses/401" @@ -13392,108 +16856,49 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Get an annotation layer (annotation-layer-pk-annotation-annotation-id)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Remove the chart from the user favorite list", + "tags": [ + "Charts" ] }, - "put": { + "post": { "parameters": [ { - "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "description": "The annotation pk for this annotation", - "in": "path", - "name": "annotation_id", - "required": true, - "schema": { - "type": "integer" - } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnnotationRestApi.put" - }, - "example": { - "end_dttm": "2024-01-15T10:30:00Z", - "json_metadata": "string", - "long_descr": "string", - "short_descr": "string", - "start_dttm": "2024-01-15T10:30:00Z" - } - } - }, - "description": "Annotation schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/AnnotationRestApi.put" + "type": "object" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "end_dttm": "2024-01-15T10:30:00Z", - "json_metadata": "string", - "long_descr": "string", - "short_descr": "string", - "start_dttm": "2024-01-15T10:30:00Z" - } } } }, - "description": "Annotation changed" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart added to favorites" }, "401": { "$ref": "#/components/responses/401" @@ -13508,43 +16913,51 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update an annotation layer (annotation-layer-pk-annotation-annotation-id)", - "tags": ["Annotation Layers"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/annotation_layer/1/annotation/{annotation_id}\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Mark the chart as favorite for the current user", + "tags": [ + "Charts" ] } }, - "/api/v1/assets/export/": { + "/api/v1/chart/{pk}/screenshot/{digest}/": { "get": { - "description": "Gets a ZIP file with all the Superset assets (databases, datasets, charts, dashboards, saved queries) as YAML files.", + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { - "application/zip": { + "image/*": { "schema": { "format": "binary", "type": "string" } } }, - "description": "ZIP file" + "description": "Chart screenshot image" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -13559,86 +16972,53 @@ "security": [ { "jwt": [] - } - ], - "summary": "Export all assets", - "tags": ["Import/export"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/assets/export/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/assets/export/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/assets/export/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a computed screenshot from cache", + "tags": [ + "Charts" ] } }, - "/api/v1/assets/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "bundle": { - "description": "upload file (ZIP or JSON)", - "format": "binary", - "type": "string" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "sparse": { - "description": "allow sparse update of resources", - "type": "boolean" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" - } + "/api/v1/chart/{pk}/thumbnail/{digest}/": { + "get": { + "description": "Compute or get already computed chart thumbnail from cache.", + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "required": true - }, + { + "description": "A hex digest that makes this chart unique", + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { - "application/json": { + "image/*": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "format": "binary", + "type": "string" } } }, - "description": "Assets import result" + "description": "Chart thumbnail image" + }, + "302": { + "description": "Redirects to the current digest" }, "400": { "$ref": "#/components/responses/400" @@ -13646,8 +17026,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -13656,257 +17036,137 @@ "security": [ { "jwt": [] - } - ], - "summary": "Import multiple assets", - "tags": ["Import/export"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/assets/import/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/assets/import/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/assets/import/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get chart thumbnail", + "tags": [ + "Charts" ] } }, - "/api/v1/async_event/": { + "/api/v1/chart/{uuid_str}/activity/": { "get": { - "description": "Reads off of the Redis events stream, using the user's JWT token and optional query params for last event received.", "parameters": [ { - "description": "Last ID received by the client", + "description": "Chart UUID", + "in": "path", + "name": "uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + { "in": "query", - "name": "last_id", + "name": "since", "schema": { + "format": "date-time", "type": "string" } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "result": { - "items": { - "properties": { - "channel_id": { - "type": "string" - }, - "errors": { - "items": { - "type": "object" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "job_id": { - "type": "string" - }, - "result_url": { - "type": "string" - }, - "status": { - "type": "string" - }, - "user_id": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "example": { - "result": [ - { - "channel_id": "string", - "errors": [], - "id": "string", - "job_id": "string", - "result_url": "string", - "status": "string", - "user_id": 1 - } - ] - } - } - }, - "description": "Async event results" }, - "401": { - "$ref": "#/components/responses/401" + { + "in": "query", + "name": "until", + "schema": { + "format": "date-time", + "type": "string" + } }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ { - "jwt": [] - } - ], - "summary": "Read off of the Redis events stream", - "tags": ["AsyncEventsRestApi"], - "x-codeSamples": [ + "in": "query", + "name": "include", + "schema": { + "default": "all", + "enum": [ + "self", + "related", + "all" + ], + "type": "string" + } + }, { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/async_event/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" + "description": "Case-insensitive search over the full history (summary, entity name, kind, path, values) \u2014 applied before pagination, so `count` reflects the matches.", + "in": "query", + "name": "q", + "schema": { + "type": "string" + } }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/async_event/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "in": "query", + "name": "page", + "schema": { + "default": 0, + "minimum": 0, + "type": "integer" + } }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/async_event/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "in": "query", + "name": "page_size", + "schema": { + "default": 25, + "maximum": 200, + "minimum": 1, + "type": "integer" + } } - ] - } - }, - "/api/v1/available_domains/": { - "get": { + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/AvailableDomainsSchema" - } - }, - "type": "object" - }, - "example": { - "result": { - "domains": [] - } + "$ref": "#/components/schemas/ActivityResponse" } } }, - "description": "a list of available domains" + "description": "Activity stream ordered newest-first" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, "403": { "$ref": "#/components/responses/403" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Get all available domains", - "tags": ["Available Domains"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/available_domains/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/available_domains/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/available_domains/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - } - }, - "/api/v1/cachekey/invalidate": { - "post": { - "description": "Takes a list of datasources, finds and invalidates the associated cache records and removes the database records.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CacheInvalidationRequestSchema" - }, - "example": { - "datasource_uids": ["string"], - "datasources": [{}] - } - } - }, - "description": "A list of datasources uuid or the tuples of database and datasource names", - "required": true - }, - "responses": { - "201": { - "description": "cache was successfully invalidated" - }, - "400": { - "$ref": "#/components/responses/400" }, - "500": { - "$ref": "#/components/responses/500" + "404": { + "$ref": "#/components/responses/404" } }, "security": [ { "jwt": [] - } - ], - "summary": "Invalidate cache records and remove the database records", - "tags": ["CacheRestApi"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/cachekey/invalidate\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/cachekey/invalidate\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/cachekey/invalidate\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Activity stream \u2014 chart own edits + datasets the chart pointed at during association", + "tags": [ + "Charts" ] } }, - "/api/v1/chart/": { - "delete": { + "/api/v1/chart/{uuid_str}/versions/": { + "get": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "Chart UUID", + "in": "path", + "name": "uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } } ], "responses": { @@ -13915,18 +17175,24 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "count": { + "type": "integer" + }, + "result": { + "items": { + "$ref": "#/components/schemas/VersionListItemSchema" + }, + "type": "array" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Charts bulk delete" + "description": "Version history ordered by oldest first" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -13936,52 +17202,44 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete charts", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/chart/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/chart/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Return the version history for a chart", + "tags": [ + "Charts" ] - }, + } + }, + "/api/v1/chart/{uuid_str}/versions/{version_uuid_str}/": { "get": { - "description": "Gets a list of charts, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "Chart UUID", + "in": "path", + "name": "uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "description": "Version UUID as returned by the list endpoint", + "in": "path", + "name": "version_uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } } ], "responses": { @@ -13990,83 +17248,21 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { + "result": { + "description": "The chart's scalar fields at the target version (entity-specific keys), plus a `_version` block with the version-level metadata.", "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" + "_version": { + "$ref": "#/components/schemas/VersionListItemSchema" } }, "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/ChartRestApi.get_list" - }, - "type": "array" } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, - "description": "Items from Model" + "description": "Snapshot of the chart at the target version" }, "400": { "$ref": "#/components/responses/400" @@ -14074,109 +17270,66 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, - "500": { - "$ref": "#/components/responses/500" + "404": { + "$ref": "#/components/responses/404" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get a list of charts", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Read-only snapshot of the chart at a given version", + "tags": [ + "Charts" ] - }, + } + }, + "/api/v1/chart/{uuid_str}/versions/{version_uuid_str}/restore": { "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartRestApi.post" - }, - "example": { - "cache_timeout": 1, - "certification_details": "string", - "certified_by": "string", - "dashboards": [1], - "datasource_id": 1, - "datasource_name": "string", - "datasource_type": "table", - "description": "string", - "external_url": "string", - "is_managed_externally": true, - "owners": [1], - "params": "string", - "query_context": "string", - "query_context_generation": true, - "slice_name": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000", - "viz_type": ["bar", "area", "table"] - } + "parameters": [ + { + "description": "Chart UUID", + "in": "path", + "name": "uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } }, - "description": "Chart schema", - "required": true - }, + { + "description": "Version UUID as returned by the list-versions endpoint. Stable across retention pruning.", + "in": "path", + "name": "version_uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/ChartRestApi.post" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "cache_timeout": 1, - "certification_details": "string", - "certified_by": "string", - "dashboards": [], - "datasource_id": 1, - "datasource_name": "string", - "datasource_type": "table", - "description": "string", - "external_url": "string", - "is_managed_externally": true, - "owners": [], - "params": "string", - "query_context": "string", - "query_context_generation": true, - "slice_name": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000", - "viz_type": ["bar", "area", "table"] - } } } }, - "description": "Chart added" + "description": "Chart was restored" }, "400": { "$ref": "#/components/responses/400" @@ -14187,53 +17340,39 @@ "403": { "$ref": "#/components/responses/403" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Create a new chart", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/chart/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/chart/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Revert a chart to an earlier version (non-destructive)", + "tags": [ + "Charts" ] } }, - "/api/v1/chart/_info": { - "get": { - "description": "Get metadata information about this API resource", + "/api/v1/chart/{uuid}/purge": { + "post": { + "description": "Irreversibly remove an archived chart and its dependents. Limited to owners and admins (same audience as restore).", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "uuid", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } } ], "responses": { @@ -14242,61 +17381,25 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, - "description": "Item from Model" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart permanently deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -14307,92 +17410,58 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (chart--info)", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Permanently delete a soft-deleted chart", + "tags": [ + "Charts" ] } }, - "/api/v1/chart/data": { + "/api/v1/chart/{uuid}/restore": { "post": { - "description": "Takes a query context constructed in the client and returns payload data response for the given query.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartDataQueryContextSchema" - }, - "example": { - "custom_cache_timeout": 1, - "datasource": { - "id": {}, - "type": "table" - }, - "force": true, - "form_data": {}, - "queries": [{}], - "result_format": {}, - "result_type": {} - } + "parameters": [ + { + "in": "path", + "name": "uuid", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } - }, - "description": "A query context consists of a datasource from which to fetch data and one or many query objects.", - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" - }, - "example": { - "result": [] - } - } - }, - "description": "Query result" - }, - "202": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" - }, - "example": { - "channel_id": "string", - "job_id": "string", - "result_url": "string", - "status": "string", - "user_id": "string" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Async job details" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart restored" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -14400,40 +17469,30 @@ "security": [ { "jwt": [] - } - ], - "summary": "Return payload data response for the given query (chart-data)", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/chart/data\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/chart/data\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/data\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Restore a soft-deleted chart", + "tags": [ + "Charts" ] } }, - "/api/v1/chart/data/{cache_key}": { - "get": { - "description": "Takes a query context cache key and returns payload data response for the given query.", + "/api/v1/css_template/": { + "delete": { "parameters": [ { - "in": "path", - "name": "cache_key", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -14441,17 +17500,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" - }, - "example": { - "result": [] + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Query result" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "CSS templates bulk delete" }, "401": { "$ref": "#/components/responses/401" @@ -14469,37 +17527,24 @@ "security": [ { "jwt": [] - } - ], - "summary": "Return payload data response for the given query (chart-data-cache-key)", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/data/{cache_key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/data/{cache_key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/data/{cache_key}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Bulk delete CSS templates", + "tags": [ + "CSS Templates" ] - } - }, - "/api/v1/chart/export/": { + }, "get": { + "description": "Gets a list of CSS templates, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -14510,14 +17555,72 @@ "responses": { "200": { "content": { - "application/zip": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/CssTemplateRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "A zip file with chart(s), dataset(s) and database(s) as YAML" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -14525,8 +17628,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -14535,57 +17638,46 @@ "security": [ { "jwt": [] - } - ], - "summary": "Download multiple charts as YAML files", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/export/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/export/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/export/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of CSS templates", + "tags": [ + "CSS Templates" ] - } - }, - "/api/v1/chart/favorite_status/": { - "get": { - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_fav_star_ids_schema" - } + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CssTemplateRestApi.post" } - }, - "in": "query", - "name": "q" - } - ], + } + }, + "description": "Model schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetFavStarIdsSchema" - }, - "example": { - "result": [] + "properties": { + "id": { + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/CssTemplateRestApi.post" + } + }, + "type": "object" } } }, - "description": "None" + "description": "Item inserted" }, "400": { "$ref": "#/components/responses/400" @@ -14593,8 +17685,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -14603,86 +17695,79 @@ "security": [ { "jwt": [] - } - ], - "summary": "Check favorited charts for current user", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/favorite_status/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/favorite_status/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/favorite_status/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a CSS template", + "tags": [ + "CSS Templates" ] } }, - "/api/v1/chart/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing charts?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" + "/api/v1/css_template/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } } - } - }, - "required": true - }, + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Chart import result" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -14700,32 +17785,19 @@ "security": [ { "jwt": [] - } - ], - "summary": "Import chart(s) with associated datasets and databases", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/chart/import/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/chart/import/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/import/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "CSS Templates" ] } }, - "/api/v1/chart/related/{column_name}": { + "/api/v1/css_template/related/{column_name}": { "get": { - "description": "Get a list of all possible owners for a chart. Use `owners` has the `column_name` parameter", "parameters": [ { "in": "path", @@ -14753,10 +17825,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -14768,74 +17836,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Get related fields data (chart-related-column-name)", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - } - }, - "/api/v1/chart/warm_up_cache": { - "put": { - "description": "Warms up the cache for the chart. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore_json` action.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartCacheWarmUpRequestSchema" - }, - "example": { - "chart_id": 1, - "dashboard_id": 1, - "extra_filters": "string" - } - } - }, - "description": "Identifies the chart to warm up cache for, and any additional dashboard or filter context to use.", - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartCacheWarmUpResponseSchema" - }, - "example": { - "result": [] - } - } - }, - "description": "Each chart's warmup status" - }, - "400": { - "$ref": "#/components/responses/400" + "403": { + "$ref": "#/components/responses/403" }, "404": { "$ref": "#/components/responses/404" @@ -14847,40 +17849,26 @@ "security": [ { "jwt": [] - } - ], - "summary": "Warm up the cache for the chart", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/chart/warm_up_cache\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/chart/warm_up_cache\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/warm_up_cache\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "CSS Templates" ] } }, - "/api/v1/chart/{id_or_uuid}": { - "get": { - "description": "Get a chart", + "/api/v1/css_template/{pk}": { + "delete": { "parameters": [ { - "description": "Either the id of the chart, or its uuid", "in": "path", - "name": "id_or_uuid", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], @@ -14890,83 +17878,41 @@ "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/ChartGetResponseSchema" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "result": { - "cache_timeout": "string", - "certification_details": "string", - "certified_by": "string", - "changed_on_delta_humanized": "string", - "dashboards": [], - "datasource_id": 1, - "datasource_name_text": {}, - "datasource_type": "string", - "datasource_url": {}, - "datasource_uuid": "550e8400-e29b-41d4-a716-446655440000", - "description": "string", - "id": 1, - "is_managed_externally": true, - "owners": [], - "params": "string", - "query_context": "string", - "slice_name": "string", - "tags": [], - "thumbnail_url": "string", - "url": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000", - "viz_type": "string" - } } } }, - "description": "Chart" - }, - "302": { - "description": "Redirects to the current digest" + "description": "Item deleted" }, - "400": { - "$ref": "#/components/responses/400" + "404": { + "$ref": "#/components/responses/404" }, - "401": { - "$ref": "#/components/responses/401" + "422": { + "$ref": "#/components/responses/422" }, - "404": { - "$ref": "#/components/responses/404" + "500": { + "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get a chart detail information", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/{id_or_uuid}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/{id_or_uuid}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/{id_or_uuid}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a CSS template", + "tags": [ + "CSS Templates" ] - } - }, - "/api/v1/chart/{pk}": { - "delete": { + }, + "get": { + "description": "Get an item model", "parameters": [ { "in": "path", @@ -14975,6 +17921,17 @@ "schema": { "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -14983,25 +17940,58 @@ "application/json": { "schema": { "properties": { - "message": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/CssTemplateRestApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", "type": "string" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Chart delete" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -15015,26 +18005,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a chart", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/chart/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/chart/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Get a CSS template", + "tags": [ + "CSS Templates" ] }, "put": { @@ -15052,30 +18030,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartRestApi.put" - }, - "example": { - "cache_timeout": 1, - "certification_details": "string", - "certified_by": "string", - "dashboards": [1], - "datasource_id": 1, - "datasource_type": "table", - "description": "string", - "external_url": "string", - "is_managed_externally": true, - "owners": [1], - "params": "string", - "query_context": "string", - "query_context_generation": true, - "slice_name": "string", - "tags": [1], - "uuid": "550e8400-e29b-41d4-a716-446655440000", - "viz_type": ["bar", "area", "table"] + "$ref": "#/components/schemas/CssTemplateRestApi.put" } } }, - "description": "Chart schema", + "description": "Model schema", "required": true }, "responses": { @@ -15084,40 +18043,15 @@ "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/ChartRestApi.put" + "$ref": "#/components/schemas/CssTemplateRestApi.put" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "cache_timeout": 1, - "certification_details": "string", - "certified_by": "string", - "dashboards": [], - "datasource_id": 1, - "datasource_type": "table", - "description": "string", - "external_url": "string", - "is_managed_externally": true, - "owners": [], - "params": "string", - "query_context": "string", - "query_context_generation": true, - "slice_name": "string", - "tags": [], - "uuid": "550e8400-e29b-41d4-a716-446655440000", - "viz_type": ["bar", "area", "table"] - } } } }, - "description": "Chart changed" + "description": "Item changed" }, "400": { "$ref": "#/components/responses/400" @@ -15125,9 +18059,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -15141,45 +18072,25 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update a chart", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/chart/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/chart/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update a CSS template", + "tags": [ + "CSS Templates" ] } }, - "/api/v1/chart/{pk}/cache_screenshot/": { - "get": { + "/api/v1/dashboard/": { + "delete": { "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/screenshot_query_schema" + "$ref": "#/components/schemas/get_delete_ids_schema" } } }, @@ -15192,45 +18103,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" - }, - "example": { - "cache_key": "string", - "chart_url": "string", - "image_url": "string", - "task_status": "string", - "task_updated_at": "string" - } - } - }, - "description": "Chart async result" - }, - "202": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" - }, - "example": { - "cache_key": "string", - "chart_url": "string", - "image_url": "string", - "task_status": "string", - "task_updated_at": "string" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Chart screenshot task created" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard bulk delete" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15238,97 +18133,58 @@ "security": [ { "jwt": [] - } - ], - "summary": "Compute and cache a screenshot (chart-pk-cache-screenshot)", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/1/cache_screenshot/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/1/cache_screenshot/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1/cache_screenshot/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Bulk delete dashboards (soft delete, recoverable via restore, when the SOFT_DELETE feature flag is enabled; permanent otherwise)", + "tags": [ + "Dashboards" ] - } - }, - "/api/v1/chart/{pk}/data/": { + }, "get": { - "description": "Takes a chart ID and uses the query context stored when the chart was saved to return payload data response.", + "description": "Gets a list of dashboards, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "description": "The chart ID", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The format in which the data should be returned", - "in": "query", - "name": "format", - "schema": { - "type": "string" - } - }, - { - "description": "The type in which the data should be returned", - "in": "query", - "name": "type", - "schema": { - "type": "string" - } - }, - { - "description": "Should the queries be forced to load from the source", - "in": "query", - "name": "force", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" - }, - "example": { - "result": [] + "$ref": "#/components/schemas/get_list_schema" } } }, - "description": "Query result" - }, - "202": { + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" - }, - "example": { - "channel_id": "string", - "job_id": "string", - "result_url": "string", - "status": "string", - "user_id": "string" + "properties": { + "count": { + "type": "integer" + }, + "ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "result": { + "items": { + "$ref": "#/components/schemas/DashboardRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Async job details" + "description": "Dashboards" }, "400": { "$ref": "#/components/responses/400" @@ -15336,6 +18192,9 @@ "401": { "$ref": "#/components/responses/401" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15343,59 +18202,49 @@ "security": [ { "jwt": [] - } - ], - "summary": "Return payload data response for a chart", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/1/data/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/1/data/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1/data/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of dashboards", + "tags": [ + "Dashboards" ] - } - }, - "/api/v1/chart/{pk}/favorites/": { - "delete": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardRestApi.post" + } } - } - ], + }, + "description": "Dashboard schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { + "id": { + "type": "number" + }, "result": { - "type": "object" + "$ref": "#/components/schemas/DashboardRestApi.post" } }, "type": "object" - }, - "example": { - "result": {} } } }, - "description": "Chart removed from favorites" + "description": "Dashboard added" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -15410,37 +18259,31 @@ "security": [ { "jwt": [] - } - ], - "summary": "Remove the chart from the user favorite list", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/chart/1/favorites/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/chart/1/favorites/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1/favorites/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Create a new dashboard", + "tags": [ + "Dashboards" ] - }, - "post": { + } + }, + "/api/v1/dashboard/_info": { + "get": { + "description": "Get metadata information about this API resource", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -15449,24 +18292,55 @@ "application/json": { "schema": { "properties": { - "result": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" - }, - "example": { - "result": {} } } }, - "description": "Chart added to favorites" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -15475,60 +18349,42 @@ "security": [ { "jwt": [] - } - ], - "summary": "Mark the chart as favorite for the current user", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/chart/1/favorites/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/chart/1/favorites/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1/favorites/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Dashboards" ] } }, - "/api/v1/chart/{pk}/screenshot/{digest}/": { + "/api/v1/dashboard/export/": { "get": { "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "path", - "name": "digest", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_export_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { "200": { "content": { - "image/*": { + "text/plain": { "schema": { - "format": "binary", "type": "string" } } }, - "description": "Chart screenshot image" + "description": "Dashboard export" }, "400": { "$ref": "#/components/responses/400" @@ -15539,6 +18395,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15546,65 +18405,42 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a computed screenshot from cache (chart-pk-screenshot-digest)", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/1/screenshot/{digest}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/1/screenshot/{digest}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1/screenshot/{digest}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Download multiple dashboards as YAML files", + "tags": [ + "Dashboards" ] } }, - "/api/v1/chart/{pk}/thumbnail/{digest}/": { + "/api/v1/dashboard/favorite_status/": { "get": { - "description": "Compute or get already computed chart thumbnail from cache.", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "A hex digest that makes this chart unique", - "in": "path", - "name": "digest", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_fav_star_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { "200": { "content": { - "image/*": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "$ref": "#/components/schemas/GetFavStarIdsSchema" } } }, - "description": "Chart thumbnail image" - }, - "302": { - "description": "Redirects to the current digest" + "description": "None" }, "400": { "$ref": "#/components/responses/400" @@ -15622,44 +18458,60 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get chart thumbnail", - "tags": ["Charts"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/chart/1/thumbnail/{digest}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/chart/1/thumbnail/{digest}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/chart/1/thumbnail/{digest}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Check favorited dashboards for current user", + "tags": [ + "Dashboards" ] } }, - "/api/v1/css_template/": { - "delete": { - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } + "/api/v1/dashboard/import/": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "formData": { + "description": "upload file (ZIP or JSON)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing dashboards?", + "type": "boolean" + }, + "overwrite_all": { + "description": "overwrite all existing assets within the dashboard?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" } - }, - "in": "query", - "name": "q" - } - ], + } + }, + "required": true + }, "responses": { "200": { "content": { @@ -15671,19 +18523,16 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "CSS templates bulk delete" + "description": "Dashboard import result" }, - "401": { - "$ref": "#/components/responses/401" + "400": { + "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" }, "422": { "$ref": "#/components/responses/422" @@ -15695,41 +18544,27 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete CSS templates", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/css_template/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/css_template/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Import dashboard(s) with associated charts/datasets/databases", + "tags": [ + "Dashboards" ] - }, + } + }, + "/api/v1/dashboard/permalink/{key}": { "get": { - "description": "Gets a list of CSS templates, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -15738,83 +18573,16 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, + "state": { + "description": "The stored state", "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/CssTemplateRestApi.get_list" - }, - "type": "array" } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, - "description": "Items from Model" + "description": "Returns the stored state." }, "400": { "$ref": "#/components/responses/400" @@ -15822,6 +18590,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -15832,69 +18603,51 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of CSS templates", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/css_template/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/css_template/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get dashboard's permanent link state", + "tags": [ + "Dashboard Permanent Link" ] - }, - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CssTemplateRestApi.post" - }, - "example": { - "css": "string", - "template_name": "string" - } + } + }, + "/api/v1/dashboard/related/{column_name}": { + "get": { + "description": "Get a list of all possible related entities for a dashboard", + "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" } }, - "description": "Model schema", - "required": true - }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "type": "string" - }, - "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.post" - } - }, - "type": "object" - }, - "example": { - "id": "string", - "result": { - "css": "string", - "template_name": "string" - } + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Item inserted" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -15902,8 +18655,11 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -15912,38 +18668,34 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a CSS template", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/css_template/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/css_template/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Dashboards" ] } }, - "/api/v1/css_template/_info": { + "/api/v1/dashboard/{id_or_slug}": { "get": { - "description": "Get metadata information about this API resource", "parameters": [ + { + "description": "Either the id of the dashboard, or its slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_info_schema" + "$ref": "#/components/schemas/get_item_schema" } } }, @@ -15957,54 +18709,15 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "result": { + "$ref": "#/components/schemas/DashboardGetResponseSchema" } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, - "description": "Item from Model" + "description": "Dashboard" }, "400": { "$ref": "#/components/responses/400" @@ -16012,60 +18725,37 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, - "500": { - "$ref": "#/components/responses/500" + "404": { + "$ref": "#/components/responses/404" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (css-template--info)", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/css_template/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/css_template/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a dashboard detail information", + "tags": [ + "Dashboards" ] } }, - "/api/v1/css_template/related/{column_name}": { + "/api/v1/dashboard/{id_or_slug}/charts": { "get": { "parameters": [ { "in": "path", - "name": "column_name", + "name": "id_or_slug", "required": true, "schema": { "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -16073,15 +18763,19 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] + "properties": { + "result": { + "items": { + "$ref": "#/components/schemas/ChartEntityResponseSchema" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "Dashboard chart definitions" }, "400": { "$ref": "#/components/responses/400" @@ -16089,76 +18783,81 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (css-template-related-column-name)", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/css_template/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/css_template/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a dashboard's chart definitions.", + "tags": [ + "Dashboards" ] } }, - "/api/v1/css_template/{pk}": { - "delete": { + "/api/v1/dashboard/{id_or_slug}/copy/": { + "post": { "parameters": [ { + "description": "The dashboard id or slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardCopySchema" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "id": { + "type": "number" + }, + "last_modified_time": { + "type": "number" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Item deleted" + "description": "Id of new dashboard and last modified time" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16166,49 +18865,29 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a CSS template", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/css_template/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/css_template/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Create a copy of an existing dashboard", + "tags": [ + "Dashboards" ] - }, + } + }, + "/api/v1/dashboard/{id_or_slug}/datasets": { "get": { - "description": "Get an item model", + "description": "Returns a list of a dashboard's datasets. Each dataset includes only the information necessary to render the dashboard's charts.", "parameters": [ { + "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_item_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -16217,68 +18896,18 @@ "application/json": { "schema": { "properties": { - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "id": { - "description": "The item id", - "type": "string" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.get" - }, - "show_columns": { - "description": "A list of columns", "items": { - "type": "string" + "$ref": "#/components/schemas/DashboardDatasetSchema" }, "type": "array" - }, - "show_title": { - "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", - "type": "string" } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "changed_on_delta_humanized": {}, - "css": "string", - "id": 1, - "template_name": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, - "description": "Item from Model" + "description": "Dashboard dataset definitions" }, "400": { "$ref": "#/components/responses/400" @@ -16286,101 +18915,59 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get a CSS template", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/css_template/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/css_template/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get dashboard's datasets", + "tags": [ + "Dashboards" ] - }, - "put": { + } + }, + "/api/v1/dashboard/{id_or_slug}/embedded": { + "delete": { "parameters": [ { + "description": "The dashboard id or slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CssTemplateRestApi.put" - }, - "example": { - "css": "string", - "template_name": "string" - } - } - }, - "description": "Model schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.put" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "result": { - "css": "string", - "template_name": "string" - } } } }, - "description": "Item changed" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Successfully removed the configuration" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16388,42 +18975,26 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update a CSS template", - "tags": ["CSS Templates"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/css_template/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/css_template/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/css_template/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a dashboard's embedded configuration", + "tags": [ + "Dashboards" ] - } - }, - "/api/v1/dashboard/": { - "delete": { + }, + "get": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -16432,31 +19003,19 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Dashboard bulk delete" + "description": "Result contains the embedded dashboard config" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16464,85 +19023,58 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete dashboards", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dashboard/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dashboard/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Get the dashboard's embedded configuration", + "tags": [ + "Dashboards" ] }, - "get": { - "description": "Gets a list of dashboards, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" + "post": { + "parameters": [ + { + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbeddedDashboardConfig" + } + } + }, + "description": "The embedded configuration to set", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "count": { - "type": "integer" - }, - "ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, "result": { - "items": { - "$ref": "#/components/schemas/DashboardRestApi.get_list" - }, - "type": "array" + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" } }, "type": "object" - }, - "example": { - "count": 1, - "ids": [1], - "result": [{}] } } }, - "description": "Dashboards" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Successfully set the configuration" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16550,103 +19082,59 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of dashboards", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Set a dashboard's embedded configuration", + "tags": [ + "Dashboards" ] }, - "post": { + "put": { + "description": "Sets a dashboard's embedded configuration.", + "parameters": [ + { + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardRestApi.post" - }, - "example": { - "certification_details": "string", - "certified_by": "string", - "css": "string", - "dashboard_title": "string", - "external_url": "string", - "is_managed_externally": true, - "json_metadata": "string", - "owners": [1], - "position_json": "string", - "published": true, - "roles": [1], - "slug": "string", - "theme_id": 1, - "uuid": "550e8400-e29b-41d4-a716-446655440000" + "$ref": "#/components/schemas/EmbeddedDashboardConfig" } } }, - "description": "Dashboard schema", + "description": "The embedded configuration to set", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/DashboardRestApi.post" + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "certification_details": "string", - "certified_by": "string", - "css": "string", - "dashboard_title": "string", - "external_url": "string", - "is_managed_externally": true, - "json_metadata": "string", - "owners": [], - "position_json": "string", - "published": true, - "roles": [], - "slug": "string", - "theme_id": 1, - "uuid": "550e8400-e29b-41d4-a716-446655440000" - } } } }, - "description": "Dashboard added" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Successfully set the configuration" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -16654,43 +19142,28 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new dashboard", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/_info": { + "/api/v1/dashboard/{id_or_slug}/tabs": { "get": { - "description": "Get metadata information about this API resource", + "description": "Returns a list of a dashboard's tabs and dashboard's nested tree structure for associated tabs.", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "Either the id of the dashboard, or its slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -16699,54 +19172,18 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", + "result": { "items": { - "type": "string" + "$ref": "#/components/schemas/TabsPayloadSchema" }, - "type": "array" + "type": "object" } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, - "description": "Item from Model" + "description": "Dashboard tabs" }, "400": { "$ref": "#/components/responses/400" @@ -16754,71 +19191,61 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, - "500": { - "$ref": "#/components/responses/500" + "404": { + "$ref": "#/components/responses/404" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (dashboard--info)", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get dashboard's tabs", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/export/": { - "get": { + "/api/v1/dashboard/{pk}": { + "delete": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { "200": { "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Dashboard export" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -16832,57 +19259,91 @@ "security": [ { "jwt": [] - } - ], - "summary": "Download multiple dashboards as YAML files", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/export/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/export/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/export/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a dashboard (soft delete, recoverable via restore, when the SOFT_DELETE feature flag is enabled; permanent otherwise)", + "tags": [ + "Dashboards" ] - } - }, - "/api/v1/dashboard/favorite_status/": { - "get": { + }, + "put": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_fav_star_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardRestApi.put" + } + } + }, + "description": "Dashboard schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetFavStarIdsSchema" - }, - "example": { - "result": [] + "properties": { + "id": { + "type": "number" + }, + "last_modified_time": { + "type": "number" + }, + "new_transaction_id": { + "description": "Continuum transaction_id of the live row after this update. Differs from old_transaction_id when the update produced a new version row.", + "nullable": true, + "type": "integer" + }, + "new_version": { + "description": "0-based version_number of the newly-live row after this update. Can equal old_version when no versioned column changed, or when retention pruning dropped an older closed row in the same commit.", + "nullable": true, + "type": "integer" + }, + "new_version_uuid": { + "description": "Deterministic version_uuid of the live row after this update. Null when version capture is disabled.", + "format": "uuid", + "nullable": true, + "type": "string" + }, + "old_transaction_id": { + "description": "Continuum transaction_id of the live row before this update. Stable across pruning.", + "nullable": true, + "type": "integer" + }, + "old_version": { + "description": "0-based version_number of the live row before this update. Unstable under retention pruning \u2014 see old_transaction_id for a stable identifier.", + "nullable": true, + "type": "integer" + }, + "old_version_uuid": { + "description": "Deterministic version_uuid of the live row before this update. Null when version capture is disabled or the entity has no version rows yet.", + "format": "uuid", + "nullable": true, + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/DashboardRestApi.put" + } + }, + "type": "object" } } }, - "description": "None" + "description": "Dashboard changed" }, "400": { "$ref": "#/components/responses/400" @@ -16890,9 +19351,15 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -16900,86 +19367,48 @@ "security": [ { "jwt": [] - } - ], - "summary": "Check favorited dashboards for current user", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/favorite_status/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/favorite_status/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/favorite_status/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update a dashboard", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/import/": { + "/api/v1/dashboard/{pk}/cache_dashboard_screenshot/": { "post": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP or JSON)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing dashboards?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/DashboardScreenshotPostSchema" } } - }, - "required": true + } }, "responses": { - "200": { + "202": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "$ref": "#/components/schemas/DashboardCacheScreenshotResponseSchema" } } }, - "description": "Dashboard import result" + "description": "Dashboard async result" }, "400": { "$ref": "#/components/responses/400" @@ -16987,8 +19416,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -16997,60 +19426,55 @@ "security": [ { "jwt": [] - } - ], - "summary": "Import dashboard(s) with associated charts/datasets/databases", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/import/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/import/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/import/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Compute and cache a screenshot", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/permalink/{key}": { - "get": { + "/api/v1/dashboard/{pk}/chart_customizations": { + "put": { "parameters": [ { "in": "path", - "name": "key", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardChartCustomizationsConfigUpdateSchema" + } + } + }, + "description": "Chart customizations configuration", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "state": { - "description": "The stored state", - "type": "object" + "result": { + "type": "array" } }, "type": "object" - }, - "example": { - "state": {} } } }, - "description": "Returns the stored state." + "description": "Dashboard chart customizations updated" }, "400": { "$ref": "#/components/responses/400" @@ -17058,6 +19482,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -17071,67 +19498,63 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get dashboard's permanent link state", - "tags": ["Dashboard Permanent Link"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/permalink/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/permalink/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/permalink/{key}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update chart customizations configuration for a dashboard.", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/related/{column_name}": { - "get": { - "description": "Get a list of all possible owners for a dashboard.", + "/api/v1/dashboard/{pk}/colors": { + "put": { "parameters": [ { "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, "in": "query", - "name": "q" + "name": "mark_updated", + "schema": { + "description": "Whether to update the dashboard changed_on field", + "type": "boolean" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardColorsConfigUpdateSchema" + } + } + }, + "description": "Colors configuration", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] + "properties": { + "result": { + "type": "array" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "Dashboard colors updated" }, "400": { "$ref": "#/components/responses/400" @@ -17139,9 +19562,15 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17149,87 +19578,59 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (dashboard-related-column-name)", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update colors configuration for a dashboard.", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{id_or_slug}": { + "/api/v1/dashboard/{pk}/export_as_example/": { "get": { + "description": "Exports a dashboard with its charts and datasets in the example format used by the Superset example loading system. The export includes Parquet data files and YAML configuration files.", "parameters": [ { - "description": "Either the id of the dashboard, or its slug", + "description": "The dashboard id", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" + } + }, + { + "description": "Whether to include Parquet data files", + "in": "query", + "name": "export_data", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "Limit data export to this many rows per dataset", + "in": "query", + "name": "sample_rows", + "schema": { + "type": "integer" } } ], "responses": { "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/DashboardGetResponseSchema" - } - }, - "type": "object" - }, - "example": { - "result": { - "certification_details": "string", - "certified_by": "string", - "changed_by_name": "string", - "changed_on": "2024-01-15T10:30:00Z", - "changed_on_delta_humanized": "string", - "charts": [], - "created_on_delta_humanized": "string", - "css": "string", - "custom_tags": [], - "dashboard_title": "string", - "id": 1, - "is_managed_externally": true, - "json_metadata": "string", - "owners": [], - "position_json": "string", - "published": true, - "roles": [], - "slug": "string", - "tags": [], - "theme": {}, - "thumbnail_url": "string", - "url": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000" - } + "format": "binary", + "type": "string" } } }, - "description": "Dashboard" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Example bundle ZIP file" }, "401": { "$ref": "#/components/responses/401" @@ -17239,67 +19640,58 @@ }, "404": { "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get a dashboard detail information", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Export dashboard as example bundle", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{id_or_slug}/charts": { - "get": { + "/api/v1/dashboard/{pk}/export_xlsx/": { + "post": { + "description": "Enqueues an async task that writes each chart's data to its own worksheet, uploads the .xlsx to S3, and emails the requesting user a pre-signed download link. Returns immediately with a job id.", "parameters": [ { + "description": "The dashboard id", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardExportXlsxPostSchema" + } } } - ], + }, "responses": { - "200": { + "202": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "items": { - "$ref": "#/components/schemas/ChartEntityResponseSchema" - }, - "type": "array" - } - }, - "type": "object" - }, - "example": { - "result": [{}] + "$ref": "#/components/schemas/DashboardExportXlsxResponseSchema" } } }, - "description": "Dashboard chart definitions" + "description": "Export task accepted" }, "400": { "$ref": "#/components/responses/400" @@ -17312,95 +19704,59 @@ }, "404": { "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + }, + "501": { + "description": "Excel export is not configured on this server" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get a dashboard's chart definitions.", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/charts\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/charts\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/charts\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Export dashboard chart data to Excel", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{id_or_slug}/copy/": { - "post": { + "/api/v1/dashboard/{pk}/favorites/": { + "delete": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardCopySchema" - }, - "example": { - "css": "string", - "dashboard_title": "string", - "duplicate_slices": true, - "json_metadata": "string" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "last_modified_time": { - "type": "number" + "result": { + "type": "object" } }, "type": "object" - }, - "example": { - "id": 1.0, - "last_modified_time": 1.0 } } }, - "description": "Id of new dashboard and last modified time" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard removed from favorites" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -17411,40 +19767,24 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a copy of an existing dashboard", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/1/copy/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/1/copy/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/copy/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Remove the dashboard from the user favorite list", + "tags": [ + "Dashboards" ] - } - }, - "/api/v1/dashboard/{id_or_slug}/datasets": { - "get": { - "description": "Returns a list of a dashboard's datasets. Each dataset includes only the information necessary to render the dashboard's charts.", + }, + "post": { "parameters": [ { - "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], @@ -17455,95 +19795,195 @@ "schema": { "properties": { "result": { - "items": { - "$ref": "#/components/schemas/DashboardDatasetSchema" - }, - "type": "array" + "type": "object" } }, "type": "object" - }, - "example": { - "result": [{}] } } }, - "description": "Dashboard dataset definitions" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard added to favorites" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get dashboard's datasets", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/datasets\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/datasets\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/datasets\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Mark the dashboard as favorite for the current user", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{id_or_slug}/embedded": { - "delete": { + "/api/v1/dashboard/{pk}/filter_state": { + "post": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" + } + }, + { + "in": "query", + "name": "tab_id", + "schema": { + "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "examples": { + "numerical_range_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Numerical Range Filter", + "value": { + "extraFormData": { + "filters": [ + { + "col": "tz_offset", + "op": ">=", + "val": [ + 1000 + ] + }, + { + "col": "tz_offset", + "op": "<=", + "val": [ + 2000 + ] + } + ] + }, + "filterState": { + "label": "1000 <= x <= 2000", + "value": [ + 1000, + 2000 + ] + }, + "id": "NATIVE_FILTER_ID" + } + }, + "time_grain_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Time Grain Filter", + "value": { + "extraFormData": { + "time_grain_sqla": "P1W/1970-01-03T00:00:00Z" + }, + "filterState": { + "label": "Week ending Saturday", + "value": [ + "P1W/1970-01-03T00:00:00Z" + ] + }, + "id": "NATIVE_FILTER_ID" + } + }, + "time_range_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Time Range Filter", + "value": { + "extraFormData": { + "time_range": "DATEADD(DATETIME('2025-01-16T00:00:00'), -7, day) : 2025-01-16T00:00:00" + }, + "filterState": { + "value": "DATEADD(DATETIME('2025-01-16T00:00:00'), -7, day) : 2025-01-16T00:00:00" + }, + "id": "NATIVE_FILTER_ID" + } + }, + "timecolumn_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Time Column Filter", + "value": { + "extraFormData": { + "granularity_sqla": "order_date" + }, + "filterState": { + "value": [ + "order_date" + ] + }, + "id": "NATIVE_FILTER_ID" + } + }, + "value_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Value Filter", + "value": { + "extraFormData": { + "filters": [ + { + "col": "real_name", + "op": "IN", + "val": [ + "John Doe" + ] + } + ] + }, + "filterState": { + "value": [ + "John Doe" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "schema": { + "$ref": "#/components/schemas/TemporaryCachePostSchema" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "message": { + "key": { + "description": "The key to retrieve the value.", "type": "string" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Successfully removed the configuration" + "description": "The value was stored successfully." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17551,34 +19991,32 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a dashboard's embedded configuration", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dashboard/1/embedded\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Create a dashboard's filter state", + "tags": [ + "Dashboard Filter State" ] - }, - "get": { + } + }, + "/api/v1/dashboard/{pk}/filter_state/{key}": { + "delete": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The value key.", + "in": "path", + "name": "key", "required": true, "schema": { "type": "string" @@ -17591,27 +20029,29 @@ "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + "message": { + "description": "The result of the operation", + "type": "string" } }, "type": "object" - }, - "example": { - "result": { - "allowed_domains": [], - "changed_on": "2024-01-15T10:30:00Z", - "dashboard_id": "string", - "uuid": "string" - } } } }, - "description": "Result contains the embedded dashboard config" + "description": "Deleted the stored value." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17619,81 +20059,64 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get the dashboard's embedded configuration", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/embedded\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a dashboard's filter state value", + "tags": [ + "Dashboard Filter State" ] }, - "post": { + "get": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "key", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbeddedDashboardConfig" - }, - "example": { - "allowed_domains": ["string"] - } - } - }, - "description": "The embedded configuration to set", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + "value": { + "description": "The stored value", + "type": "string" } }, "type": "object" - }, - "example": { - "result": { - "allowed_domains": [], - "changed_on": "2024-01-15T10:30:00Z", - "dashboard_id": "string", - "uuid": "string" - } } } }, - "description": "Successfully set the configuration" + "description": "Returns the stored value." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17701,53 +20124,50 @@ "security": [ { "jwt": [] - } - ], - "summary": "Set a dashboard's embedded configuration", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/1/embedded\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a dashboard's filter state value", + "tags": [ + "Dashboard Filter State" ] }, "put": { - "description": "Sets a dashboard's embedded configuration.", "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "key", "required": true, "schema": { "type": "string" } + }, + { + "in": "query", + "name": "tab_id", + "schema": { + "type": "integer" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbeddedDashboardConfig" - }, - "example": { - "allowed_domains": ["string"] + "$ref": "#/components/schemas/TemporaryCachePutSchema" } } }, - "description": "The embedded configuration to set", "required": true }, "responses": { @@ -17756,27 +20176,29 @@ "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + "key": { + "description": "The key to retrieve the value.", + "type": "string" } }, "type": "object" - }, - "example": { - "result": { - "allowed_domains": [], - "changed_on": "2024-01-15T10:30:00Z", - "dashboard_id": "string", - "uuid": "string" - } } } }, - "description": "Successfully set the configuration" + "description": "The value was stored successfully." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17784,44 +20206,40 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Dashboards"], - "operationId": "update_dashboard_by_id_or_slug_embedded", - "summary": "Update dashboard by id_or_slug embedded", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dashboard/1/embedded\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/embedded\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update a dashboard's filter state value", + "tags": [ + "Dashboard Filter State" ] } }, - "/api/v1/dashboard/{id_or_slug}/tabs": { - "get": { - "description": "Returns a list of a dashboard's tabs and dashboard's nested tree structure for associated tabs.", + "/api/v1/dashboard/{pk}/filters": { + "put": { "parameters": [ { - "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardNativeFiltersConfigUpdateSchema" + } + } + }, + "description": "Native filters configuration", + "required": true + }, "responses": { "200": { "content": { @@ -17829,20 +20247,14 @@ "schema": { "properties": { "result": { - "items": { - "$ref": "#/components/schemas/TabsPayloadSchema" - }, - "type": "object" + "type": "array" } }, "type": "object" - }, - "example": { - "result": {} } } }, - "description": "Dashboard tabs" + "description": "Dashboard native filters updated" }, "400": { "$ref": "#/components/responses/400" @@ -17855,187 +20267,176 @@ }, "404": { "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get dashboard's tabs", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/tabs\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/tabs\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/tabs\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update native filters configuration for a dashboard.", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{pk}": { - "delete": { + "/api/v1/dashboard/{pk}/permalink": { + "post": { "parameters": [ { "in": "path", "name": "pk", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" + "requestBody": { + "content": { + "application/json": { + "examples": { + "numerical_range_filter": { + "summary": "Numerical Range Filter", + "value": { + "dataMask": { + "extraFormData": { + "filters": [ + { + "col": "tz_offset", + "op": ">=", + "val": [ + 1000 + ] + }, + { + "col": "tz_offset", + "op": "<=", + "val": [ + 2000 + ] + } + ] + }, + "filterState": { + "label": "1000 <= x <= 200", + "value": [ + 1000, + 2000 + ] + }, + "id": "NATIVE_FILTER_ID" } - }, - "type": "object" + } + }, + "time_grain_filter": { + "summary": "Time Grain Filter", + "value": { + "dataMask": { + "extraFormData": { + "time_grain_sqla": "P1W/1970-01-03T00:00:00Z" + }, + "filterState": { + "label": "Week ending Saturday", + "value": [ + "P1W/1970-01-03T00:00:00Z" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "time_range_filter": { + "summary": "Time Range Filter", + "value": { + "dataMask": { + "extraFormData": { + "time_range": "DATEADD(DATETIME(\"2025-01-16T00:00:00\"), -7, day) : 2025-01-16T00:00:00" + }, + "filterState": { + "value": "DATEADD(DATETIME(\"2025-01-16T00:00:00\"), -7, day) : 2025-01-16T00:00:00" + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "timecolumn_filter": { + "summary": "Time Column Filter", + "value": { + "dataMask": { + "extraFormData": { + "granularity_sqla": "order_date" + }, + "filterState": { + "value": [ + "order_date" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } }, - "example": { - "message": "string" + "value_filter": { + "summary": "Value Filter", + "value": { + "dataMask": { + "extraFormData": { + "filters": [ + { + "col": "real_name", + "op": "IN", + "val": [ + "John Doe" + ] + } + ] + }, + "filterState": { + "value": [ + "John Doe" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } } - } - }, - "description": "Dashboard deleted" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Delete a dashboard", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dashboard/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dashboard/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" - } - ] - }, - "put": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardRestApi.put" }, - "example": { - "certification_details": "string", - "certified_by": "string", - "css": "string", - "dashboard_title": "string", - "external_url": "string", - "is_managed_externally": true, - "json_metadata": "string", - "owners": [1], - "position_json": "string", - "published": true, - "roles": [1], - "slug": "string", - "tags": [1], - "theme_id": 1, - "uuid": "550e8400-e29b-41d4-a716-446655440000" + "schema": { + "$ref": "#/components/schemas/DashboardPermalinkStateSchema" } } }, - "description": "Dashboard schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "last_modified_time": { - "type": "number" + "key": { + "description": "The key to retrieve the permanent link data.", + "type": "string" }, - "result": { - "$ref": "#/components/schemas/DashboardRestApi.put" + "url": { + "description": "permanent link.", + "type": "string" } }, "type": "object" - }, - "example": { - "id": 1.0, - "last_modified_time": 1.0, - "result": { - "certification_details": "string", - "certified_by": "string", - "css": "string", - "dashboard_title": "string", - "external_url": "string", - "is_managed_externally": true, - "json_metadata": "string", - "owners": [], - "position_json": "string", - "published": true, - "roles": [], - "slug": "string", - "tags": [], - "theme_id": 1, - "uuid": "550e8400-e29b-41d4-a716-446655440000" - } } } }, - "description": "Dashboard changed" + "description": "The permanent link was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -18043,12 +20444,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -18059,31 +20454,19 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update a dashboard", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dashboard/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dashboard/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a new dashboard's permanent link", + "tags": [ + "Dashboard Permanent Link" ] } }, - "/api/v1/dashboard/{pk}/cache_dashboard_screenshot/": { - "post": { + "/api/v1/dashboard/{pk}/screenshot/{digest}/": { + "get": { "parameters": [ { "in": "path", @@ -18092,40 +20475,38 @@ "schema": { "type": "integer" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardScreenshotPostSchema" - }, - "example": { - "activeTabs": ["string"], - "anchor": "string", - "dataMask": {}, - "urlParams": [] - } + }, + { + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "download_format", + "schema": { + "enum": [ + "png", + "pdf" + ], + "type": "string" } } - }, + ], "responses": { - "202": { + "200": { "content": { - "application/json": { + "image/*": { "schema": { - "$ref": "#/components/schemas/DashboardCacheScreenshotResponseSchema" - }, - "example": { - "cache_key": "string", - "dashboard_url": "string", - "image_url": "string", - "task_status": "string", - "task_updated_at": "string" + "format": "binary", + "type": "string" } } }, - "description": "Dashboard async result" + "description": "Dashboard thumbnail image" }, "400": { "$ref": "#/components/responses/400" @@ -18143,31 +20524,20 @@ "security": [ { "jwt": [] - } - ], - "summary": "Compute and cache a screenshot (dashboard-pk-cache-dashboard-screenshot)", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/1/cache_dashboard_screenshot/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/1/cache_dashboard_screenshot/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/cache_dashboard_screenshot/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a computed screenshot from cache", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{pk}/chart_customizations": { - "put": { + "/api/v1/dashboard/{pk}/thumbnail/{digest}/": { + "get": { + "description": "Computes async or get already computed dashboard thumbnail from cache.", "parameters": [ { "in": "path", @@ -18176,52 +20546,50 @@ "schema": { "type": "integer" } + }, + { + "description": "A hex digest that makes this dashboard unique", + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardChartCustomizationsConfigUpdateSchema" - }, - "example": { - "deleted": ["string"], - "modified": [{}], - "reordered": ["string"] - } - } - }, - "description": "Chart customizations configuration", - "required": true - }, "responses": { "200": { + "content": { + "image/*": { + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "description": "Dashboard thumbnail image" + }, + "202": { "content": { "application/json": { "schema": { "properties": { - "result": { - "type": "array" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "result": [] } } }, - "description": "Dashboard chart customizations updated" + "description": "Thumbnail does not exist on cache, fired async to compute" }, - "400": { - "$ref": "#/components/responses/400" + "302": { + "description": "Redirects to the current digest" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -18235,92 +20603,99 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update chart customizations configuration for a dashboard.", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dashboard/1/chart_customizations\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dashboard/1/chart_customizations\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/chart_customizations\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get dashboard's thumbnail", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{pk}/colors": { - "put": { + "/api/v1/dashboard/{uuid_str}/activity/": { + "get": { "parameters": [ { + "description": "Dashboard UUID", "in": "path", - "name": "pk", + "name": "uuid_str", "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" } }, { + "description": "Lower bound on issued_at (ISO 8601, UTC)", "in": "query", - "name": "mark_updated", + "name": "since", "schema": { - "description": "Whether to update the dashboard changed_on field", - "type": "boolean" + "format": "date-time", + "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardColorsConfigUpdateSchema" - }, - "example": { - "color_namespace": "string", - "color_scheme": "string", - "map_label_colors": { - "key": "value" - }, - "shared_label_colors": { - "key": "value" - }, - "label_colors": { - "key": "value" - }, - "color_scheme_domain": ["string"] - } + }, + { + "description": "Upper bound on issued_at (ISO 8601, UTC)", + "in": "query", + "name": "until", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "in": "query", + "name": "include", + "schema": { + "default": "all", + "enum": [ + "self", + "related", + "all" + ], + "type": "string" + } + }, + { + "description": "Case-insensitive search over the full history (summary, entity name, kind, path, values) \u2014 applied before pagination, so `count` reflects the matches.", + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "page", + "schema": { + "default": 0, + "minimum": 0, + "type": "integer" } }, - "description": "Colors configuration", - "required": true - }, + { + "in": "query", + "name": "page_size", + "schema": { + "default": 25, + "maximum": 200, + "minimum": 1, + "type": "integer" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "type": "array" - } - }, - "type": "object" - }, - "example": { - "result": [] + "$ref": "#/components/schemas/ActivityResponse" } } }, - "description": "Dashboard colors updated" + "description": "Activity stream ordered newest-first" }, "400": { "$ref": "#/components/responses/400" @@ -18333,82 +20708,60 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Update colors configuration for a dashboard.", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dashboard/1/colors\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dashboard/1/colors\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/colors\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Activity stream \u2014 dashboard own edits + transitive chart-on-dashboard and dataset-via-chart edits, time-bounded by association windows", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{pk}/export_as_example/": { + "/api/v1/dashboard/{uuid_str}/versions/": { "get": { - "description": "Exports a dashboard with its charts and datasets in the example format used by the Superset example loading system. The export includes Parquet data files and YAML configuration files.", "parameters": [ { - "description": "The dashboard id", + "description": "Dashboard UUID", "in": "path", - "name": "pk", + "name": "uuid_str", "required": true, "schema": { - "type": "integer" - } - }, - { - "description": "Whether to include Parquet data files", - "in": "query", - "name": "export_data", - "schema": { - "default": true, - "type": "boolean" - } - }, - { - "description": "Limit data export to this many rows per dataset", - "in": "query", - "name": "sample_rows", - "schema": { - "type": "integer" + "format": "uuid", + "type": "string" } } ], "responses": { "200": { "content": { - "application/zip": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "properties": { + "count": { + "type": "integer" + }, + "result": { + "items": { + "$ref": "#/components/schemas/VersionListItemSchema" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Example bundle ZIP file" + "description": "Version history ordered by oldest first" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -18418,46 +20771,43 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Export dashboard as example bundle", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/export_as_example/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/export_as_example/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/export_as_example/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Return the version history for a dashboard", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{pk}/favorites/": { - "delete": { + "/api/v1/dashboard/{uuid_str}/versions/{version_uuid_str}/": { + "get": { "parameters": [ { + "description": "Dashboard UUID", "in": "path", - "name": "pk", + "name": "uuid_str", "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" + } + }, + { + "description": "Version UUID as returned by the list endpoint", + "in": "path", + "name": "version_uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } } ], @@ -18468,61 +20818,69 @@ "schema": { "properties": { "result": { + "description": "The dashboard's scalar fields at the target version (entity-specific keys), plus a `_version` block with the version-level metadata.", + "properties": { + "_version": { + "$ref": "#/components/schemas/VersionListItemSchema" + } + }, "type": "object" } }, "type": "object" - }, - "example": { - "result": {} } } }, - "description": "Dashboard removed from favorites" + "description": "Snapshot of the dashboard at the target version" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Remove the dashboard from the user favorite list", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dashboard/1/favorites/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dashboard/1/favorites/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/favorites/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Read-only snapshot of the dashboard at a given version", + "tags": [ + "Dashboards" ] - }, + } + }, + "/api/v1/dashboard/{uuid_str}/versions/{version_uuid_str}/restore": { "post": { "parameters": [ { + "description": "Dashboard UUID", "in": "path", - "name": "pk", + "name": "uuid_str", "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" + } + }, + { + "description": "Version UUID as returned by the list-versions endpoint. Stable across retention pruning.", + "in": "path", + "name": "version_uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } } ], @@ -18532,199 +20890,85 @@ "application/json": { "schema": { "properties": { - "result": { - "type": "object" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "result": {} } } }, - "description": "Dashboard added to favorites" + "description": "Dashboard was restored" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, - "500": { - "$ref": "#/components/responses/500" + "422": { + "$ref": "#/components/responses/422" } }, "security": [ { "jwt": [] - } - ], - "summary": "Mark the dashboard as favorite for the current user", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/1/favorites/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/1/favorites/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/favorites/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Revert a dashboard to an earlier version (non-destructive)", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{pk}/filter_state": { + "/api/v1/dashboard/{uuid}/purge": { "post": { + "description": "Irreversibly remove an archived dashboard and its dependents. Limited to owners and admins (same audience as restore).", "parameters": [ { "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "tab_id", - "schema": { - "type": "integer" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "examples": { - "numerical_range_filter": { - "description": "**This body should be stringified and put into the value field.**", - "summary": "Numerical Range Filter", - "value": { - "extraFormData": { - "filters": [ - { - "col": "tz_offset", - "op": ">=", - "val": [1000] - }, - { - "col": "tz_offset", - "op": "<=", - "val": [2000] - } - ] - }, - "filterState": { - "label": "1000 <= x <= 2000", - "value": [1000, 2000] - }, - "id": "NATIVE_FILTER_ID" - } - }, - "time_grain_filter": { - "description": "**This body should be stringified and put into the value field.**", - "summary": "Time Grain Filter", - "value": { - "extraFormData": { - "time_grain_sqla": "P1W/1970-01-03T00:00:00Z" - }, - "filterState": { - "label": "Week ending Saturday", - "value": ["P1W/1970-01-03T00:00:00Z"] - }, - "id": "NATIVE_FILTER_ID" - } - }, - "time_range_filter": { - "description": "**This body should be stringified and put into the value field.**", - "summary": "Time Range Filter", - "value": { - "extraFormData": { - "time_range": "DATEADD(DATETIME('2025-01-16T00:00:00'), -7, day) : 2025-01-16T00:00:00" - }, - "filterState": { - "value": "DATEADD(DATETIME('2025-01-16T00:00:00'), -7, day) : 2025-01-16T00:00:00" - }, - "id": "NATIVE_FILTER_ID" - } - }, - "timecolumn_filter": { - "description": "**This body should be stringified and put into the value field.**", - "summary": "Time Column Filter", - "value": { - "extraFormData": { - "granularity_sqla": "order_date" - }, - "filterState": { - "value": ["order_date"] - }, - "id": "NATIVE_FILTER_ID" - } - }, - "value_filter": { - "description": "**This body should be stringified and put into the value field.**", - "summary": "Value Filter", - "value": { - "extraFormData": { - "filters": [ - { - "col": "real_name", - "op": "IN", - "val": ["John Doe"] - } - ] - }, - "filterState": { - "value": ["John Doe"] - }, - "id": "NATIVE_FILTER_ID" - } - } - }, - "schema": { - "$ref": "#/components/schemas/TemporaryCachePostSchema" - }, - "example": { - "value": "string" - } + "name": "uuid", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } - }, - "required": true - }, + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the value.", + "message": { "type": "string" } }, "type": "object" - }, - "example": { - "key": "string" } } }, - "description": "The value was stored successfully." - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard permanently deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -18735,46 +20979,26 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a dashboard's filter state", - "tags": ["Dashboard Filter State"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/1/filter_state\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Permanently delete a soft-deleted dashboard", + "tags": [ + "Dashboards" ] } }, - "/api/v1/dashboard/{pk}/filter_state/{key}": { - "delete": { + "/api/v1/dashboard/{uuid}/restore": { + "post": { "parameters": [ { "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The value key.", - "in": "path", - "name": "key", + "name": "uuid", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -18786,25 +21010,21 @@ "schema": { "properties": { "message": { - "description": "The result of the operation", "type": "string" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Deleted the stored value." - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard restored" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -18818,45 +21038,31 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a dashboard's filter state value", - "tags": ["Dashboard Filter State"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Restore a soft-deleted dashboard", + "tags": [ + "Dashboards" ] - }, + } + }, + "/api/v1/database/": { "get": { + "description": "Gets a list of databases, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -18865,19 +21071,69 @@ "application/json": { "schema": { "properties": { - "value": { - "description": "The stored value", + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/DatabaseRestApi.get_list" + }, + "type": "array" } }, "type": "object" - }, - "example": { - "value": "string" } } }, - "description": "Returns the stored value." + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -18885,9 +21141,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -18898,86 +21151,136 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a dashboard's filter state value", - "tags": ["Dashboard Filter State"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of databases", + "tags": [ + "Database" ] }, - "put": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "tab_id", - "schema": { - "type": "integer" - } - } - ], + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TemporaryCachePutSchema" - }, - "example": { - "value": "string" + "$ref": "#/components/schemas/DatabaseRestApi.post" } } }, + "description": "Database schema", "required": true }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatabaseRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Database added" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Create a new database", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the value.", - "type": "string" + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" - }, - "example": { - "key": "string" } } }, - "description": "The value was stored successfully." + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -18985,9 +21288,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -18998,91 +21298,134 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], - "summary": "Update a dashboard's filter state value", - "tags": ["Dashboard Filter State"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" + "summary": "Get metadata information about this API resource", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/available/": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "available_drivers": { + "description": "Installed drivers for the engine", + "items": { + "type": "string" + }, + "type": "array" + }, + "default_driver": { + "description": "Default driver for the engine", + "type": "string" + }, + "engine": { + "description": "Name of the SQLAlchemy engine", + "type": "string" + }, + "engine_information": { + "description": "Dict with public properties form the DB Engine", + "properties": { + "disable_ssh_tunneling": { + "description": "Whether the engine supports SSH Tunnels", + "type": "boolean" + }, + "supports_file_upload": { + "description": "Whether the engine supports file uploads", + "type": "boolean" + } + }, + "type": "object" + }, + "name": { + "description": "Name of the database", + "type": "string" + }, + "parameters": { + "description": "JSON schema defining the needed parameters", + "type": "object" + }, + "preferred": { + "description": "Is the database preferred?", + "type": "boolean" + }, + "sqlalchemy_uri_placeholder": { + "description": "Example placeholder for the SQLAlchemy URI", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Database names" + }, + "400": { + "$ref": "#/components/responses/400" }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/filter_state/{key}\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get names of databases currently available", + "tags": [ + "Database" ] } }, - "/api/v1/dashboard/{pk}/filters": { - "put": { + "/api/v1/database/export/": { + "get": { "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_export_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardNativeFiltersConfigUpdateSchema" - }, - "example": { - "deleted": ["string"], - "modified": [{}], - "reordered": ["string"] - } - } - }, - "description": "Native filters configuration", - "required": true - }, "responses": { "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "properties": { - "result": { - "type": "array" - } - }, - "type": "object" - }, - "example": { - "result": [] + "format": "binary", + "type": "string" } } }, - "description": "Dashboard native filters updated" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "A zip file with database(s) and dataset(s) as YAML" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -19090,173 +21433,75 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update native filters configuration for a dashboard.", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dashboard/1/filters\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dashboard/1/filters\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/filters\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Download database(s) and associated dataset(s) as a zip file", + "tags": [ + "Database" ] } }, - "/api/v1/dashboard/{pk}/permalink": { + "/api/v1/database/import/": { "post": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "string" - } - } - ], "requestBody": { "content": { - "application/json": { - "examples": { - "numerical_range_filter": { - "summary": "Numerical Range Filter", - "value": { - "dataMask": { - "extraFormData": { - "filters": [ - { - "col": "tz_offset", - "op": ">=", - "val": [1000] - }, - { - "col": "tz_offset", - "op": "<=", - "val": [2000] - } - ] - }, - "filterState": { - "label": "1000 <= x <= 200", - "value": [1000, 2000] - }, - "id": "NATIVE_FILTER_ID" - } - } - }, - "time_grain_filter": { - "summary": "Time Grain Filter", - "value": { - "dataMask": { - "extraFormData": { - "time_grain_sqla": "P1W/1970-01-03T00:00:00Z" - }, - "filterState": { - "label": "Week ending Saturday", - "value": ["P1W/1970-01-03T00:00:00Z"] - }, - "id": "NATIVE_FILTER_ID" - } - } - }, - "time_range_filter": { - "summary": "Time Range Filter", - "value": { - "dataMask": { - "extraFormData": { - "time_range": "DATEADD(DATETIME(\"2025-01-16T00:00:00\"), -7, day) : 2025-01-16T00:00:00" - }, - "filterState": { - "value": "DATEADD(DATETIME(\"2025-01-16T00:00:00\"), -7, day) : 2025-01-16T00:00:00" - }, - "id": "NATIVE_FILTER_ID" - } - } - }, - "timecolumn_filter": { - "summary": "Time Column Filter", - "value": { - "dataMask": { - "extraFormData": { - "granularity_sqla": "order_date" - }, - "filterState": { - "value": ["order_date"] - }, - "id": "NATIVE_FILTER_ID" - } + "multipart/form-data": { + "schema": { + "properties": { + "encrypted_extra_secrets": { + "description": "JSON map of sensitive values for masked_encrypted_extra fields. Keys are file paths (e.g., \"databases/db.yaml\") and values are JSON objects mapping JSONPath expressions to secrets. (e.g., `{\"databases/MyDatabase.yaml\": {\"$.credentials_info.private_key\": \"actual_key\"}}`).", + "type": "string" + }, + "formData": { + "description": "upload file (ZIP)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing databases?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" } }, - "value_filter": { - "summary": "Value Filter", - "value": { - "dataMask": { - "extraFormData": { - "filters": [ - { - "col": "real_name", - "op": "IN", - "val": ["John Doe"] - } - ] - }, - "filterState": { - "value": ["John Doe"] - }, - "id": "NATIVE_FILTER_ID" - } - } - } - }, - "schema": { - "$ref": "#/components/schemas/DashboardPermalinkStateSchema" - }, - "example": { - "activeTabs": ["string"], - "anchor": "string", - "chartStates": {}, - "dataMask": {}, - "urlParams": [{}] + "type": "object" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the permanent link data.", - "type": "string" - }, - "url": { - "description": "permanent link.", + "message": { "type": "string" } }, "type": "object" - }, - "example": { - "key": "string", - "url": "string" } } }, - "description": "The permanent link was stored successfully." + "description": "Database import result" }, "400": { "$ref": "#/components/responses/400" @@ -19274,53 +21519,46 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new dashboard's permanent link", - "tags": ["Dashboard Permanent Link"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dashboard/1/permalink\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dashboard/1/permalink\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/permalink\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Import database(s) with associated datasets", + "tags": [ + "Database" ] } }, - "/api/v1/dashboard/{pk}/screenshot/{digest}/": { + "/api/v1/database/oauth2/": { "get": { + "description": "-> Receive and store personal access tokens from OAuth for user-level authorization", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, + "in": "query", + "name": "state", "schema": { - "type": "integer" + "type": "string" } }, { - "in": "path", - "name": "digest", - "required": true, + "in": "query", + "name": "code", "schema": { "type": "string" } }, { "in": "query", - "name": "download_format", + "name": "scope", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "error", "schema": { - "enum": ["png", "pdf"], "type": "string" } } @@ -19328,21 +21566,17 @@ "responses": { "200": { "content": { - "image/*": { + "text/html": { "schema": { - "format": "binary", "type": "string" } } }, - "description": "Dashboard thumbnail image" + "description": "A dummy self-closing HTML page" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, "404": { "$ref": "#/components/responses/404" }, @@ -19353,93 +21587,63 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a computed screenshot from cache (dashboard-pk-screenshot-digest)", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/screenshot/{digest}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/screenshot/{digest}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/screenshot/{digest}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Receive personal access tokens from OAuth2", + "tags": [ + "Database" ] } }, - "/api/v1/dashboard/{pk}/thumbnail/{digest}/": { + "/api/v1/database/related/{column_name}": { "get": { - "description": "Computes async or get already computed dashboard thumbnail from cache.", "parameters": [ { "in": "path", - "name": "pk", + "name": "column_name", "required": true, "schema": { - "type": "integer" + "type": "string" } }, { - "description": "A hex digest that makes this dashboard unique", - "in": "path", - "name": "digest", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { "content": { - "image/*": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "$ref": "#/components/schemas/get_related_schema" } } }, - "description": "Dashboard thumbnail image" - }, - "202": { + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Thumbnail does not exist on cache, fired async to compute" + "description": "Related column data" }, - "302": { - "description": "Redirects to the current digest" + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -19447,135 +21651,49 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get dashboard's thumbnail", - "tags": ["Dashboards"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dashboard/1/thumbnail/{digest}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dashboard/1/thumbnail/{digest}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dashboard/1/thumbnail/{digest}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Database" ] } }, - "/api/v1/database/": { - "get": { - "description": "Gets a list of databases, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } + "/api/v1/database/test_connection/": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseTestConnectionSchema" } - }, - "in": "query", - "name": "q" - } - ], + } + }, + "description": "Database schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", + "message": { "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/DatabaseRestApi.get_list" - }, - "type": "array" - } - }, - "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" + } }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] + "type": "object" } } }, - "description": "Items from Model" + "description": "Database Test Connection" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, "422": { "$ref": "#/components/responses/422" }, @@ -19586,109 +21704,44 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of databases", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Test a database connection", + "tags": [ + "Database" ] - }, + } + }, + "/api/v1/database/upload_metadata/": { "post": { "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DatabaseRestApi.post" - }, - "example": { - "allow_ctas": true, - "allow_cvas": true, - "allow_dml": true, - "allow_file_upload": true, - "allow_run_async": true, - "cache_timeout": 1, - "configuration_method": {}, - "database_name": "string", - "driver": "string", - "engine": "string", - "expose_in_sqllab": true, - "external_url": "string", - "extra": "string", - "force_ctas_schema": "string", - "impersonate_user": true, - "is_managed_externally": true, - "masked_encrypted_extra": "string", - "parameters": {}, - "server_cert": "string", - "sqlalchemy_uri": "string", - "ssh_tunnel": {}, - "uuid": "string" + "$ref": "#/components/schemas/UploadFileMetadataPostSchema" } } }, - "description": "Database schema", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/DatabaseRestApi.post" + "$ref": "#/components/schemas/UploadFileMetadata" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "allow_ctas": true, - "allow_cvas": true, - "allow_dml": true, - "allow_file_upload": true, - "allow_run_async": true, - "cache_timeout": 1, - "configuration_method": {}, - "database_name": "string", - "driver": "string", - "engine": "string", - "expose_in_sqllab": true, - "external_url": "string", - "extra": "string", - "force_ctas_schema": "string", - "impersonate_user": true, - "is_managed_externally": true, - "masked_encrypted_extra": "string", - "parameters": {}, - "server_cert": "string", - "sqlalchemy_uri": "string", - "ssh_tunnel": {}, - "uuid": "string" - } } } }, - "description": "Database added" + "description": "Upload response" }, "400": { "$ref": "#/components/responses/400" @@ -19699,6 +21752,21 @@ "404": { "$ref": "#/components/responses/404" }, + "413": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Payload too large, file exceeds the maximum allowed size" + }, "500": { "$ref": "#/components/responses/500" } @@ -19706,106 +21774,49 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Upload a file and returns file metadata", + "tags": [ + "Database" ] } }, - "/api/v1/database/_info": { - "get": { - "description": "Get metadata information about this API resource", - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } + "/api/v1/database/validate_parameters/": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseValidateParametersSchema" } - }, - "in": "query", - "name": "q" - } - ], + } + }, + "description": "DB-specific parameters", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, - "description": "Item from Model" + "description": "Database Test Connection" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, "422": { "$ref": "#/components/responses/422" }, @@ -19816,109 +21827,56 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (database--info)", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Validate database connection parameters", + "tags": [ + "Database" ] } }, - "/api/v1/database/available/": { - "get": { + "/api/v1/database/{pk}": { + "delete": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "items": { - "properties": { - "available_drivers": { - "description": "Installed drivers for the engine", - "items": { - "type": "string" - }, - "type": "array" - }, - "default_driver": { - "description": "Default driver for the engine", - "type": "string" - }, - "engine": { - "description": "Name of the SQLAlchemy engine", - "type": "string" - }, - "engine_information": { - "description": "Dict with public properties form the DB Engine", - "properties": { - "disable_ssh_tunneling": { - "description": "Whether the engine supports SSH Tunnels", - "type": "boolean" - }, - "supports_file_upload": { - "description": "Whether the engine supports file uploads", - "type": "boolean" - } - }, - "type": "object" - }, - "name": { - "description": "Name of the database", - "type": "string" - }, - "parameters": { - "description": "JSON schema defining the needed parameters", - "type": "object" - }, - "preferred": { - "description": "Is the database preferred?", - "type": "boolean" - }, - "sqlalchemy_uri_placeholder": { - "description": "Example placeholder for the SQLAlchemy URI", - "type": "string" - } - }, - "type": "object" + "properties": { + "message": { + "type": "string" + } }, - "type": "array" - }, - "example": [ - { - "available_drivers": ["string"], - "default_driver": "string", - "engine": "string", - "engine_information": { - "disable_ssh_tunneling": true, - "supports_file_upload": true - }, - "name": "string", - "parameters": {}, - "preferred": true, - "sqlalchemy_uri_placeholder": "string" - } - ] + "type": "object" + } } }, - "description": "Database names" + "description": "Database deleted" }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -19927,61 +21885,47 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get names of databases currently available", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/available/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/available/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/available/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a database", + "tags": [ + "Database" ] - } - }, - "/api/v1/database/export/": { + }, "get": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { "200": { "content": { - "application/zip": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "type": "object" } } }, - "description": "A zip file with database(s) and dataset(s) as YAML" + "description": "Database" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -19990,66 +21934,36 @@ "security": [ { "jwt": [] - } - ], - "summary": "Download database(s) and associated dataset(s) as a zip file", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/export/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/export/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/export/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a database", + "tags": [ + "Database" ] - } - }, - "/api/v1/database/import/": { - "post": { + }, + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing databases?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatabaseRestApi.put" } } }, + "description": "Database schema", "required": true }, "responses": { @@ -20058,18 +21972,18 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatabaseRestApi.put" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Database import result" + "description": "Database changed" }, "400": { "$ref": "#/components/responses/400" @@ -20077,6 +21991,12 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -20087,76 +22007,58 @@ "security": [ { "jwt": [] - } - ], - "summary": "Import database(s) with associated datasets", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/import/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/import/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/import/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Change a database", + "tags": [ + "Database" ] } }, - "/api/v1/database/oauth2/": { + "/api/v1/database/{pk}/catalogs/": { "get": { - "description": "-> Receive and store personal access tokens from OAuth for user-level authorization", "parameters": [ { - "in": "query", - "name": "state", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "code", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "scope", + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, "schema": { - "type": "string" + "type": "integer" } }, { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_catalogs_query_schema" + } + } + }, "in": "query", - "name": "error", - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { "200": { "content": { - "text/html": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/CatalogsResponseSchema" } } }, - "description": "A dummy self-closing HTML page" + "description": "A List of all catalogs from the database" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, "404": { "$ref": "#/components/responses/404" }, @@ -20167,50 +22069,28 @@ "security": [ { "jwt": [] - } - ], - "summary": "Receive personal access tokens from OAuth2", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/oauth2/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/oauth2/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/oauth2/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get all catalogs from a database", + "tags": [ + "Database" ] } }, - "/api/v1/database/related/{column_name}": { + "/api/v1/database/{pk}/connection": { "get": { "parameters": [ { + "description": "The database id", "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -20218,15 +22098,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] + "$ref": "#/components/schemas/DatabaseConnectionSchema" } } }, - "description": "Related column data" + "description": "Database with connection info" }, "400": { "$ref": "#/components/responses/400" @@ -20234,8 +22110,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -20244,79 +22120,45 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (database-related-column-name)", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a database connection info", + "tags": [ + "Database" ] } }, - "/api/v1/database/test_connection/": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseTestConnectionSchema" - }, - "example": { - "configuration_method": {}, - "database_name": "string", - "driver": "string", - "engine": "string", - "extra": "string", - "impersonate_user": true, - "masked_encrypted_extra": "string", - "parameters": {}, - "server_cert": "string", - "sqlalchemy_uri": "string", - "ssh_tunnel": {} - } + "/api/v1/database/{pk}/function_names/": { + "get": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "description": "Database schema", - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "$ref": "#/components/schemas/DatabaseFunctionNamesResponse" } } }, - "description": "Database Test Connection" + "description": "Query result" }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -20325,61 +22167,98 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], - "summary": "Test a database connection", - "tags": ["Database"], - "x-codeSamples": [ + "summary": "Get function names supported by a database", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/{pk}/related_objects/": { + "get": { + "parameters": [ { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/test_connection/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseRelatedObjectsResponse" + } + } + }, + "description": "Query result" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/test_connection/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/test_connection/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get charts and dashboards count associated to a database", + "tags": [ + "Database" ] } }, - "/api/v1/database/upload_metadata/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/UploadFileMetadataPostSchema" - } + "/api/v1/database/{pk}/schemas/": { + "get": { + "parameters": [ + { + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "required": true - }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_schemas_query_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/UploadFileMetadata" - } - }, - "type": "object" - }, - "example": { - "result": { - "items": [] - } + "$ref": "#/components/schemas/SchemasResponseSchema" } } }, - "description": "Upload response" + "description": "A List of all schemas from the database" }, "400": { "$ref": "#/components/responses/400" @@ -20397,83 +22276,45 @@ "security": [ { "jwt": [] - } - ], - "summary": "Upload a file and returns file metadata", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/upload_metadata/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/upload_metadata/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/upload_metadata/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get all schemas from a database", + "tags": [ + "Database" ] } }, - "/api/v1/database/validate_parameters/": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseValidateParametersSchema" - }, - "example": { - "catalog": { - "key": "value" - }, - "configuration_method": {}, - "database_name": "string", - "driver": "string", - "engine": "string", - "extra": "string", - "id": 1, - "impersonate_user": true, - "masked_encrypted_extra": "string", - "parameters": { - "key": "value" - }, - "server_cert": "string" - } + "/api/v1/database/{pk}/schemas_access_for_file_upload/": { + "get": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "description": "DB-specific parameters", - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "$ref": "#/components/schemas/DatabaseSchemaAccessForFileUploadResponse" } } }, - "description": "Database Test Connection" + "description": "The list of the database schemas where to upload information" }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -20482,39 +22323,46 @@ "security": [ { "jwt": [] - } - ], - "summary": "Validate database connection parameters", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/validate_parameters/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/validate_parameters/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/validate_parameters/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "The list of the database schemas where to upload information", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}": { - "delete": { + "/api/v1/database/{pk}/select_star/{table_name}/": { + "get": { "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } + }, + { + "description": "Table name", + "in": "path", + "name": "table_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -20522,26 +22370,18 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "$ref": "#/components/schemas/SelectStarResponseSchema" } } }, - "description": "Database deleted" + "description": "SQL statement for a select star for table" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -20555,28 +22395,18 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/database/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/database/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Get database select star for table", + "tags": [ + "Database" ] - }, + } + }, + "/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/": { "get": { "parameters": [ { @@ -20587,6 +22417,24 @@ "schema": { "type": "integer" } + }, + { + "description": "Table name", + "in": "path", + "name": "table_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -20594,11 +22442,11 @@ "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/SelectStarResponseSchema" } } }, - "description": "Database" + "description": "SQL statement for a select star for table" }, "400": { "$ref": "#/components/responses/400" @@ -20606,6 +22454,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -20616,31 +22467,22 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get database select star for table", + "tags": [ + "Database" ] - }, - "put": { + } + }, + "/api/v1/database/{pk}/sync_permissions/": { + "post": { "parameters": [ { + "description": "The database connection ID", "in": "path", "name": "pk", "required": true, @@ -20649,86 +22491,21 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseRestApi.put" - }, - "example": { - "allow_ctas": true, - "allow_cvas": true, - "allow_dml": true, - "allow_file_upload": true, - "allow_run_async": true, - "cache_timeout": 1, - "configuration_method": {}, - "database_name": "string", - "driver": "string", - "engine": "string", - "expose_in_sqllab": true, - "external_url": "string", - "extra": "string", - "force_ctas_schema": "string", - "impersonate_user": true, - "is_managed_externally": true, - "masked_encrypted_extra": "string", - "parameters": {}, - "server_cert": "string", - "sqlalchemy_uri": "string", - "ssh_tunnel": {}, - "uuid": "string" - } - } - }, - "description": "Database schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatabaseRestApi.put" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "allow_ctas": true, - "allow_cvas": true, - "allow_dml": true, - "allow_file_upload": true, - "allow_run_async": true, - "cache_timeout": 1, - "configuration_method": {}, - "database_name": "string", - "driver": "string", - "engine": "string", - "expose_in_sqllab": true, - "external_url": "string", - "extra": "string", - "force_ctas_schema": "string", - "impersonate_user": true, - "is_managed_externally": true, - "masked_encrypted_extra": "string", - "parameters": {}, - "server_cert": "string", - "sqlalchemy_uri": "string", - "ssh_tunnel": {}, - "uuid": "string" - } } } }, - "description": "Database changed" + "description": "Task created to sync permissions." }, "400": { "$ref": "#/components/responses/400" @@ -20736,15 +22513,9 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -20752,30 +22523,18 @@ "security": [ { "jwt": [] - } - ], - "summary": "Change a database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/database/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/database/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Re-sync all permissions for a database connection", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/catalogs/": { + "/api/v1/database/{pk}/table/{table_name}/{schema_name}/": { "get": { "parameters": [ { @@ -20788,15 +22547,22 @@ } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/database_catalogs_query_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "Table name", + "in": "path", + "name": "table_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -20804,14 +22570,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CatalogsResponseSchema" - }, - "example": { - "result": ["string"] + "$ref": "#/components/schemas/TableMetadataResponseSchema" } } }, - "description": "A List of all catalogs from the database" + "description": "Table metadata information" }, "400": { "$ref": "#/components/responses/400" @@ -20822,6 +22585,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -20829,31 +22595,20 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get all catalogs from a database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/catalogs/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/catalogs/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/catalogs/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get database table metadata", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/connection": { + "/api/v1/database/{pk}/table_extra/{table_name}/{schema_name}/": { "get": { + "description": "Response depends on each DB engine spec normally focused on partitions.", "parameters": [ { "description": "The database id", @@ -20863,6 +22618,24 @@ "schema": { "type": "integer" } + }, + { + "description": "Table name", + "in": "path", + "name": "table_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -20870,37 +22643,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseConnectionSchema" - }, - "example": { - "allow_ctas": true, - "allow_cvas": true, - "allow_dml": true, - "allow_file_upload": true, - "allow_run_async": true, - "backend": "string", - "cache_timeout": 1, - "configuration_method": "string", - "database_name": "string", - "driver": "string", - "engine_information": {}, - "expose_in_sqllab": true, - "extra": "string", - "force_ctas_schema": "string", - "id": 1, - "impersonate_user": true, - "is_managed_externally": true, - "masked_encrypted_extra": "string", - "parameters": {}, - "parameters_schema": {}, - "server_cert": "string", - "sqlalchemy_uri": "string", - "ssh_tunnel": {}, - "uuid": "string" + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Database with connection info" + "description": "Table extra metadata information" }, "400": { "$ref": "#/components/responses/400" @@ -20908,6 +22655,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -20918,39 +22668,54 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a database connection info", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/connection\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/connection\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/connection\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get table extra metadata", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/function_names/": { + "/api/v1/database/{pk}/table_metadata/": { "get": { + "description": "Metadata associated with the table (columns, indexes, etc.)", "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } + }, + { + "description": "Table name", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Optional table schema, if not passed default schema will be used", + "in": "query", + "name": "schema", + "schema": { + "type": "string" + } + }, + { + "description": "Optional table catalog, if not passed default catalog will be used", + "in": "query", + "name": "catalog", + "schema": { + "type": "string" + } } ], "responses": { @@ -20958,14 +22723,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseFunctionNamesResponse" - }, - "example": { - "function_names": ["string"] + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Query result" + "description": "Table metadata information" }, "401": { "$ref": "#/components/responses/401" @@ -20980,39 +22742,54 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get function names supported by a database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/function_names/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/function_names/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/function_names/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get table metadata", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/related_objects/": { + "/api/v1/database/{pk}/table_metadata/extra/": { "get": { + "description": "Extra metadata associated with the table (partitions, description, etc.)", "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } + }, + { + "description": "Table name", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Optional table schema, if not passed the schema configured in the database will be used", + "in": "query", + "name": "schema", + "schema": { + "type": "string" + } + }, + { + "description": "Optional table catalog, if not passed the catalog configured in the database will be used", + "in": "query", + "name": "catalog", + "schema": { + "type": "string" + } } ], "responses": { @@ -21020,15 +22797,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseRelatedObjectsResponse" - }, - "example": { - "charts": {}, - "dashboards": {} + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Query result" + "description": "Table extra metadata information" }, "401": { "$ref": "#/components/responses/401" @@ -21043,30 +22816,18 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get charts and dashboards count associated to a database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/related_objects/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/related_objects/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/related_objects/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get table extra metadata", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/schemas/": { + "/api/v1/database/{pk}/tables/": { "get": { "parameters": [ { @@ -21082,7 +22843,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/database_schemas_query_schema" + "$ref": "#/components/schemas/database_tables_query_schema" } } }, @@ -21095,14 +22856,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchemasResponseSchema" - }, - "example": { - "result": ["string"] + "properties": { + "count": { + "type": "integer" + }, + "result": { + "description": "A List of tables for given database", + "items": { + "$ref": "#/components/schemas/DatabaseTablesResponse" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "A List of all schemas from the database" + "description": "Tables list" }, "400": { "$ref": "#/components/responses/400" @@ -21113,6 +22883,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -21120,31 +22893,19 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get all schemas from a database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/schemas/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/schemas/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/schemas/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of tables for given database", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/schemas_access_for_file_upload/": { - "get": { + "/api/v1/database/{pk}/upload/": { + "post": { "parameters": [ { "in": "path", @@ -21155,100 +22916,31 @@ } } ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseSchemaAccessForFileUploadResponse" - }, - "example": { - "schemas": ["string"] - } + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UploadPostSchema" } - }, - "description": "The list of the database schemas where to upload information" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "The list of the database schemas where to upload information", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/schemas_access_for_file_upload/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/schemas_access_for_file_upload/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/schemas_access_for_file_upload/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - } - }, - "/api/v1/database/{pk}/select_star/{table_name}/": { - "get": { - "parameters": [ - { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" } }, - { - "description": "Table name", - "in": "path", - "name": "table_name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SelectStarResponseSchema" - }, - "example": { - "result": "string" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "SQL statement for a select star for table" + "description": "CSV upload response" }, "400": { "$ref": "#/components/responses/400" @@ -21259,6 +22951,21 @@ "404": { "$ref": "#/components/responses/404" }, + "413": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Payload too large, file exceeds the maximum allowed size" + }, "422": { "$ref": "#/components/responses/422" }, @@ -21269,73 +22976,60 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get database select star for table (database-pk-select-star-table-name)", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/select_star/{table_name}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/select_star/{table_name}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/select_star/{table_name}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Upload a file to a database table", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/": { - "get": { + "/api/v1/database/{pk}/validate_sql/": { + "post": { + "description": "Validates that arbitrary SQL is acceptable for the given database.", "parameters": [ { - "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "description": "Table name", - "in": "path", - "name": "table_name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateSQLRequest" + } + } + }, + "description": "Validate SQL request", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SelectStarResponseSchema" - }, - "example": { - "result": "string" + "properties": { + "result": { + "description": "A List of SQL errors found on the statement", + "items": { + "$ref": "#/components/schemas/ValidateSQLResponse" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "SQL statement for a select star for table" + "description": "Validation result" }, "400": { "$ref": "#/components/responses/400" @@ -21346,9 +23040,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -21356,40 +23047,30 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get database select star for table (database-pk-select-star-table-name-schema-name)", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/select_star/{table_name}/{schema_name}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/select_star/{table_name}/{schema_name}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/select_star/{table_name}/{schema_name}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Validate arbitrary SQL", + "tags": [ + "Database" ] } }, - "/api/v1/database/{pk}/sync_permissions/": { - "post": { + "/api/v1/dataset/": { + "delete": { "parameters": [ { - "description": "The database connection ID", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -21403,13 +23084,10 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Task created to sync permissions." + "description": "Dataset bulk delete" }, "400": { "$ref": "#/components/responses/400" @@ -21417,9 +23095,15 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -21427,58 +23111,29 @@ "security": [ { "jwt": [] - } - ], - "summary": "Re-sync all permissions for a database connection", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/1/sync_permissions/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/1/sync_permissions/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/sync_permissions/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Bulk delete datasets (soft delete, recoverable via restore, when the SOFT_DELETE feature flag is enabled; permanent otherwise)", + "tags": [ + "Datasets" ] - } - }, - "/api/v1/database/{pk}/table/{table_name}/{schema_name}/": { + }, "get": { + "description": "Gets a list of datasets, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "Table name", - "in": "path", - "name": "table_name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -21486,19 +23141,70 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableMetadataResponseSchema" - }, - "example": { - "columns": [], - "foreignKeys": [], - "indexes": [], - "name": "string", - "primaryKey": {}, - "selectStar": "string" + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/DatasetRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Table metadata information" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -21506,9 +23212,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -21518,77 +23221,47 @@ }, "security": [ { - "jwt": [] - } - ], - "summary": "Get database table metadata", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/table/{table_name}/{schema_name}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/table/{table_name}/{schema_name}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/table/{table_name}/{schema_name}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - } - }, - "/api/v1/database/{pk}/table_extra/{table_name}/{schema_name}/": { - "get": { - "description": "Response depends on each DB engine spec normally focused on partitions.", - "parameters": [ - { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "Table name", - "in": "path", - "name": "table_name", - "required": true, - "schema": { - "type": "string" - } + "jwt": [] }, { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } + "api_key": [] } ], + "summary": "Get a list of datasets", + "tags": [ + "Datasets" + ] + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetRestApi.post" + } + } + }, + "description": "Dataset schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" - }, - "example": { - "clustering": {}, - "metadata": {}, - "partitions": {} + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatasetRestApi.post" + } + }, + "type": "object" } } }, - "description": "Table extra metadata information" + "description": "Dataset added" }, "400": { "$ref": "#/components/responses/400" @@ -21596,9 +23269,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -21609,66 +23279,31 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get table extra metadata (database-pk-table-extra-table-name-schema-name)", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/table_extra/{table_name}/{schema_name}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/table_extra/{table_name}/{schema_name}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/table_extra/{table_name}/{schema_name}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a new dataset", + "tags": [ + "Datasets" ] } }, - "/api/v1/database/{pk}/table_metadata/": { + "/api/v1/dataset/_info": { "get": { - "description": "Metadata associated with the table (columns, indexes, etc.)", + "description": "Get metadata information about this API resource", "parameters": [ { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "Table name", - "in": "query", - "name": "name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Optional table schema, if not passed default schema will be used", - "in": "query", - "name": "schema", - "schema": { - "type": "string" - } - }, - { - "description": "Optional table catalog, if not passed default catalog will be used", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, "in": "query", - "name": "catalog", - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { @@ -21676,22 +23311,56 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" - }, - "example": { - "clustering": {}, - "metadata": {}, - "partitions": {} + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Table metadata information" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -21700,66 +23369,38 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get table metadata", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/table_metadata/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/table_metadata/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/table_metadata/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Datasets" ] } }, - "/api/v1/database/{pk}/table_metadata/extra/": { + "/api/v1/dataset/distinct/{column_name}": { "get": { - "description": "Extra metadata associated with the table (partitions, description, etc.)", "parameters": [ { - "description": "The database id", "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "Table name", - "in": "query", - "name": "name", + "name": "column_name", "required": true, "schema": { "type": "string" } }, { - "description": "Optional table schema, if not passed the schema configured in the database will be used", - "in": "query", - "name": "schema", - "schema": { - "type": "string" - } - }, - { - "description": "Optional table catalog, if not passed the catalog configured in the database will be used", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, "in": "query", - "name": "catalog", - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { @@ -21767,16 +23408,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" - }, - "example": { - "clustering": {}, - "metadata": {}, - "partitions": {} + "$ref": "#/components/schemas/DistincResponseSchema" } } }, - "description": "Table extra metadata information" + "description": "Distinct field data" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -21791,79 +23430,48 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get table extra metadata (database-pk-table-metadata-extra)", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/table_metadata/extra/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/table_metadata/extra/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/table_metadata/extra/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get distinct values from field data", + "tags": [ + "Datasets" ] } }, - "/api/v1/database/{pk}/tables/": { - "get": { - "parameters": [ - { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/api/v1/dataset/duplicate": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetDuplicateSchema" + } } }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/database_tables_query_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], + "description": "Dataset schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "count": { - "type": "integer" + "id": { + "type": "number" }, "result": { - "description": "A List of tables for given database", - "items": { - "$ref": "#/components/schemas/DatabaseTablesResponse" - }, - "type": "array" + "$ref": "#/components/schemas/DatasetDuplicateSchema" } }, "type": "object" - }, - "example": { - "count": 1, - "result": [{}] } } }, - "description": "Tables list" + "description": "Dataset duplicated" }, "400": { "$ref": "#/components/responses/400" @@ -21871,6 +23479,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -21880,73 +23491,46 @@ "500": { "$ref": "#/components/responses/500" } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Get a list of tables for given database", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/database/1/tables/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/database/1/tables/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/tables/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Duplicate a dataset", + "tags": [ + "Datasets" ] } }, - "/api/v1/database/{pk}/upload/": { - "post": { + "/api/v1/dataset/export/": { + "get": { "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_export_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/UploadPostSchema" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { - "application/json": { + "text/plain": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" - }, - "example": { - "message": "string" + "type": "string" } } }, - "description": "CSV upload response" + "description": "Dataset export" }, "400": { "$ref": "#/components/responses/400" @@ -21957,9 +23541,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -21967,57 +23548,27 @@ "security": [ { "jwt": [] - } - ], - "summary": "Upload a file to a database table", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/1/upload/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/1/upload/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/upload/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Download multiple datasets as YAML files", + "tags": [ + "Datasets" ] } }, - "/api/v1/database/{pk}/validate_sql/": { + "/api/v1/dataset/get_or_create/": { "post": { - "description": "Validates that arbitrary SQL is acceptable for the given database.", - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidateSQLRequest" - }, - "example": { - "catalog": "string", - "schema": "string", - "sql": "string", - "template_params": {} + "$ref": "#/components/schemas/GetOrCreateDatasetSchema" } } }, - "description": "Validate SQL request", "required": true }, "responses": { @@ -22027,21 +23578,19 @@ "schema": { "properties": { "result": { - "description": "A List of SQL errors found on the statement", - "items": { - "$ref": "#/components/schemas/ValidateSQLResponse" + "properties": { + "table_id": { + "type": "integer" + } }, - "type": "array" + "type": "object" } }, "type": "object" - }, - "example": { - "result": [{}] } } }, - "description": "Validation result" + "description": "The ID of the table" }, "400": { "$ref": "#/components/responses/400" @@ -22049,8 +23598,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -22059,44 +23608,64 @@ "security": [ { "jwt": [] - } - ], - "summary": "Validate arbitrary SQL", - "tags": ["Database"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/database/1/validate_sql/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/database/1/validate_sql/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/database/1/validate_sql/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Retrieve a table by name, or create it if it does not exist", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/": { - "delete": { - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } + "/api/v1/dataset/import/": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "formData": { + "description": "upload file (ZIP or YAML)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing datasets?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + }, + "sync_columns": { + "description": "sync columns?", + "type": "boolean" + }, + "sync_metrics": { + "description": "sync metrics?", + "type": "boolean" + } + }, + "type": "object" } - }, - "in": "query", - "name": "q" - } - ], + } + }, + "required": true + }, "responses": { "200": { "content": { @@ -22108,13 +23677,10 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Dataset bulk delete" + "description": "Dataset import result" }, "400": { "$ref": "#/components/responses/400" @@ -22122,12 +23688,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -22138,36 +23698,33 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete datasets", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dataset/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dataset/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Import dataset(s) with associated databases", + "tags": [ + "Datasets" ] - }, + } + }, + "/api/v1/dataset/related/{column_name}": { "get": { - "description": "Gets a list of datasets, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "$ref": "#/components/schemas/get_related_schema" } } }, @@ -22180,84 +23737,11 @@ "content": { "application/json": { "schema": { - "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/DatasetRestApi.get_list" - }, - "type": "array" - } - }, - "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Items from Model" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -22265,8 +23749,11 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -22275,98 +23762,47 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of datasets", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Datasets" ] - }, - "post": { + } + }, + "/api/v1/dataset/warm_up_cache": { + "put": { + "description": "Warms up the cache for the table. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore` action.", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatasetRestApi.post" - }, - "example": { - "always_filter_main_dttm": true, - "catalog": "string", - "database": 1, - "external_url": "string", - "is_managed_externally": true, - "normalize_columns": true, - "owners": [1], - "schema": "string", - "sql": "string", - "table_name": "string", - "template_params": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000" + "$ref": "#/components/schemas/DatasetCacheWarmUpRequestSchema" } } }, - "description": "Dataset schema", + "description": "Identifies the database and table to warm up cache for, and any additional dashboard or filter context to use.", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatasetRestApi.post" - } - }, - "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "always_filter_main_dttm": true, - "catalog": "string", - "database": 1, - "external_url": "string", - "is_managed_externally": true, - "normalize_columns": true, - "owners": [], - "schema": "string", - "sql": "string", - "table_name": "string", - "template_params": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000" - } + "$ref": "#/components/schemas/DatasetCacheWarmUpResponseSchema" } } }, - "description": "Dataset added" + "description": "Each chart's warmup status" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -22375,43 +23811,48 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new dataset", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dataset/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dataset/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Warm up the cache for each chart powered by the given table", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/_info": { + "/api/v1/dataset/{id_or_uuid}": { "get": { - "description": "Get metadata information about this API resource", + "description": "Get a dataset by ID", "parameters": [ + { + "description": "Either the id of the dataset, or its uuid", + "in": "path", + "name": "id_or_uuid", + "required": true, + "schema": { + "type": "string" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_info_schema" + "$ref": "#/components/schemas/get_item_schema" } } }, "in": "query", "name": "q" + }, + { + "description": "Should Jinja macros from sql, metrics and columns be rendered and included in the response", + "in": "query", + "name": "include_rendered_sql", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -22420,54 +23861,19 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" + "id": { + "description": "The item id", + "type": "string" }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "result": { + "$ref": "#/components/schemas/DatasetRestApi.get" } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, - "description": "Item from Model" + "description": "Dataset object has been returned." }, "400": { "$ref": "#/components/responses/400" @@ -22485,66 +23891,208 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], - "summary": "Get metadata information about this API resource (dataset--info)", - "tags": ["Datasets"], - "x-codeSamples": [ + "summary": "Get a dataset", + "tags": [ + "Datasets" + ] + } + }, + "/api/v1/dataset/{id_or_uuid}/related_objects": { + "get": { + "parameters": [ { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" + "in": "path", + "name": "id_or_uuid", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetRelatedObjectsResponse" + } + } + }, + "description": "Query result" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get charts and dashboards count associated to a dataset", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/distinct/{column_name}": { - "get": { + "/api/v1/dataset/{pk}": { + "delete": { "parameters": [ { "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } - }, - { + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_related_schema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, + "description": "Dataset delete" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "summary": "Delete a dataset (soft delete, recoverable via restore, when the SOFT_DELETE feature flag is enabled; permanent otherwise)", + "tags": [ + "Datasets" + ] + }, + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { "in": "query", - "name": "q" + "name": "override_columns", + "schema": { + "type": "boolean" + } + }, + { + "description": "Optional optimistic-concurrency guard. Pass the ``ETag`` returned by a prior read of this dataset; the update is rejected with 412 if the dataset has changed since.", + "in": "header", + "name": "If-Match", + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetRestApi.put" + } + } + }, + "description": "Dataset schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DistincResponseSchema" - }, - "example": { - "count": 1, - "result": [] + "properties": { + "id": { + "type": "number" + }, + "new_transaction_id": { + "description": "Continuum transaction_id of the live row after this update. When this differs from ``old_transaction_id`` the update produced a new version row (regardless of whether ``new_version`` changed).", + "nullable": true, + "type": "integer" + }, + "new_version": { + "description": "0-based version_number of the newly-live row after this update. Can equal ``old_version`` when no versioned column changed, or when retention pruning dropped an older closed row in the same commit.", + "nullable": true, + "type": "integer" + }, + "new_version_uuid": { + "description": "Deterministic version_uuid of the live row after this update. Null when version capture is disabled.", + "format": "uuid", + "nullable": true, + "type": "string" + }, + "old_transaction_id": { + "description": "Continuum transaction_id of the live row before this update. Stable across retention pruning.", + "nullable": true, + "type": "integer" + }, + "old_version": { + "description": "0-based version_number of the live row before this update (null if the dataset had no prior history). Matches the ``version_number`` field of the list versions endpoint. Unstable under retention pruning \u2014 see ``old_transaction_id`` for a stable identifier.", + "nullable": true, + "type": "integer" + }, + "old_version_uuid": { + "description": "Deterministic version_uuid of the live row before this update. Null when version capture is disabled or the dataset has no version rows yet.", + "format": "uuid", + "nullable": true, + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/DatasetRestApi.put" + } + }, + "type": "object" } } }, - "description": "Distinct field data" + "description": "Dataset changed" }, "400": { "$ref": "#/components/responses/400" @@ -22552,9 +24100,30 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "412": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "The dataset changed since the version identified by the request's ``If-Match`` header; the update was not applied." + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -22562,74 +24131,54 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get distinct values from field data (dataset-distinct-column-name)", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/distinct/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/distinct/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/distinct/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update a dataset", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/duplicate": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetDuplicateSchema" - }, - "example": { - "base_model_id": 1, - "table_name": "string" - } + "/api/v1/dataset/{pk}/column/{column_id}": { + "delete": { + "parameters": [ + { + "description": "The dataset pk for this column", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "description": "Dataset schema", - "required": true - }, + { + "description": "The column id for this dataset", + "in": "path", + "name": "column_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatasetDuplicateSchema" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "base_model_id": 1, - "table_name": "string" - } } } }, - "description": "Dataset duplicated" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Column deleted" }, "401": { "$ref": "#/components/responses/401" @@ -22650,64 +24199,58 @@ "security": [ { "jwt": [] - } - ], - "summary": "Duplicate a dataset", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dataset/duplicate\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dataset/duplicate\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/duplicate\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a dataset column", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/export/": { + "/api/v1/dataset/{pk}/drill_info/": { "get": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The dataset ID", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { "200": { "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "properties": { + "result": { + "type": "object" + } + }, + "type": "object" } } }, - "description": "Dataset export" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dataset drill info" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -22715,82 +24258,64 @@ "security": [ { "jwt": [] - } - ], - "summary": "Download multiple datasets as YAML files", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/export/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/export/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/export/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get dataset drill info", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/get_or_create/": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetOrCreateDatasetSchema" - }, - "example": { - "always_filter_main_dttm": true, - "catalog": "string", - "database_id": 1, - "normalize_columns": true, - "schema": "string", - "table_name": "string", - "template_params": "string" - } + "/api/v1/dataset/{pk}/metric/{metric_id}": { + "delete": { + "parameters": [ + { + "description": "The dataset pk for this column", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "required": true - }, + { + "description": "The metric id for this dataset", + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "result": { - "properties": { - "table_id": { - "type": "integer" - } - }, - "type": "object" + "message": { + "type": "string" } }, "type": "object" - }, - "example": { - "result": { - "table_id": 1 - } } } }, - "description": "The ID of the table" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Metric deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -22801,76 +24326,29 @@ "security": [ { "jwt": [] - } - ], - "summary": "Retrieve a table by name, or create it if it does not exist", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dataset/get_or_create/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dataset/get_or_create/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/get_or_create/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Delete a dataset metric", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP or YAML)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing datasets?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - }, - "sync_columns": { - "description": "sync columns?", - "type": "boolean" - }, - "sync_metrics": { - "description": "sync metrics?", - "type": "boolean" - } - }, - "type": "object" - } + "/api/v1/dataset/{pk}/refresh": { + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "required": true - }, + } + ], "responses": { "200": { "content": { @@ -22882,20 +24360,20 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Dataset import result" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dataset delete" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -22906,50 +24384,86 @@ "security": [ { "jwt": [] - } - ], - "summary": "Import dataset(s) with associated databases", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/dataset/import/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/dataset/import/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/import/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Refresh and update columns of a dataset", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/related/{column_name}": { + "/api/v1/dataset/{uuid_str}/activity/": { "get": { + "description": "A dataset's own edits only. Datasets have no transitive layer in V2 \u2014 chart and dashboard edits that touch this dataset do NOT appear here. ``?include=self`` and ``?include=all`` return the dataset's own edits; ``?include=related`` returns an empty stream (a dataset has no related entities to fan out to).", "parameters": [ { + "description": "Dataset UUID", "in": "path", - "name": "column_name", + "name": "uuid_str", "required": true, "schema": { + "format": "uuid", "type": "string" } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, "in": "query", - "name": "q" + "name": "since", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "in": "query", + "name": "until", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "in": "query", + "name": "include", + "schema": { + "default": "all", + "enum": [ + "self", + "related", + "all" + ], + "type": "string" + } + }, + { + "description": "Case-insensitive search over the full history (summary, entity name, kind, path, values) \u2014 applied before pagination, so `count` reflects the matches.", + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "page", + "schema": { + "default": 0, + "minimum": 0, + "type": "integer" + } + }, + { + "in": "query", + "name": "page_size", + "schema": { + "default": 25, + "maximum": 200, + "minimum": 1, + "type": "integer" + } } ], "responses": { @@ -22957,15 +24471,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] + "$ref": "#/components/schemas/ActivityResponse" } } }, - "description": "Related column data" + "description": "Activity stream ordered newest-first" }, "400": { "$ref": "#/components/responses/400" @@ -22973,139 +24483,112 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (dataset-related-column-name)", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a dataset's activity stream", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/warm_up_cache": { - "put": { - "description": "Warms up the cache for the table. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore_json` action.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetCacheWarmUpRequestSchema" - }, - "example": { - "dashboard_id": 1, - "db_name": "string", - "extra_filters": "string", - "table_name": "string" - } + "/api/v1/dataset/{uuid_str}/versions/": { + "get": { + "parameters": [ + { + "description": "Dataset UUID", + "in": "path", + "name": "uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } - }, - "description": "Identifies the database and table to warm up cache for, and any additional dashboard or filter context to use.", - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatasetCacheWarmUpResponseSchema" - }, - "example": { - "result": [] + "properties": { + "count": { + "type": "integer" + }, + "result": { + "items": { + "$ref": "#/components/schemas/VersionListItemSchema" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Each chart's warmup status" + "description": "Version history ordered by oldest first" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Warm up the cache for each chart powered by the given table", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dataset/warm_up_cache\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dataset/warm_up_cache\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/warm_up_cache\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Return the version history for a dataset", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/{id_or_uuid}": { + "/api/v1/dataset/{uuid_str}/versions/{version_uuid_str}/": { "get": { - "description": "Get a dataset by ID", + "description": "Returns the dataset's scalar fields plus reconstructed ``columns`` and ``metrics`` lists as they were at the target version. Does not modify live state.", "parameters": [ { - "description": "Either the id of the dataset, or its uuid", + "description": "Dataset UUID", "in": "path", - "name": "id_or_uuid", + "name": "uuid_str", "required": true, "schema": { + "format": "uuid", "type": "string" } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_item_schema" - } - } - }, - "in": "query", - "name": "q" - }, - { - "description": "Should Jinja macros from sql, metrics and columns be rendered and included in the response", - "in": "query", - "name": "include_rendered_sql", + "description": "Version UUID as returned by the list endpoint", + "in": "path", + "name": "version_uuid_str", + "required": true, "schema": { - "type": "boolean" + "format": "uuid", + "type": "string" } } ], @@ -23115,61 +24598,21 @@ "application/json": { "schema": { "properties": { - "id": { - "description": "The item id", - "type": "string" - }, "result": { - "$ref": "#/components/schemas/DatasetRestApi.get" + "description": "The dataset's scalar fields at the target version (entity-specific keys), plus `columns` / `metrics` as they were at that version, plus a `_version` block with the version-level metadata.", + "properties": { + "_version": { + "$ref": "#/components/schemas/VersionListItemSchema" + } + }, + "type": "object" } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "always_filter_main_dttm": true, - "cache_timeout": {}, - "catalog": "string", - "changed_on": "2024-01-15T10:30:00Z", - "changed_on_humanized": {}, - "column_formats": {}, - "created_on": "2024-01-15T10:30:00Z", - "created_on_humanized": {}, - "currency_code_column": "string", - "datasource_name": {}, - "datasource_type": {}, - "default_endpoint": "string", - "description": "string", - "extra": "string", - "fetch_values_predicate": "string", - "filter_select_enabled": true, - "folders": {}, - "granularity_sqla": {}, - "id": 1, - "is_managed_externally": true, - "is_sqllab_view": true, - "kind": {}, - "main_dttm_col": "string", - "name": {}, - "normalize_columns": true, - "offset": 1, - "order_by_choices": {}, - "schema": "string", - "select_star": {}, - "sql": "string", - "table_name": "string", - "template_params": "string", - "time_grain_sqla": {}, - "uid": {}, - "url": {}, - "uuid": "550e8400-e29b-41d4-a716-446655440000", - "verbose_map": {} - } } } }, - "description": "Dataset object has been returned." + "description": "Snapshot of the dataset at the target version" }, "400": { "$ref": "#/components/responses/400" @@ -23177,47 +24620,47 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, - "500": { - "$ref": "#/components/responses/500" + "404": { + "$ref": "#/components/responses/404" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get a dataset", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/{id_or_uuid}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/{id_or_uuid}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/{id_or_uuid}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Read-only snapshot of the dataset at a given version", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/{id_or_uuid}/related_objects": { - "get": { + "/api/v1/dataset/{uuid_str}/versions/{version_uuid_str}/restore": { + "post": { "parameters": [ { + "description": "Dataset UUID", "in": "path", - "name": "id_or_uuid", + "name": "uuid_str", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "description": "Version UUID as returned by the list-versions endpoint. Stable across retention pruning.", + "in": "path", + "name": "version_uuid_str", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -23227,64 +24670,72 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatasetRelatedObjectsResponse" - }, - "example": { - "charts": {}, - "dashboards": {} + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Query result" + "description": "Dataset was restored" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, - "500": { - "$ref": "#/components/responses/500" + "422": { + "$ref": "#/components/responses/422" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get charts and dashboards count associated to a dataset", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/{id_or_uuid}/related_objects\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/{id_or_uuid}/related_objects\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/{id_or_uuid}/related_objects\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Revert a dataset to an earlier version (non-destructive)", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/{pk}": { - "delete": { + "/api/v1/dataset/{uuid}/purge": { + "post": { + "description": "Irreversibly remove an archived dataset and its dependents. Limited to owners and admins (same audience as restore).", "parameters": [ { "in": "path", - "name": "pk", + "name": "uuid", "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetPurgeRequestSchema" + } + } + }, + "description": "Confirmed dependency impact", + "required": true + }, "responses": { "200": { "content": { @@ -23296,13 +24747,13 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Dataset delete" + "description": "Dataset permanently deleted" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -23313,6 +24764,35 @@ "404": { "$ref": "#/components/responses/404" }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "impact": { + "$ref": "#/components/schemas/DatasetPurgeImpactSchema" + }, + "message": { + "type": "string" + }, + "reason": { + "enum": [ + "purge_impact_changed" + ], + "type": "string" + } + }, + "required": [ + "message", + "reason", + "impact" + ], + "type": "object" + } + } + }, + "description": "Dataset dependency impact changed" + }, "422": { "$ref": "#/components/responses/422" }, @@ -23323,135 +24803,41 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a dataset", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dataset/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dataset/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Permanently delete a soft-deleted dataset", + "tags": [ + "Datasets" ] - }, - "put": { + } + }, + "/api/v1/dataset/{uuid}/purge-impact": { + "get": { + "description": "Report the charts and dashboards that depend on an archived dataset, with an impact token that must be echoed back on the purge request. Limited to owners and admins (same audience as restore).", "parameters": [ { "in": "path", - "name": "pk", + "name": "uuid", "required": true, "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "override_columns", - "schema": { - "type": "boolean" + "format": "uuid", + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetRestApi.put" - }, - "example": { - "always_filter_main_dttm": true, - "cache_timeout": 1, - "catalog": "string", - "columns": [{}], - "currency_code_column": "string", - "database_id": 1, - "default_endpoint": "string", - "description": "string", - "external_url": "string", - "extra": "string", - "fetch_values_predicate": "string", - "filter_select_enabled": true, - "folders": [{}], - "is_managed_externally": true, - "is_sqllab_view": true, - "main_dttm_col": "string", - "metrics": [{}], - "normalize_columns": true, - "offset": 1, - "owners": [1], - "schema": "string", - "sql": "string", - "table_name": "string", - "template_params": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000" - } - } - }, - "description": "Dataset schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatasetRestApi.put" - } - }, - "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "always_filter_main_dttm": true, - "cache_timeout": 1, - "catalog": "string", - "columns": [], - "currency_code_column": "string", - "database_id": 1, - "default_endpoint": "string", - "description": "string", - "external_url": "string", - "extra": "string", - "fetch_values_predicate": "string", - "filter_select_enabled": true, - "folders": [], - "is_managed_externally": true, - "is_sqllab_view": true, - "main_dttm_col": "string", - "metrics": [], - "normalize_columns": true, - "offset": 1, - "owners": [], - "schema": "string", - "sql": "string", - "table_name": "string", - "template_params": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000" - } + "$ref": "#/components/schemas/DatasetPurgeImpactSchema" } } }, - "description": "Dataset changed" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dependency impact of purging the dataset" }, "401": { "$ref": "#/components/responses/401" @@ -23462,9 +24848,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -23472,48 +24855,27 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update a dataset", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dataset/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dataset/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Preview the dependency impact of purging an archived dataset", + "tags": [ + "Datasets" ] } }, - "/api/v1/dataset/{pk}/column/{column_id}": { - "delete": { + "/api/v1/dataset/{uuid}/restore": { + "post": { "parameters": [ { - "description": "The dataset pk for this column", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The column id for this dataset", "in": "path", - "name": "column_id", + "name": "uuid", "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" } } ], @@ -23528,13 +24890,10 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Column deleted" + "description": "Dataset restored" }, "401": { "$ref": "#/components/responses/401" @@ -23555,36 +24914,74 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], - "summary": "Delete a dataset column", - "tags": ["Datasets"], - "x-codeSamples": [ + "summary": "Restore a soft-deleted dataset", + "tags": [ + "Datasets" + ] + } + }, + "/api/v1/datasource/": { + "get": { + "parameters": [ { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dataset/1/column/{column_id}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "description": "Combined list of datasets and semantic views" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dataset/1/column/{column_id}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/1/column/{column_id}\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "List datasets and semantic views combined", + "tags": [ + "Datasources" ] } }, - "/api/v1/dataset/{pk}/drill_info/": { + "/api/v1/datasource/{datasource_type}/{datasource_id}": { "get": { "parameters": [ { - "description": "The dataset ID", "in": "path", - "name": "pk", + "name": "datasource_type", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "datasource_id", "required": true, "schema": { "type": "integer" @@ -23602,13 +24999,13 @@ } }, "type": "object" - }, - "example": { - "result": {} } } }, - "description": "Dataset drill info" + "description": "Datasource metadata plus a capabilities block" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -23618,60 +25015,59 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get dataset drill info", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/1/drill_info/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/dataset/1/drill_info/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/1/drill_info/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get datasource metadata and capabilities", + "tags": [ + "Datasources" ] } }, - "/api/v1/dataset/{pk}/metric/{metric_id}": { - "delete": { + "/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/": { + "get": { "parameters": [ { - "description": "The dataset pk for this column", + "description": "The type of datasource", "in": "path", - "name": "pk", + "name": "datasource_type", "required": true, "schema": { - "type": "integer" + "type": "string" } }, { - "description": "The metric id for this dataset", + "description": "The id of the datasource", "in": "path", - "name": "metric_id", + "name": "datasource_id", "required": true, "schema": { "type": "integer" } + }, + { + "description": "The name of the column to get values for", + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Optional case-insensitive substring; only values containing it are returned. Lets the client search the full column rather than the truncated first page.", + "in": "query", + "name": "q", + "schema": { + "type": "string" + } } ], "responses": { @@ -23680,18 +25076,37 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "object" + } + ] + }, + "type": "array" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Metric deleted" + "description": "A List of distinct values for the column" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -23702,9 +25117,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -23712,59 +25124,93 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a dataset metric", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/dataset/1/metric/{metric_id}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/dataset/1/metric/{metric_id}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/1/metric/{metric_id}\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Get possible values for a datasource column", + "tags": [ + "Datasources" ] } }, - "/api/v1/dataset/{pk}/refresh": { - "put": { + "/api/v1/datasource/{datasource_type}/{datasource_id}/compatible": { + "post": { "parameters": [ { "in": "path", - "name": "pk", + "name": "datasource_type", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "datasource_id", "required": true, "schema": { "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "selected_dimensions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "selected_metrics": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "properties": { + "compatible_dimensions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "compatible_metrics": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Dataset delete" + "description": "Compatible metrics and dimensions" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -23774,45 +25220,26 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Refresh and update columns of a dataset", - "tags": ["Datasets"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/dataset/1/refresh\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/dataset/1/refresh\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/dataset/1/refresh\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get compatible metrics and dimensions", + "tags": [ + "Datasources" ] } }, - "/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/": { - "get": { + "/api/v1/datasource/{datasource_type}/{datasource_id}/query": { + "post": { "parameters": [ { - "description": "The type of datasource", "in": "path", "name": "datasource_type", "required": true, @@ -23821,24 +25248,24 @@ } }, { - "description": "The id of the datasource", "in": "path", "name": "datasource_id", "required": true, "schema": { "type": "integer" } - }, - { - "description": "The name of the column to get values for", - "in": "path", - "name": "column_name", - "required": true, - "schema": { - "type": "string" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasourceQuerySchema" + } + } + }, + "required": true + }, "responses": { "200": { "content": { @@ -23847,35 +25274,22 @@ "properties": { "result": { "items": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "object" - } - ] + "type": "object" }, "type": "array" } }, "type": "object" - }, - "example": { - "result": [{}] + } + }, + "application/vnd.apache.arrow.stream": { + "schema": { + "format": "binary", + "type": "string" } } }, - "description": "A List of distinct values for the column" + "description": "Query result" }, "400": { "$ref": "#/components/responses/400" @@ -23888,34 +25302,19 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ { "jwt": [] - } - ], - "summary": "Get possible values for a datasource column", - "tags": ["Datasources"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Query a datasource by its semantic definitions", + "tags": [ + "Datasources" ] } }, @@ -23948,7 +25347,10 @@ "properties": { "clause": { "description": "SQL clause type for filter expressions", - "enum": ["WHERE", "HAVING"], + "enum": [ + "WHERE", + "HAVING" + ], "type": "string" }, "expression": { @@ -23958,17 +25360,19 @@ "expression_type": { "default": "where", "description": "The type of SQL expression", - "enum": ["column", "metric", "where", "having"], + "enum": [ + "column", + "metric", + "where", + "having" + ], "type": "string" } }, - "required": ["expression"], + "required": [ + "expression" + ], "type": "object" - }, - "example": { - "clause": "WHERE", - "expression": "string", - "expression_type": "column" } } }, @@ -24003,16 +25407,6 @@ } }, "type": "object" - }, - "example": { - "result": [ - { - "end_column": 1, - "line_number": 1, - "message": "string", - "start_column": 1 - } - ] } } }, @@ -24037,26 +25431,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Validate a SQL expression against a datasource", - "tags": ["Datasources"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/datasource/{datasource_type}/{datasource_id}/validate_expression/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/datasource/{datasource_type}/{datasource_id}/validate_expression/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/datasource/{datasource_type}/{datasource_id}/validate_expression/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Validate a SQL expression against a datasource", + "tags": [ + "Datasources" ] } }, @@ -24124,14 +25506,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "allowed_domains": [], - "changed_on": "2024-01-15T10:30:00Z", - "dashboard_id": "string", - "uuid": "string" - } } }, "text/html": { @@ -24155,26 +25529,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a report schedule log (embedded-dashboard-uuid)", - "tags": ["Embedded Dashboard"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/embedded_dashboard/{uuid}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/embedded_dashboard/{uuid}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/embedded_dashboard/{uuid}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a report schedule log", + "tags": [ + "Embedded Dashboard" ] } }, @@ -24224,12 +25586,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ExploreContextSchema" - }, - "example": { - "dataset": {}, - "form_data": {}, - "message": "string", - "slice": {} } } }, @@ -24254,26 +25610,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Assemble Explore related information in a single endpoint", - "tags": ["Explore"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/explore/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/explore/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/explore/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Assemble Explore related information in a single endpoint", + "tags": [ + "Explore" ] } }, @@ -24293,12 +25637,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/FormDataPostSchema" - }, - "example": { - "chart_id": 1, - "datasource_id": 1, - "datasource_type": "table", - "form_data": "string" } } }, @@ -24316,9 +25654,6 @@ } }, "type": "object" - }, - "example": { - "key": "string" } } }, @@ -24340,26 +25675,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new form_data", - "tags": ["Explore Form Data"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/explore/form_data\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/explore/form_data\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/explore/form_data\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a new form_data", + "tags": [ + "Explore Form Data" ] } }, @@ -24388,9 +25711,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -24415,26 +25735,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a form_data", - "tags": ["Explore Form Data"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/explore/form_data/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/explore/form_data/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/explore/form_data/{key}\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Delete a form_data", + "tags": [ + "Explore Form Data" ] }, "get": { @@ -24460,9 +25768,6 @@ } }, "type": "object" - }, - "example": { - "form_data": "string" } } }, @@ -24487,26 +25792,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a form_data", - "tags": ["Explore Form Data"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/explore/form_data/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/explore/form_data/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/explore/form_data/{key}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a form_data", + "tags": [ + "Explore Form Data" ] }, "put": { @@ -24532,12 +25825,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/FormDataPutSchema" - }, - "example": { - "chart_id": 1, - "datasource_id": 1, - "datasource_type": "table", - "form_data": "string" } } }, @@ -24555,9 +25842,6 @@ } }, "type": "object" - }, - "example": { - "key": "string" } } }, @@ -24582,26 +25866,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update an existing form_data", - "tags": ["Explore Form Data"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/explore/form_data/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/explore/form_data/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/explore/form_data/{key}\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update an existing form_data", + "tags": [ + "Explore Form Data" ] } }, @@ -24612,10 +25884,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ExplorePermalinkStateSchema" - }, - "example": { - "formData": {}, - "urlParams": [{}] } } }, @@ -24637,10 +25905,6 @@ } }, "type": "object" - }, - "example": { - "key": "string", - "url": "string" } } }, @@ -24662,26 +25926,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new permanent link (explore-permalink)", - "tags": ["Explore Permanent Link"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/explore/permalink\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/explore/permalink\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/explore/permalink\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a new permanent link", + "tags": [ + "Explore Permanent Link" ] } }, @@ -24709,9 +25961,6 @@ } }, "type": "object" - }, - "example": { - "state": {} } } }, @@ -24736,26 +25985,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get chart's permanent link state", - "tags": ["Explore Permanent Link"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/explore/permalink/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/explore/permalink/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/explore/permalink/{key}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get chart's permanent link state", + "tags": [ + "Explore Permanent Link" ] } }, @@ -24840,20 +26077,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -24875,26 +26098,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of logs", - "tags": ["LogRestApi"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/log/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/log/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/log/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of logs", + "tags": [ + "LogRestApi" ] }, "post": { @@ -24903,9 +26114,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/LogRestApi.post" - }, - "example": { - "id": 1 } } }, @@ -24926,12 +26134,6 @@ } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "id": 1 - } } } }, @@ -24953,27 +26155,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["LogRestApi"], - "operationId": "create_log", - "summary": "Create log", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/log/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/log/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/log/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "LogRestApi" ] } }, @@ -25007,9 +26195,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RecentActivityResponseSchema" - }, - "example": { - "result": [] } } }, @@ -25031,26 +26216,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get recent activity data for a user", - "tags": ["LogRestApi"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/log/recent_activity/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/log/recent_activity/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/log/recent_activity/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get recent activity data for a user", + "tags": [ + "LogRestApi" ] } }, @@ -25125,27 +26298,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "action": "string", - "dashboard_id": 1, - "dttm": "2024-01-15T10:30:00Z", - "duration_ms": 1, - "json": "string", - "referrer": "string", - "slice_id": 1, - "user_id": {} - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -25170,26 +26322,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a log detail information", - "tags": ["LogRestApi"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/log/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/log/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/log/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a log detail information", + "tags": [ + "LogRestApi" ] } }, @@ -25207,18 +26347,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "email": "string", - "first_name": "string", - "id": 1, - "is_active": true, - "is_anonymous": true, - "last_name": "string", - "login_count": 1, - "username": "string" - } } } }, @@ -25231,26 +26359,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get the user object", - "tags": ["Current User"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/me/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/me/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/me/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get the user object", + "tags": [ + "Current User" ] }, "put": { @@ -25260,11 +26376,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/CurrentUserPutSchema" - }, - "example": { - "first_name": "string", - "last_name": "string", - "password": "string" } } }, @@ -25281,18 +26392,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "email": "string", - "first_name": "string", - "id": 1, - "is_active": true, - "is_anonymous": true, - "last_name": "string", - "login_count": 1, - "username": "string" - } } } }, @@ -25308,26 +26407,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update the current user", - "tags": ["Current User"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/me/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/me/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/me/\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update the current user", + "tags": [ + "Current User" ] } }, @@ -25345,18 +26432,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "email": "string", - "first_name": "string", - "id": 1, - "is_active": true, - "is_anonymous": true, - "last_name": "string", - "login_count": 1, - "username": "string" - } } } }, @@ -25369,26 +26444,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get the user roles", - "tags": ["Current User"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/me/roles/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/me/roles/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/me/roles/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get the user roles", + "tags": [ + "Current User" ] } }, @@ -25434,17 +26497,6 @@ } }, "type": "object" - }, - "example": { - "result": [ - { - "childs": [], - "icon": "string", - "label": "string", - "name": "string", - "url": "string" - } - ] } } }, @@ -25457,27 +26509,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Menu"], - "operationId": "get_menu", - "summary": "Get menu", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/menu/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/menu/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/menu/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Menu" ] } }, @@ -25561,21 +26599,7 @@ "type": "array" } }, - "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] + "type": "object" } } }, @@ -25597,26 +26621,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of queries", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/query/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/query/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/query/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of queries", + "tags": [ + "Queries" ] } }, @@ -25649,10 +26661,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/DistincResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -25674,26 +26682,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get distinct values from field data (query-distinct-column-name)", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/query/distinct/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/query/distinct/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/query/distinct/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get distinct values from field data", + "tags": [ + "Queries" ] } }, @@ -25726,10 +26722,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -25741,6 +26733,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -25751,26 +26746,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (query-related-column-name)", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/query/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/query/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/query/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Queries" ] } }, @@ -25781,9 +26764,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/StopQuerySchema" - }, - "example": { - "client_id": "string" } } }, @@ -25801,9 +26781,6 @@ } }, "type": "object" - }, - "example": { - "result": "string" } } }, @@ -25825,26 +26802,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Manually stop a query with client_id", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/query/stop\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/query/stop\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/query/stop\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Manually stop a query with client_id", + "tags": [ + "Queries" ] } }, @@ -25878,9 +26843,6 @@ } }, "type": "object" - }, - "example": { - "result": [{}] } } }, @@ -25902,26 +26864,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of queries that changed after last_updated_ms", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/query/updated_since\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/query/updated_since\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/query/updated_since\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of queries that changed after last_updated_ms", + "tags": [ + "Queries" ] } }, @@ -25996,43 +26946,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "changed_on": "2024-01-15T10:30:00Z", - "client_id": "string", - "end_result_backend_time": 1.0, - "end_time": 1.0, - "error_message": "string", - "executed_sql": "string", - "id": 1, - "limit": 1, - "progress": 1, - "results_key": "string", - "rows": 1, - "schema": "string", - "select_as_cta": true, - "select_as_cta_used": true, - "select_sql": "string", - "sql": "string", - "sql_editor_id": "string", - "start_running_time": 1.0, - "start_time": 1.0, - "status": "string", - "tab_name": "string", - "tmp_schema_name": "string", - "tmp_table_name": "string", - "tracking_url": {} - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -26057,26 +26970,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get query detail information", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/query/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/query/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/query/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get query detail information", + "tags": [ + "Queries" ] } }, @@ -26106,9 +27007,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -26133,26 +27031,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete report schedules", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/report/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/report/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Bulk delete report schedules", + "tags": [ + "Report Schedules" ] }, "get": { @@ -26235,20 +27121,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -26270,26 +27142,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of report schedules", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/report/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/report/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of report schedules", + "tags": [ + "Report Schedules" ] }, "post": { @@ -26298,36 +27158,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ReportScheduleRestApi.post" - }, - "example": { - "active": true, - "chart": 1, - "context_markdown": "string", - "creation_method": {}, - "crontab": "*/5 * * * *", - "custom_width": 1000, - "dashboard": 1, - "database": 1, - "description": "Daily sales dashboard to marketing", - "email_subject": "[Report] Report name: Dashboard or chart name", - "extra": {}, - "force_screenshot": true, - "grace_period": 14400, - "log_retention": 90, - "name": "Daily dashboard email", - "owners": [1], - "recipients": [{}], - "report_format": "PDF", - "selected_tabs": [1], - "sql": "SELECT value FROM time_series_table", - "timezone": "Africa/Abidjan", - "type": "Alert", - "validator_config_json": { - "op": "<", - "threshold": 1.0 - }, - "validator_type": "not null", - "working_timeout": 3600 } } }, @@ -26348,35 +27178,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "active": true, - "chart": 1, - "context_markdown": "string", - "creation_method": {}, - "crontab": "*/5 * * * *", - "custom_width": 1000, - "dashboard": 1, - "database": 1, - "description": "Daily sales dashboard to marketing", - "email_subject": "[Report] Report name: Dashboard or chart name", - "extra": {}, - "force_screenshot": true, - "grace_period": 14400, - "log_retention": 90, - "name": "Daily dashboard email", - "owners": [], - "recipients": [], - "report_format": "PDF", - "selected_tabs": [], - "sql": "SELECT value FROM time_series_table", - "timezone": "Africa/Abidjan", - "type": "Alert", - "validator_type": "not null", - "working_timeout": 3600 - } } } }, @@ -26401,26 +27202,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a report schedule", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/report/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/report/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a report schedule", + "tags": [ + "Report Schedules" ] } }, @@ -26482,14 +27271,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -26511,26 +27292,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (report--info)", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/report/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/report/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Report Schedules" ] } }, @@ -26563,10 +27332,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -26578,6 +27343,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -26588,26 +27356,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (report-related-column-name)", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/report/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/report/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Report Schedules" ] } }, @@ -26649,14 +27405,6 @@ } }, "type": "object" - }, - "example": { - "result": [ - { - "id": "string", - "name": "string" - } - ] } } }, @@ -26681,26 +27429,74 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], "summary": "Get slack channels", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/report/slack_channels/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" + "tags": [ + "Report Schedules" + ] + } + }, + "/api/v1/report/subscribe": { + "post": { + "description": "Creates a report schedule locked to the authenticated user's email. ``creation_method`` is derived server-side from the payload (chart \u2192 charts, dashboard \u2192 dashboards). ``recipients`` are not accepted and are always set to the requesting user's email address.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportScheduleRestApi.post" + } + } + }, + "description": "Report schedule subscription schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/ReportScheduleRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Report schedule subscription created" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/report/slack_channels/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/slack_channels/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Subscribe to a chart or dashboard report", + "tags": [ + "Report Schedules" ] } }, @@ -26728,9 +27524,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -26752,26 +27545,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a report schedule", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/report/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/report/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Delete a report schedule", + "tags": [ + "Report Schedules" ] }, "get": { @@ -26844,43 +27625,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "active": true, - "context_markdown": "string", - "creation_method": "string", - "crontab": "string", - "custom_width": 1, - "description": "string", - "email_subject": "string", - "extra": {}, - "force_screenshot": true, - "grace_period": 1, - "id": 1, - "last_eval_dttm": "2024-01-15T10:30:00Z", - "last_state": "string", - "last_value": 1.0, - "last_value_row_json": "string", - "log_retention": 1, - "name": "string", - "report_format": "string", - "sql": "string", - "timezone": "string", - "type": "string", - "validator_config_json": "string", - "validator_type": "string", - "working_timeout": 1 - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -26905,26 +27649,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a report schedule", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/report/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/report/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a report schedule", + "tags": [ + "Report Schedules" ] }, "put": { @@ -26944,35 +27676,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ReportScheduleRestApi.put" - }, - "example": { - "active": true, - "chart": 1, - "context_markdown": "string", - "creation_method": {}, - "crontab": "string", - "custom_width": 1000, - "dashboard": 1, - "database": 1, - "description": "Daily sales dashboard to marketing", - "email_subject": "[Report] Report name: Dashboard or chart name", - "extra": {}, - "force_screenshot": true, - "grace_period": 14400, - "log_retention": 90, - "name": "string", - "owners": [1], - "recipients": [{}], - "report_format": "PDF", - "sql": "SELECT value FROM time_series_table", - "timezone": "Africa/Abidjan", - "type": "Alert", - "validator_config_json": { - "op": "<", - "threshold": 1.0 - }, - "validator_type": "not null", - "working_timeout": 3600 } } }, @@ -26993,34 +27696,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "active": true, - "chart": 1, - "context_markdown": "string", - "creation_method": {}, - "crontab": "string", - "custom_width": 1000, - "dashboard": 1, - "database": 1, - "description": "Daily sales dashboard to marketing", - "email_subject": "[Report] Report name: Dashboard or chart name", - "extra": {}, - "force_screenshot": true, - "grace_period": 14400, - "log_retention": 90, - "name": "string", - "owners": [], - "recipients": [], - "report_format": "PDF", - "sql": "SELECT value FROM time_series_table", - "timezone": "Africa/Abidjan", - "type": "Alert", - "validator_type": "not null", - "working_timeout": 3600 - } } } }, @@ -27048,26 +27723,78 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], "summary": "Update a report schedule", - "tags": ["Report Schedules"], - "x-codeSamples": [ + "tags": [ + "Report Schedules" + ] + } + }, + "/api/v1/report/{pk}/execute": { + "post": { + "parameters": [ { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/report/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" + "description": "The report schedule pk", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "execution_id": { + "description": "UUID to track the execution status", + "type": "string" + }, + "message": { + "description": "Success message", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Report schedule execution started" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" }, + "503": { + "description": "Celery backend not configured" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/report/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Execute a report schedule immediately", + "tags": [ + "Report Schedules" ] } }, @@ -27122,11 +27849,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "ids": ["string"], - "result": [{}] } } }, @@ -27148,26 +27870,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of report schedule logs", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/report/1/log/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/report/1/log/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/1/log/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of report schedule logs", + "tags": [ + "Report Schedules" ] } }, @@ -27219,20 +27929,6 @@ } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "end_dttm": "2024-01-15T10:30:00Z", - "error_message": "string", - "id": 1, - "scheduled_dttm": "2024-01-15T10:30:00Z", - "start_dttm": "2024-01-15T10:30:00Z", - "state": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000", - "value": 1.0, - "value_row_json": "string" - } } } }, @@ -27257,26 +27953,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a report schedule log (report-pk-log-log-id)", - "tags": ["Report Schedules"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/report/1/log/{log_id}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/report/1/log/{log_id}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/report/1/log/{log_id}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a report schedule log", + "tags": [ + "Report Schedules" ] } }, @@ -27306,9 +27990,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -27329,30 +28010,18 @@ "500": { "$ref": "#/components/responses/500" } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Bulk delete RLS rules", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/rowlevelsecurity/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/rowlevelsecurity/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Bulk delete RLS rules", + "tags": [ + "Row Level Security" ] }, "get": { @@ -27435,20 +28104,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -27470,26 +28125,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of RLS", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/rowlevelsecurity/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/rowlevelsecurity/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of RLS", + "tags": [ + "Row Level Security" ] }, "post": { @@ -27498,15 +28141,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RLSRestApi.post" - }, - "example": { - "clause": "string", - "description": "string", - "filter_type": "Regular", - "group_key": "string", - "name": "string", - "roles": [1], - "tables": [1] } } }, @@ -27527,18 +28161,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "clause": "string", - "description": "string", - "filter_type": "Regular", - "group_key": "string", - "name": "string", - "roles": [], - "tables": [] - } } } }, @@ -27550,6 +28172,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -27563,26 +28188,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new RLS rule", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/rowlevelsecurity/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/rowlevelsecurity/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a new RLS rule", + "tags": [ + "Row Level Security" ] } }, @@ -27644,14 +28257,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -27673,26 +28278,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (rowlevelsecurity--info)", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/rowlevelsecurity/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/rowlevelsecurity/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Row Level Security" ] } }, @@ -27725,10 +28318,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -27740,6 +28329,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -27750,26 +28342,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (rowlevelsecurity-related-column-name)", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/rowlevelsecurity/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/rowlevelsecurity/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Row Level Security" ] } }, @@ -27796,9 +28376,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -27817,26 +28394,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete an RLS", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/rowlevelsecurity/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/rowlevelsecurity/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Delete an RLS", + "tags": [ + "Row Level Security" ] }, "get": { @@ -27909,27 +28474,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "clause": "string", - "description": "string", - "filter_type": "Regular", - "group_key": "string", - "id": 1, - "name": "string", - "roles": [], - "tables": [] - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -27954,26 +28498,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get an RLS", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/rowlevelsecurity/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/rowlevelsecurity/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get an RLS", + "tags": [ + "Row Level Security" ] }, "put": { @@ -27993,15 +28525,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RLSRestApi.put" - }, - "example": { - "clause": "string", - "description": "string", - "filter_type": "Regular", - "group_key": "string", - "name": "string", - "roles": [1], - "tables": [1] } } }, @@ -28022,18 +28545,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "clause": "string", - "description": "string", - "filter_type": "Regular", - "group_key": "string", - "name": "string", - "roles": [], - "tables": [] - } } } }, @@ -28061,26 +28572,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update an RLS rule", - "tags": ["Row Level Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/rowlevelsecurity/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/rowlevelsecurity/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/rowlevelsecurity/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update an RLS rule", + "tags": [ + "Row Level Security" ] } }, @@ -28110,9 +28609,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -28134,26 +28630,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete saved queries", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/saved_query/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/saved_query/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Bulk delete saved queries", + "tags": [ + "Queries" ] }, "get": { @@ -28236,20 +28720,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -28271,26 +28741,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of saved queries", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/saved_query/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/saved_query/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of saved queries", + "tags": [ + "Queries" ] }, "post": { @@ -28299,16 +28757,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/SavedQueryRestApi.post" - }, - "example": { - "catalog": "string", - "db_id": {}, - "description": "string", - "extra_json": "string", - "label": "string", - "schema": "string", - "sql": "string", - "template_parameters": "string" } } }, @@ -28329,19 +28777,6 @@ } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "catalog": "string", - "db_id": {}, - "description": "string", - "extra_json": "string", - "label": "string", - "schema": "string", - "sql": "string", - "template_parameters": "string" - } } } }, @@ -28363,26 +28798,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a saved query", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/saved_query/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/saved_query/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a saved query", + "tags": [ + "Queries" ] } }, @@ -28444,14 +28867,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -28473,26 +28888,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (saved-query--info)", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/saved_query/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/saved_query/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Queries" ] } }, @@ -28525,10 +28928,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/DistincResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -28550,26 +28949,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get distinct values from field data (saved-query-distinct-column-name)", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/saved_query/distinct/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/saved_query/distinct/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/distinct/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get distinct values from field data", + "tags": [ + "Queries" ] } }, @@ -28616,26 +29003,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Download multiple saved queries as YAML files", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/saved_query/export/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/saved_query/export/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/export/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Download multiple saved queries as YAML files", + "tags": [ + "Queries" ] } }, @@ -28689,9 +29064,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -28713,26 +29085,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Import saved queries with associated databases", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/saved_query/import/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/saved_query/import/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/import/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Import saved queries with associated databases", + "tags": [ + "Queries" ] } }, @@ -28765,10 +29125,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -28780,6 +29136,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -28790,26 +29149,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (saved-query-related-column-name)", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/saved_query/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/saved_query/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Queries" ] } }, @@ -28836,9 +29183,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -28857,26 +29201,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a saved query", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/saved_query/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/saved_query/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Delete a saved query", + "tags": [ + "Queries" ] }, "get": { @@ -28949,29 +29281,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "catalog": "string", - "changed_on": "2024-01-15T10:30:00Z", - "changed_on_delta_humanized": {}, - "description": "string", - "id": 1, - "label": "string", - "schema": "string", - "sql": "string", - "sql_tables": {}, - "template_parameters": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -28996,26 +29305,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a saved query", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/saved_query/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/saved_query/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a saved query", + "tags": [ + "Queries" ] }, "put": { @@ -29034,16 +29331,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/SavedQueryRestApi.put" - }, - "example": { - "catalog": "string", - "db_id": {}, - "description": "string", - "extra_json": "string", - "label": "string", - "schema": "string", - "sql": "string", - "template_parameters": "string" } } }, @@ -29061,18 +29348,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "catalog": "string", - "db_id": {}, - "description": "string", - "extra_json": "string", - "label": "string", - "schema": "string", - "sql": "string", - "template_parameters": "string" - } } } }, @@ -29097,26 +29372,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update a saved query", - "tags": ["Queries"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/saved_query/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/saved_query/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/saved_query/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update a saved query", + "tags": [ + "Queries" ] } }, @@ -29133,9 +29396,6 @@ } }, "type": "object" - }, - "example": { - "result": "string" } } }, @@ -29151,26 +29411,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get the CSRF token", - "tags": ["Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/csrf_token/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/csrf_token/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/csrf_token/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get the CSRF token", + "tags": [ + "Security" ] } }, @@ -29249,26 +29497,12 @@ "result": { "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/GroupApi.get_list" + "$ref": "#/components/schemas/SupersetGroupApi.get_list" }, "type": "array" } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -29290,110 +29524,37 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Groups"], - "operationId": "get_security_groups", - "summary": "Get security groups", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/groups/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/groups/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/groups/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Groups" ] }, "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupPostSchema" - }, - "example": { - "description": "string", - "label": "string", - "name": "string", - "roles": [1], - "users": [1] - } - } - }, - "description": "Model schema", - "required": true - }, "responses": { "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/GroupPostSchema" - } - }, - "type": "object" - }, - "example": { - "result": { - "description": "string", - "label": "string", - "name": "string", - "roles": [], - "users": [] - } - } - } - }, "description": "Group created" }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "422": { - "$ref": "#/components/responses/422" + "description": "Bad request" }, "500": { - "$ref": "#/components/responses/500" + "description": "Server error" } }, "security": [ { "jwt": [] - } - ], - "tags": ["Security Groups"], - "operationId": "create_security_groups", - "summary": "Create security groups", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/groups/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/groups/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/groups/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Groups" ] } }, @@ -29455,14 +29616,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -29484,27 +29637,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Groups"], - "operationId": "get_security_groups__info", - "summary": "Get security groups info", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/groups/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/groups/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/groups/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Groups" ] } }, @@ -29531,9 +29670,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -29551,28 +29687,14 @@ }, "security": [ { - "jwt": [] - } - ], - "tags": ["Security Groups"], - "operationId": "delete_security_groups_by_pk", - "summary": "Delete security groups by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/security/groups/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/security/groups/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/groups/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "tags": [ + "Security Groups" ] }, "get": { @@ -29629,7 +29751,7 @@ "type": "object" }, "result": { - "$ref": "#/components/schemas/GroupApi.get" + "$ref": "#/components/schemas/SupersetGroupApi.get" }, "show_columns": { "description": "A list of columns", @@ -29645,23 +29767,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "description": "string", - "id": 1, - "label": "string", - "name": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -29686,27 +29791,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Groups"], - "operationId": "get_security_groups_by_pk", - "summary": "Get security groups by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/groups/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/groups/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/groups/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Groups" ] }, "put": { @@ -29720,89 +29811,30 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupPutSchema" - }, - "example": { - "description": "string", - "label": "string", - "name": "string", - "roles": [1], - "users": [1] - } - } - }, - "description": "Model schema", - "required": true - }, "responses": { "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/GroupPutSchema" - } - }, - "type": "object" - }, - "example": { - "result": { - "description": "string", - "label": "string", - "name": "string", - "roles": [], - "users": [] - } - } - } - }, "description": "Group updated" }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Bad request" }, "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" + "description": "Not found" }, "500": { - "$ref": "#/components/responses/500" + "description": "Server error" } }, "security": [ { "jwt": [] - } - ], - "tags": ["Security Groups"], - "operationId": "update_security_groups_by_pk", - "summary": "Update security groups by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/groups/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/groups/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/groups/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Groups" ] } }, @@ -29813,15 +29845,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/GuestTokenCreate" - }, - "example": { - "resources": [{}], - "rls": [{}], - "user": { - "first_name": "string", - "last_name": "string", - "username": "string" - } } } }, @@ -29839,9 +29862,6 @@ } }, "type": "object" - }, - "example": { - "token": "string" } } }, @@ -29860,26 +29880,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a guest token", - "tags": ["Security"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/guest_token/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/guest_token/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/guest_token/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a guest token", + "tags": [ + "Security" ] } }, @@ -29898,7 +29906,10 @@ }, "provider": { "description": "Choose an authentication provider", - "enum": ["db", "ldap"], + "enum": [ + "db", + "ldap" + ], "example": "db", "type": "string" }, @@ -29914,12 +29925,6 @@ } }, "type": "object" - }, - "example": { - "password": "complex-password", - "provider": "db", - "refresh": true, - "username": "admin" } } }, @@ -29939,10 +29944,6 @@ } }, "type": "object" - }, - "example": { - "access_token": "string", - "refresh_token": "string" } } }, @@ -29958,25 +29959,8 @@ "$ref": "#/components/responses/500" } }, - "tags": ["Security"], - "operationId": "create_security_login", - "summary": "Create security login", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/login\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/login\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/login\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } + "tags": [ + "Security" ] } }, @@ -30055,26 +30039,12 @@ "result": { "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/PermissionViewMenuApi.get_list" + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.get_list" }, "type": "array" } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -30096,27 +30066,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions on Resources (View Menus)"], - "operationId": "get_security_permissions_resources", - "summary": "Get security permissions resources", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/permissions-resources/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/permissions-resources/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions-resources/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions on Resources (View Menus)" ] }, "post": { @@ -30124,11 +30080,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionViewMenuApi.post" - }, - "example": { - "permission_id": {}, - "view_menu_id": {} + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.post" } } }, @@ -30145,17 +30097,10 @@ "type": "string" }, "result": { - "$ref": "#/components/schemas/PermissionViewMenuApi.post" + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.post" } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "permission_id": {}, - "view_menu_id": {} - } } } }, @@ -30177,27 +30122,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions on Resources (View Menus)"], - "operationId": "create_security_permissions_resources", - "summary": "Create security permissions resources", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/permissions-resources/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/permissions-resources/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions-resources/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions on Resources (View Menus)" ] } }, @@ -30259,14 +30190,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -30288,27 +30211,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions on Resources (View Menus)"], - "operationId": "get_security_permissions_resources__info", - "summary": "Get security permissions resources info", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/permissions-resources/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/permissions-resources/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions-resources/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions on Resources (View Menus)" ] } }, @@ -30335,9 +30244,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -30356,27 +30262,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions on Resources (View Menus)"], - "operationId": "delete_security_permissions_resources_by_pk", - "summary": "Delete security permissions resources by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/security/permissions-resources/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/security/permissions-resources/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions-resources/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "tags": [ + "Security Permissions on Resources (View Menus)" ] }, "get": { @@ -30433,7 +30325,7 @@ "type": "object" }, "result": { - "$ref": "#/components/schemas/PermissionViewMenuApi.get" + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.get" }, "show_columns": { "description": "A list of columns", @@ -30449,20 +30341,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "id": 1 - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -30487,27 +30365,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions on Resources (View Menus)"], - "operationId": "get_security_permissions_resources_by_pk", - "summary": "Get security permissions resources by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/permissions-resources/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/permissions-resources/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions-resources/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions on Resources (View Menus)" ] }, "put": { @@ -30525,11 +30389,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionViewMenuApi.put" - }, - "example": { - "permission_id": {}, - "view_menu_id": {} + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.put" } } }, @@ -30543,16 +30403,10 @@ "schema": { "properties": { "result": { - "$ref": "#/components/schemas/PermissionViewMenuApi.put" + "$ref": "#/components/schemas/SupersetPermissionViewMenuApi.put" } }, "type": "object" - }, - "example": { - "result": { - "permission_id": {}, - "view_menu_id": {} - } } } }, @@ -30577,27 +30431,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions on Resources (View Menus)"], - "operationId": "update_security_permissions_resources_by_pk", - "summary": "Update security permissions resources by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/permissions-resources/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/permissions-resources/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions-resources/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions on Resources (View Menus)" ] } }, @@ -30682,20 +30522,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -30717,27 +30543,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions"], - "operationId": "get_security_permissions", - "summary": "Get security permissions", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/permissions/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/permissions/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions" ] } }, @@ -30799,14 +30611,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -30828,27 +30632,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions"], - "operationId": "get_security_permissions__info", - "summary": "Get security permissions info", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/permissions/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/permissions/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions" ] } }, @@ -30923,21 +30713,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "id": 1, - "name": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -30962,27 +30737,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Permissions"], - "operationId": "get_security_permissions_by_pk", - "summary": "Get security permissions by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/permissions/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/permissions/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/permissions/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Permissions" ] } }, @@ -31001,9 +30762,6 @@ } }, "type": "object" - }, - "example": { - "access_token": "string" } } }, @@ -31021,25 +30779,8 @@ "jwt_refresh": [] } ], - "tags": ["Security"], - "operationId": "create_security_refresh", - "summary": "Create security refresh", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/refresh\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/refresh\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/refresh\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } + "tags": [ + "Security" ] } }, @@ -31124,20 +30865,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -31159,27 +30886,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Resources (View Menus)"], - "operationId": "get_security_resources", - "summary": "Get security resources", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/resources/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/resources/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/resources/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Resources (View Menus)" ] }, "post": { @@ -31188,9 +30901,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ViewMenuApi.post" - }, - "example": { - "name": "string" } } }, @@ -31211,12 +30921,6 @@ } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "name": "string" - } } } }, @@ -31238,27 +30942,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Resources (View Menus)"], - "operationId": "create_security_resources", - "summary": "Create security resources", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/resources/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/resources/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/resources/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Resources (View Menus)" ] } }, @@ -31320,14 +31010,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -31349,27 +31031,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Resources (View Menus)"], - "operationId": "get_security_resources__info", - "summary": "Get security resources info", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/resources/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/resources/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/resources/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Resources (View Menus)" ] } }, @@ -31396,9 +31064,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -31417,27 +31082,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Resources (View Menus)"], - "operationId": "delete_security_resources_by_pk", - "summary": "Delete security resources by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/security/resources/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/security/resources/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/resources/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "tags": [ + "Security Resources (View Menus)" ] }, "get": { @@ -31510,21 +31161,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "id": 1, - "name": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -31549,27 +31185,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Resources (View Menus)"], - "operationId": "get_security_resources_by_pk", - "summary": "Get security resources by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/resources/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/resources/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/resources/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Resources (View Menus)" ] }, "put": { @@ -31588,9 +31210,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ViewMenuApi.put" - }, - "example": { - "name": "string" } } }, @@ -31608,11 +31227,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "name": "string" - } } } }, @@ -31637,27 +31251,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Resources (View Menus)"], - "operationId": "update_security_resources_by_pk", - "summary": "Update security resources by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/resources/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/resources/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/resources/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Resources (View Menus)" ] } }, @@ -31742,20 +31342,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -31777,27 +31363,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "get_security_roles", - "summary": "Get security roles", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/roles/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/roles/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] }, "post": { @@ -31806,9 +31378,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/SupersetRoleApi.post" - }, - "example": { - "name": "string" } } }, @@ -31829,12 +31398,6 @@ } }, "type": "object" - }, - "example": { - "id": "string", - "result": { - "name": "string" - } } } }, @@ -31856,27 +31419,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "create_security_roles", - "summary": "Create security roles", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/roles/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/roles/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] } }, @@ -31938,14 +31487,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -31967,27 +31508,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "get_security_roles__info", - "summary": "Get security roles info", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/roles/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/roles/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] } }, @@ -32004,7 +31531,11 @@ "items": { "properties": { "col": { - "enum": ["user_ids", "permission_ids", "name"], + "enum": [ + "user_ids", + "permission_ids", + "name" + ], "type": "string" }, "value": { @@ -32017,12 +31548,18 @@ }, "order_column": { "default": "id", - "enum": ["id", "name"], + "enum": [ + "id", + "name" + ], "type": "string" }, "order_direction": { "default": "asc", - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" }, "page": { @@ -32044,11 +31581,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RolesResponseSchema" - }, - "example": { - "count": 1, - "ids": [1], - "result": [] } } }, @@ -32064,9 +31596,6 @@ } }, "type": "object" - }, - "example": { - "error": "string" } } }, @@ -32082,9 +31611,6 @@ } }, "type": "object" - }, - "example": { - "error": "string" } } }, @@ -32094,26 +31620,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "List roles", - "tags": ["Security Roles"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/roles/search/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/roles/search/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/search/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "List roles", + "tags": [ + "Security Roles" ] } }, @@ -32140,9 +31654,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -32157,31 +31668,17 @@ "500": { "$ref": "#/components/responses/500" } - }, - "security": [ - { - "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "delete_security_roles_by_pk", - "summary": "Delete security roles by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/security/roles/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/security/roles/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] }, "get": { @@ -32254,21 +31751,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "id": 1, - "name": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -32293,27 +31775,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "get_security_roles_by_pk", - "summary": "Get security roles by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/roles/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/roles/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] }, "put": { @@ -32332,9 +31800,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/SupersetRoleApi.put" - }, - "example": { - "name": "string" } } }, @@ -32352,11 +31817,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "name": "string" - } } } }, @@ -32381,27 +31841,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "update_security_roles_by_pk", - "summary": "Update security roles by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/roles/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/roles/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] } }, @@ -32422,9 +31868,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RoleGroupPutSchema" - }, - "example": { - "group_ids": [1] } } }, @@ -32442,11 +31885,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "group_ids": [] - } } } }, @@ -32471,27 +31909,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "update_security_roles_by_role_id_groups", - "summary": "Update security roles by role_id groups", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/roles/{role_id}/groups\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/groups\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/groups\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] } }, @@ -32512,9 +31936,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RolePermissionPostSchema" - }, - "example": { - "permission_view_menu_ids": [1] } } }, @@ -32532,11 +31953,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "permission_view_menu_ids": [] - } } } }, @@ -32561,27 +31977,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "create_security_roles_by_role_id_permissions", - "summary": "Create security roles by role_id permissions", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/roles/{role_id}/permissions\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/permissions\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/permissions\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] } }, @@ -32611,9 +32013,6 @@ } }, "type": "object" - }, - "example": { - "result": [{}] } } }, @@ -32638,27 +32037,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "get_security_roles_by_role_id_permissions", - "summary": "Get security roles by role_id permissions", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/roles/{role_id}/permissions/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/permissions/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/permissions/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] } }, @@ -32679,9 +32064,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RoleUserPutSchema" - }, - "example": { - "user_ids": [1] } } }, @@ -32699,11 +32081,6 @@ } }, "type": "object" - }, - "example": { - "result": { - "user_ids": [] - } } } }, @@ -32728,33 +32105,19 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Roles"], - "operationId": "update_security_roles_by_role_id_users", - "summary": "Update security roles by role_id users", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/roles/{role_id}/users\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/users\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/roles/{role_id}/users\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Roles" ] } }, - "/api/v1/security/user_registrations/": { + "/api/v1/security/subject/": { "get": { - "description": "Get a list of models", + "description": "Gets a list of Subjects, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { "content": { @@ -32827,26 +32190,12 @@ "result": { "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/UserRegistrationsRestAPI.get_list" + "$ref": "#/components/schemas/SubjectRestApi.get_list" }, "type": "array" } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -32868,110 +32217,18 @@ "security": [ { "jwt": [] - } - ], - "tags": ["UserRegistrationsRestAPI"], - "operationId": "get_security_user_registrations", - "summary": "Get security user registrations", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/user_registrations/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/user_registrations/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - }, - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserRegistrationsRestAPI.post" - }, - "example": { - "id": 1 - } - } - }, - "description": "Model schema", - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "id": { - "type": "string" - }, - "result": { - "$ref": "#/components/schemas/UserRegistrationsRestAPI.post" - } - }, - "type": "object" - }, - "example": { - "id": "string", - "result": { - "id": 1 - } - } - } - }, - "description": "Item inserted" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "422": { - "$ref": "#/components/responses/422" }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ { - "jwt": [] + "api_key": [] } ], - "tags": ["UserRegistrationsRestAPI"], - "operationId": "create_security_user_registrations", - "summary": "Create security user registrations", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/user_registrations/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/user_registrations/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } + "summary": "Get a list of Subjects", + "tags": [ + "Security Subjects" ] } }, - "/api/v1/security/user_registrations/_info": { + "/api/v1/security/subject/_info": { "get": { "description": "Get metadata information about this API resource", "parameters": [ @@ -33029,14 +32286,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -33058,186 +32307,20 @@ "security": [ { "jwt": [] - } - ], - "tags": ["UserRegistrationsRestAPI"], - "operationId": "get_security_user_registrations__info", - "summary": "Get security user registrations info", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/user_registrations/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/user_registrations/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - } - }, - "/api/v1/security/user_registrations/distinct/{column_name}": { - "get": { - "parameters": [ - { - "in": "path", - "name": "column_name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DistincResponseSchema" - }, - "example": { - "count": 1, - "result": [] - } - } - }, - "description": "Distinct field data" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Get distinct values from field data (security-user-registrations-distinct-column-name)", - "tags": ["UserRegistrationsRestAPI"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/user_registrations/distinct/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/user_registrations/distinct/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/distinct/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - } - }, - "/api/v1/security/user_registrations/related/{column_name}": { - "get": { - "parameters": [ - { - "in": "path", - "name": "column_name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] - } - } - }, - "description": "Related column data" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] + "api_key": [] } ], - "summary": "Get related fields data (security-user-registrations-related-column-name)", - "tags": ["UserRegistrationsRestAPI"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/user_registrations/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/user_registrations/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } + "summary": "Get metadata information about this API resource", + "tags": [ + "Security Subjects" ] } }, - "/api/v1/security/user_registrations/{pk}": { - "delete": { + "/api/v1/security/subject/{pk}": { + "get": { + "description": "Get an item model", "parameters": [ { "in": "path", @@ -33246,6 +32329,17 @@ "schema": { "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -33254,18 +32348,57 @@ "application/json": { "schema": { "properties": { - "message": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/SubjectRestApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", "type": "string" } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Item deleted" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" }, "404": { "$ref": "#/components/responses/404" @@ -33280,45 +32413,26 @@ "security": [ { "jwt": [] - } - ], - "tags": ["UserRegistrationsRestAPI"], - "operationId": "delete_security_user_registrations_by_pk", - "summary": "Delete security user registrations by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/security/user_registrations/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/security/user_registrations/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Get a Subject", + "tags": [ + "Security Subjects" ] - }, + } + }, + "/api/v1/security/user_registrations/": { "get": { - "description": "Get an item model", + "description": "Get a list of models", "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -33332,6 +32446,10 @@ "application/json": { "schema": { "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, "description_columns": { "properties": { "column_name": { @@ -33342,9 +32460,12 @@ }, "type": "object" }, - "id": { - "description": "The item id", - "type": "string" + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" }, "label_columns": { "properties": { @@ -33356,41 +32477,38 @@ }, "type": "object" }, - "result": { - "$ref": "#/components/schemas/UserRegistrationsRestAPI.get" - }, - "show_columns": { + "list_columns": { "description": "A list of columns", "items": { "type": "string" }, "type": "array" }, - "show_title": { + "list_title": { "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/UserRegistrationsRestAPI.get_list" + }, + "type": "array" } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "id": 1 - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -33398,9 +32516,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -33411,30 +32526,107 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], - "tags": ["UserRegistrationsRestAPI"], - "operationId": "get_security_user_registrations_by_pk", - "summary": "Get security user registrations by pk", - "x-codeSamples": [ + "tags": [ + "UserRegistrationsRestAPI" + ] + } + }, + "/api/v1/security/user_registrations/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/user_registrations/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Item from Model" }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/user_registrations/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "UserRegistrationsRestAPI" ] - }, - "put": { + } + }, + "/api/v1/security/user_registrations/{pk}": { + "delete": { "parameters": [ { "in": "path", @@ -33445,40 +32637,118 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserRegistrationsRestAPI.put" - }, - "example": { - "id": 1 + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } } + }, + "description": "Item deleted" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + }, + { + "api_key": [] + } + ], + "tags": [ + "UserRegistrationsRestAPI" + ] + }, + "get": { + "description": "Get an item model", + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "description": "Model schema", - "required": true - }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, "result": { - "$ref": "#/components/schemas/UserRegistrationsRestAPI.put" + "$ref": "#/components/schemas/UserRegistrationsRestAPI.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" } }, "type": "object" - }, - "example": { - "result": { - "id": 1 - } } } }, - "description": "Item changed" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -33499,27 +32769,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["UserRegistrationsRestAPI"], - "operationId": "update_security_user_registrations_by_pk", - "summary": "Update security user registrations by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/user_registrations/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/user_registrations/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/user_registrations/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "UserRegistrationsRestAPI" ] } }, @@ -33604,20 +32860,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -33639,119 +32881,37 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Users"], - "operationId": "get_security_users", - "summary": "Get security users", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/users/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/users/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/users/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Users" ] }, "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupersetUserApi.post" - }, - "example": { - "active": true, - "email": "string", - "first_name": "string", - "groups": [1], - "last_name": "string", - "password": "string", - "roles": [1], - "username": "string" - } - } - }, - "description": "Model schema", - "required": true - }, "responses": { "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/SupersetUserApi.post" - } - }, - "type": "object" - }, - "example": { - "result": { - "active": true, - "email": "string", - "first_name": "string", - "groups": [], - "last_name": "string", - "password": "string", - "roles": [], - "username": "string" - } - } - } - }, - "description": "Item changed" + "description": "User created" }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" + "description": "Bad request" }, "500": { - "$ref": "#/components/responses/500" + "description": "Server error" } }, "security": [ { "jwt": [] - } - ], - "tags": ["Security Users"], - "operationId": "create_security_users", - "summary": "Create security users", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/security/users/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/security/users/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/users/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Users" ] } }, @@ -33813,14 +32973,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -33842,27 +32994,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Users"], - "operationId": "get_security_users__info", - "summary": "Get security users info", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/users/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/users/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/users/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Users" ] } }, @@ -33889,9 +33027,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -33910,27 +33045,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Users"], - "operationId": "delete_security_users_by_pk", - "summary": "Delete security users by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/security/users/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/security/users/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/users/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "tags": [ + "Security Users" ] }, "get": { @@ -34003,30 +33124,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "active": true, - "changed_on": "2024-01-15T10:30:00Z", - "created_on": "2024-01-15T10:30:00Z", - "email": "string", - "fail_login_count": 1, - "first_name": "string", - "id": 1, - "last_login": "2024-01-15T10:30:00Z", - "last_name": "string", - "login_count": 1, - "username": "string" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -34051,27 +33148,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Security Users"], - "operationId": "get_security_users_by_pk", - "summary": "Get security users by pk", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/security/users/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/security/users/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/users/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Users" ] }, "put": { @@ -34085,95 +33168,66 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupersetUserApi.put" - }, - "example": { - "active": true, - "email": "string", - "first_name": "string", - "groups": [1], - "last_name": "string", - "password": "string", - "roles": [1], - "username": "string" - } - } - }, - "description": "Model schema", - "required": true - }, "responses": { "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/SupersetUserApi.put" - } - }, - "type": "object" - }, - "example": { - "result": { - "active": true, - "email": "string", - "first_name": "string", - "groups": [], - "last_name": "string", - "password": "string", - "roles": [], - "username": "string" - } - } - } - }, - "description": "Item changed" + "description": "User updated" }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Bad request" }, "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" + "description": "Not found" }, "500": { - "$ref": "#/components/responses/500" + "description": "Server error" } }, "security": [ { "jwt": [] + }, + { + "api_key": [] } ], - "tags": ["Security Users"], - "operationId": "update_security_users_by_pk", - "summary": "Update security users by pk", - "x-codeSamples": [ + "tags": [ + "Security Users" + ] + } + }, + "/api/v1/security/users/{pk}/sessions": { + "delete": { + "parameters": [ { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/security/users/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Sessions terminated" + }, + "404": { + "$ref": "#/components/responses/404" }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/security/users/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/security/users/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Security Users" ] } }, @@ -34186,16 +33240,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/SQLLabBootstrapSchema" - }, - "example": { - "active_tab": {}, - "databases": { - "key": "value" - }, - "queries": { - "key": "value" - }, - "tab_state_ids": ["string"] } } }, @@ -34217,26 +33261,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get the bootstrap data for SqlLab page", - "tags": ["SQL Lab"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/sqllab/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/sqllab/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get the bootstrap data for SqlLab page", + "tags": [ + "SQL Lab" ] } }, @@ -34247,13 +33279,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/EstimateQueryCostSchema" - }, - "example": { - "catalog": "string", - "database_id": 1, - "schema": "string", - "sql": "string", - "template_params": {} } } }, @@ -34271,9 +33296,6 @@ } }, "type": "object" - }, - "example": { - "result": {} } } }, @@ -34295,26 +33317,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Estimate the SQL query execution cost", - "tags": ["SQL Lab"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/sqllab/estimate/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/sqllab/estimate/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/estimate/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Estimate the SQL query execution cost", + "tags": [ + "SQL Lab" ] } }, @@ -34325,22 +33335,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ExecutePayloadSchema" - }, - "example": { - "catalog": "string", - "client_id": "string", - "ctas_method": "string", - "database_id": 1, - "expand_data": true, - "queryLimit": 1, - "runAsync": true, - "schema": "string", - "select_as_cta": true, - "sql": "string", - "sql_editor_id": "string", - "tab": "string", - "templateParams": "string", - "tmp_table_name": "string" } } }, @@ -34353,15 +33347,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/QueryExecutionResponseSchema" - }, - "example": { - "columns": [{}], - "data": [{}], - "expanded_columns": [{}], - "query": {}, - "query_id": 1, - "selected_columns": [{}], - "status": "string" } } }, @@ -34372,15 +33357,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/QueryExecutionResponseSchema" - }, - "example": { - "columns": [{}], - "data": [{}], - "expanded_columns": [{}], - "query": {}, - "query_id": 1, - "selected_columns": [{}], - "status": "string" } } }, @@ -34405,26 +33381,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Execute a SQL query", - "tags": ["SQL Lab"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/sqllab/execute/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/sqllab/execute/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/execute/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Execute a SQL query", + "tags": [ + "SQL Lab" ] } }, @@ -34471,26 +33435,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Export the SQL query results to a CSV", - "tags": ["SQL Lab"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/sqllab/export/{client_id}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/sqllab/export/{client_id}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/export/{client_id}/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Export the SQL query results to a CSV", + "tags": [ + "SQL Lab" ] } }, @@ -34545,32 +33497,20 @@ "$ref": "#/components/responses/404" }, "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Export SQL query results to CSV with streaming", - "tags": ["SQL Lab"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/sqllab/export_streaming/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/sqllab/export_streaming/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/export_streaming/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Export SQL query results to CSV with streaming", + "tags": [ + "SQL Lab" ] } }, @@ -34581,12 +33521,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/FormatQueryPayloadSchema" - }, - "example": { - "database_id": 1, - "engine": "string", - "sql": "string", - "template_params": "string" } } }, @@ -34604,9 +33538,6 @@ } }, "type": "object" - }, - "example": { - "result": "string" } } }, @@ -34628,26 +33559,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Format SQL code", - "tags": ["SQL Lab"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/sqllab/format_sql/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/sqllab/format_sql/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/format_sql/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Format SQL code", + "tags": [ + "SQL Lab" ] } }, @@ -34658,10 +33577,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ExplorePermalinkStateSchema" - }, - "example": { - "formData": {}, - "urlParams": [{}] } } }, @@ -34683,10 +33598,6 @@ } }, "type": "object" - }, - "example": { - "key": "string", - "url": "string" } } }, @@ -34708,26 +33619,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a new permanent link (sqllab-permalink)", - "tags": ["SQL Lab Permanent Link"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/sqllab/permalink\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/sqllab/permalink\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/permalink\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a new permanent link", + "tags": [ + "SQL Lab Permanent Link" ] } }, @@ -34755,9 +33654,6 @@ } }, "type": "object" - }, - "example": { - "state": {} } } }, @@ -34782,26 +33678,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get permanent link state for SQLLab editor.", - "tags": ["SQL Lab Permanent Link"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/sqllab/permalink/{key}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/sqllab/permalink/{key}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/permalink/{key}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get permanent link state for SQLLab editor.", + "tags": [ + "SQL Lab Permanent Link" ] } }, @@ -34826,15 +33710,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/QueryExecutionResponseSchema" - }, - "example": { - "columns": [{}], - "data": [{}], - "expanded_columns": [{}], - "query": {}, - "query_id": 1, - "selected_columns": [{}], - "status": "string" } } }, @@ -34862,26 +33737,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get the result of a SQL query execution", - "tags": ["SQL Lab"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/sqllab/results/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/sqllab/results/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/sqllab/results/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get the result of a SQL query execution", + "tags": [ + "SQL Lab" ] } }, @@ -34912,9 +33775,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -34939,26 +33799,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete tags", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/tag/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/tag/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Bulk delete tags", + "tags": [ + "Tags" ] }, "get": { @@ -35041,20 +33889,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -35076,26 +33910,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of tags", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/tag/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/tag/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of tags", + "tags": [ + "Tags" ] }, "post": { @@ -35105,11 +33927,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/TagRestApi.post" - }, - "example": { - "description": "string", - "name": "string", - "objects_to_tag": [] } } }, @@ -35130,14 +33947,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "description": "string", - "name": "string", - "objects_to_tag": [] - } } } }, @@ -35159,26 +33968,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a tag", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/tag/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/tag/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a tag", + "tags": [ + "Tags" ] } }, @@ -35240,14 +34037,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -35269,26 +34058,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get metadata information about tag API endpoints", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/tag/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/tag/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about tag API endpoints", + "tags": [ + "Tags" ] } }, @@ -35299,9 +34076,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/TagPostBulkSchema" - }, - "example": { - "tags": [{}] } } }, @@ -35314,9 +34088,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/TagPostBulkResponseSchema" - }, - "example": { - "result": {} } } }, @@ -35341,26 +34112,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk create tags and tagged objects", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/tag/bulk_create\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/tag/bulk_create\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/bulk_create\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Bulk create tags and tagged objects", + "tags": [ + "Tags" ] } }, @@ -35386,9 +34145,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/GetFavStarIdsSchema" - }, - "example": { - "result": [] } } }, @@ -35410,39 +34166,48 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Tags"], - "operationId": "get_tag_favorite_status", - "summary": "Get tag favorite status", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/tag/favorite_status/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/tag/favorite_status/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/favorite_status/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Tags" ] } }, "/api/v1/tag/get_objects/": { "get": { + "description": "Get all objects associated with a tag. If tagIds is set, tags will be ignored.", "parameters": [ { - "in": "path", - "name": "tag_id", - "required": true, + "in": "query", + "name": "tagIds", "schema": { - "type": "integer" + "items": { + "type": "integer" + }, + "type": "array" + } + }, + { + "in": "query", + "name": "tags", + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "in": "query", + "name": "types", + "schema": { + "items": { + "type": "string" + }, + "type": "array" } } ], @@ -35460,9 +34225,6 @@ } }, "type": "object" - }, - "example": { - "result": [{}] } } }, @@ -35487,26 +34249,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get all objects associated with a tag", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/tag/get_objects/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/tag/get_objects/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/get_objects/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get all objects associated with a tag", + "tags": [ + "Tags" ] } }, @@ -35539,10 +34289,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -35554,6 +34300,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -35564,26 +34313,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get related fields data (tag-related-column-name)", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/tag/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/tag/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get related fields data", + "tags": [ + "Tags" ] } }, @@ -35622,9 +34359,6 @@ } }, "type": "object" - }, - "example": { - "tags": ["string"] } } }, @@ -35654,26 +34388,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Add tags to an object", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/tag/{object_type}/{object_id}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/tag/{object_type}/{object_id}/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/{object_type}/{object_id}/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Add tags to an object", + "tags": [ + "Tags" ] } }, @@ -35716,9 +34438,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -35743,31 +34462,20 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a tagged object", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/tag/{object_type}/{object_id}/{tag}/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/tag/{object_type}/{object_id}/{tag}/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/{object_type}/{object_id}/{tag}/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Delete a tagged object", + "tags": [ + "Tags" ] } }, "/api/v1/tag/{pk}": { "delete": { + "description": "Delete a Tag by id. This will remove all tagged objects with this tag.", "parameters": [ { "in": "path", @@ -35789,13 +34497,16 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, - "description": "Item deleted" + "description": "Tag deleted" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "404": { "$ref": "#/components/responses/404" @@ -35810,26 +34521,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a tag", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/tag/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/tag/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Delete a tag", + "tags": [ + "Tags" ] }, "get": { @@ -35902,25 +34601,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "changed_on_delta_humanized": {}, - "created_on_delta_humanized": {}, - "description": "string", - "id": 1, - "name": "string", - "type": {} - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -35945,26 +34625,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a tag detail information", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/tag/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/tag/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a tag detail information", + "tags": [ + "Tags" ] }, "put": { @@ -35984,11 +34652,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/TagRestApi.put" - }, - "example": { - "description": "string", - "name": "string", - "objects_to_tag": [] } } }, @@ -36009,14 +34672,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "description": "string", - "name": "string", - "objects_to_tag": [] - } } } }, @@ -36044,26 +34699,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update a tag", - "tags": ["Tags"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/tag/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/tag/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update a tag", + "tags": [ + "Tags" ] } }, @@ -36091,9 +34734,6 @@ } }, "type": "object" - }, - "example": { - "result": {} } } }, @@ -36115,27 +34755,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Tags"], - "operationId": "delete_tag_by_pk_favorites", - "summary": "Delete tag by pk favorites", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/tag/1/favorites/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/tag/1/favorites/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/1/favorites/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "tags": [ + "Tags" ] }, "post": { @@ -36161,9 +34787,6 @@ } }, "type": "object" - }, - "example": { - "result": {} } } }, @@ -36185,27 +34808,13 @@ "security": [ { "jwt": [] - } - ], - "tags": ["Tags"], - "operationId": "create_tag_by_pk_favorites", - "summary": "Create tag by pk favorites", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/tag/1/favorites/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/tag/1/favorites/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/tag/1/favorites/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "tags": [ + "Tags" ] } }, @@ -36235,9 +34844,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -36259,26 +34865,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Bulk delete themes", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/theme/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/theme/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Bulk delete themes", + "tags": [ + "Themes" ] }, "get": { @@ -36361,20 +34955,6 @@ } }, "type": "object" - }, - "example": { - "count": 1.0, - "description_columns": { - "column_name": "A Nice description for the column" - }, - "ids": ["string"], - "label_columns": { - "column_name": "A Nice label for the column" - }, - "list_columns": ["string"], - "list_title": "List Items", - "order_columns": ["string"], - "result": [{}] } } }, @@ -36396,26 +34976,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a list of themes", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/theme/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/theme/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a list of themes", + "tags": [ + "Themes" ] }, "post": { @@ -36424,10 +34992,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ThemeRestApi.post" - }, - "example": { - "json_data": "string", - "theme_name": "string" } } }, @@ -36448,13 +35012,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "json_data": "string", - "theme_name": "string" - } } } }, @@ -36476,26 +35033,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Create a theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/theme/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/theme/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Create a theme", + "tags": [ + "Themes" ] } }, @@ -36557,14 +35102,6 @@ } }, "type": "object" - }, - "example": { - "add_columns": {}, - "edit_columns": {}, - "filters": { - "column_name": [{}] - }, - "permissions": ["string"] } } }, @@ -36583,29 +35120,17 @@ "$ref": "#/components/responses/500" } }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Get metadata information about this API resource (theme--info)", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/theme/_info\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/theme/_info\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/_info\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Themes" ] } }, @@ -36655,26 +35180,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Download multiple themes as YAML files", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/theme/export/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/theme/export/\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/export/\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Download multiple themes as YAML files", + "tags": [ + "Themes" ] } }, @@ -36710,9 +35223,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -36734,26 +35244,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Import themes from a ZIP file", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X POST \"http://localhost:8088/api/v1/theme/import/\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.post(\n \"http://localhost:8088/api/v1/theme/import/\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/import/\",\n {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Import themes from a ZIP file", + "tags": [ + "Themes" ] } }, @@ -36786,10 +35284,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/RelatedResponseSchema" - }, - "example": { - "count": 1, - "result": [] } } }, @@ -36801,6 +35295,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -36811,26 +35308,71 @@ "security": [ { "jwt": [] + }, + { + "api_key": [] } ], - "summary": "Get related fields data (theme-related-column-name)", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/theme/related/{column_name}\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" + "summary": "Get related fields data", + "tags": [ + "Themes" + ] + } + }, + "/api/v1/theme/system": { + "get": { + "description": "Returns the same processed theme payload embedded in the page bootstrap: the resolved system default and dark themes, the default mode, and the UI theme administration flag. The client uses this to apply system theme changes live without a full page reload, keeping the result identical to what a reload would render.", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "properties": { + "dark": { + "type": "object" + }, + "default": { + "type": "object" + }, + "defaultMode": { + "type": "string" + }, + "enableUiThemeAdministration": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "Resolved system theme slice" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/theme/related/{column_name}\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" + "jwt": [] }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/related/{column_name}\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get the resolved system default and dark themes", + "tags": [ + "Themes" ] } }, @@ -36847,9 +35389,6 @@ } }, "type": "object" - }, - "example": { - "result": "string" } } }, @@ -36868,26 +35407,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Clear the system dark theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/theme/unset_system_dark\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/theme/unset_system_dark\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/unset_system_dark\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Clear the system dark theme", + "tags": [ + "Themes" ] } }, @@ -36904,9 +35431,6 @@ } }, "type": "object" - }, - "example": { - "result": "string" } } }, @@ -36925,26 +35449,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Clear the system default theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/theme/unset_system_default\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/theme/unset_system_default\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/unset_system_default\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Clear the system default theme", + "tags": [ + "Themes" ] } }, @@ -36971,9 +35483,6 @@ } }, "type": "object" - }, - "example": { - "message": "string" } } }, @@ -36998,26 +35507,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Delete a theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X DELETE \"http://localhost:8088/api/v1/theme/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.delete(\n \"http://localhost:8088/api/v1/theme/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/1\",\n {\n method: \"DELETE\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconsole.log(response.status);" + "api_key": [] } + ], + "summary": "Delete a theme", + "tags": [ + "Themes" ] }, "get": { @@ -37090,27 +35587,6 @@ } }, "type": "object" - }, - "example": { - "description_columns": { - "column_name": "A Nice description for the column" - }, - "id": "string", - "label_columns": { - "column_name": "A Nice label for the column" - }, - "result": { - "changed_on_delta_humanized": {}, - "id": 1, - "is_system": true, - "is_system_dark": true, - "is_system_default": true, - "json_data": "string", - "theme_name": "string", - "uuid": "550e8400-e29b-41d4-a716-446655440000" - }, - "show_columns": ["string"], - "show_title": "Show Item Details" } } }, @@ -37135,26 +35611,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Get a theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/theme/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/theme/1\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/1\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get a theme", + "tags": [ + "Themes" ] }, "put": { @@ -37173,10 +35637,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ThemeRestApi.put" - }, - "example": { - "json_data": "string", - "theme_name": "string" } } }, @@ -37197,13 +35657,6 @@ } }, "type": "object" - }, - "example": { - "id": 1.0, - "result": { - "json_data": "string", - "theme_name": "string" - } } } }, @@ -37231,26 +35684,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Update a theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/theme/1\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"key\": \"value\"}'" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/theme/1\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/1\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Update a theme", + "tags": [ + "Themes" ] } }, @@ -37281,10 +35722,6 @@ } }, "type": "object" - }, - "example": { - "id": 1, - "result": "string" } } }, @@ -37312,26 +35749,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Set a theme as the system dark theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/theme/1/set_system_dark\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" }, { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/theme/1/set_system_dark\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/1/set_system_dark\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Set a theme as the system dark theme", + "tags": [ + "Themes" ] } }, @@ -37362,10 +35787,6 @@ } }, "type": "object" - }, - "example": { - "id": 1, - "result": "string" } } }, @@ -37393,26 +35814,14 @@ "security": [ { "jwt": [] - } - ], - "summary": "Set a theme as the system default theme", - "tags": ["Themes"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X PUT \"http://localhost:8088/api/v1/theme/1/set_system_default\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.put(\n \"http://localhost:8088/api/v1/theme/1/set_system_default\",\n headers={\"Authorization\": \"Bearer \" + access_token},\n json={\"key\": \"value\"}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/theme/1/set_system_default\",\n {\n method: \"PUT\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({ key: \"value\" })\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Set a theme as the system default theme", + "tags": [ + "Themes" ] } }, @@ -37441,263 +35850,24 @@ "$ref": "#/components/responses/404" } }, - "summary": "Get the user avatar", - "tags": ["User"], - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/v1/user/{user_id}/avatar.png\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/v1/user/{user_id}/avatar.png\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" - }, - { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/v1/user/{user_id}/avatar.png\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" - } - ] - } - }, - "/api/{version}/_openapi": { - "get": { - "description": "Get the OpenAPI spec for a specific API version", - "parameters": [ - { - "in": "path", - "name": "version", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "description": "The OpenAPI spec" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, "security": [ { "jwt": [] - } - ], - "tags": ["OpenApi"], - "operationId": "get_api_by_version__openapi", - "summary": "Get api by version openapi", - "x-codeSamples": [ - { - "lang": "cURL", - "label": "cURL", - "source": "curl -X GET \"http://localhost:8088/api/{version}/_openapi\" \\\n -H \"Authorization: Bearer $ACCESS_TOKEN\"" - }, - { - "lang": "Python", - "label": "Python", - "source": "import requests\n\nresponse = requests.get(\n \"http://localhost:8088/api/{version}/_openapi\",\n headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())" }, { - "lang": "JavaScript", - "label": "JavaScript", - "source": "const response = await fetch(\n \"http://localhost:8088/api/{version}/_openapi\",\n {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`\n }\n }\n);\nconst data = await response.json();\nconsole.log(data);" + "api_key": [] } + ], + "summary": "Get the user avatar", + "tags": [ + "User" ] } } }, "servers": [ { - "url": "http://localhost:8088", - "description": "Local development server" - }, - { - "url": "{protocol}://{host}:{port}", - "description": "Custom server", - "variables": { - "protocol": { - "default": "http", - "enum": ["http", "https"], - "description": "HTTP protocol" - }, - "host": { - "default": "localhost", - "description": "Server hostname or IP" - }, - "port": { - "default": "8088", - "description": "Server port" - } - } - } - ], - "tags": [ - { - "name": "Advanced Data Type", - "description": "Advanced data type operations and conversions." - }, - { - "name": "Annotation Layers", - "description": "Manage annotation layers and annotations for charts." - }, - { - "name": "AsyncEventsRestApi", - "description": "Real-time event streaming via Server-Sent Events (SSE)." - }, - { - "name": "Available Domains", - "description": "Get available domains for the Superset instance." - }, - { - "name": "CSS Templates", - "description": "Manage CSS templates for custom dashboard styling." - }, - { - "name": "CacheRestApi", - "description": "Cache management and invalidation operations." - }, - { - "name": "Charts", - "description": "Create, read, update, and delete charts (slices)." - }, - { - "name": "Current User", - "description": "Get information about the authenticated user." - }, - { - "name": "Dashboard Filter State", - "description": "Manage temporary filter state for dashboards." - }, - { - "name": "Dashboard Permanent Link", - "description": "Permanent links to dashboard states." - }, - { - "name": "Dashboards", - "description": "Create, read, update, and delete dashboards." - }, - { - "name": "Database", - "description": "Manage database connections and metadata." - }, - { - "name": "Datasets", - "description": "Manage datasets (tables) used for building charts." - }, - { - "name": "Datasources", - "description": "Query datasource metadata and column values." - }, - { - "name": "Embedded Dashboard", - "description": "Configure embedded dashboard settings." - }, - { - "name": "Explore", - "description": "Chart exploration and data querying endpoints." - }, - { - "name": "Explore Form Data", - "description": "Manage temporary form data for chart exploration." - }, - { - "name": "Explore Permanent Link", - "description": "Permanent links to chart explore states." - }, - { - "name": "Import/export", - "description": "Import and export Superset assets." - }, - { - "name": "LogRestApi", - "description": "Access audit logs and activity history." - }, - { - "name": "Menu", - "description": "Get the Superset menu structure." - }, - { - "name": "OpenApi", - "description": "Access the OpenAPI specification." - }, - { - "name": "Queries", - "description": "View and manage SQL Lab query history." - }, - { - "name": "Report Schedules", - "description": "Configure scheduled reports and alerts." - }, - { - "name": "Row Level Security", - "description": "Manage row-level security rules for data access." - }, - { - "name": "SQL Lab", - "description": "Execute SQL queries and manage SQL Lab sessions." - }, - { - "name": "SQL Lab Permanent Link", - "description": "Permanent links to SQL Lab states." - }, - { - "name": "Security", - "description": "Authentication and token management." - }, - { - "name": "Security Groups", - "description": "Endpoints related to Security Groups." - }, - { - "name": "Security Permissions", - "description": "View available permissions." - }, - { - "name": "Security Permissions on Resources (View Menus)", - "description": "Permission-resource mappings." - }, - { - "name": "Security Resources (View Menus)", - "description": "Manage security resources (view menus)." - }, - { - "name": "Security Roles", - "description": "Manage security roles and their permissions." - }, - { - "name": "Security Users", - "description": "Manage user accounts." - }, - { - "name": "Tags", - "description": "Organize assets with tags." - }, - { - "name": "Themes", - "description": "Manage UI themes for customizing Superset's appearance." - }, - { - "name": "User", - "description": "User profile and preferences." - }, - { - "name": "UserRegistrationsRestAPI", - "description": "Endpoints related to UserRegistrationsRestAPI." + "url": "http://localhost:8088" } ] } diff --git a/superset/dashboards/api.py b/superset/dashboards/api.py index ab6236e24211..f999b2b26f1d 100644 --- a/superset/dashboards/api.py +++ b/superset/dashboards/api.py @@ -584,6 +584,9 @@ def pre_get_list(self, data: dict[str, Any]) -> None: EmbeddedDashboardResponseSchema, DashboardScreenshotPostSchema, VersionListItemSchema, + DashboardChartCustomizationsConfigUpdateSchema, + DashboardColorsConfigUpdateSchema, + DashboardNativeFiltersConfigUpdateSchema, ) apispec_parameter_schemas = { "get_delete_ids_schema": get_delete_ids_schema, diff --git a/superset/dashboards/schemas.py b/superset/dashboards/schemas.py index f2f2e6e51136..a09ddc37123c 100644 --- a/superset/dashboards/schemas.py +++ b/superset/dashboards/schemas.py @@ -218,7 +218,9 @@ class DashboardJSONMetadataSchema(Schema): color_namespace = fields.Str(allow_none=True) positions = fields.Dict(allow_none=True) label_colors = fields.Dict() - shared_label_colors = SharedLabelsColorsField() + shared_label_colors = SharedLabelsColorsField( + metadata={"type": "array", "items": {"type": "string"}} + ) map_label_colors = fields.Dict() color_scheme_domain = fields.List(fields.Str()) cross_filters_enabled = fields.Boolean(dump_default=True) @@ -546,7 +548,9 @@ class DashboardColorsConfigUpdateSchema(BaseDashboardSchema): color_namespace = fields.String(allow_none=True) color_scheme = fields.String(allow_none=True) map_label_colors = fields.Dict(allow_none=False) - shared_label_colors = SharedLabelsColorsField() + shared_label_colors = SharedLabelsColorsField( + metadata={"type": "array", "items": {"type": "string"}} + ) label_colors = fields.Dict(allow_none=False) color_scheme_domain = fields.List(fields.String(), allow_none=False) diff --git a/superset/datasets/api.py b/superset/datasets/api.py index 00eb4b110b15..74decfb22a8c 100644 --- a/superset/datasets/api.py +++ b/superset/datasets/api.py @@ -2153,11 +2153,12 @@ def activity(self, uuid_str: str) -> Response: """Return the activity stream for a dataset. --- get: - summary: Activity stream — dataset's own edits only. - Datasets have no transitive layer in V2 — chart and - dashboard edits that touch this dataset do NOT appear here. - ``?include=self`` and ``?include=all`` return the dataset's - own edits; ``?include=related`` returns an empty stream + summary: Get a dataset's activity stream + description: >- + A dataset's own edits only. Datasets have no transitive layer in + V2 — chart and dashboard edits that touch this dataset do NOT + appear here. ``?include=self`` and ``?include=all`` return the + dataset's own edits; ``?include=related`` returns an empty stream (a dataset has no related entities to fan out to). parameters: - in: path diff --git a/superset/reports/api.py b/superset/reports/api.py index 86bf3ed4d2d3..19f303518fda 100644 --- a/superset/reports/api.py +++ b/superset/reports/api.py @@ -297,6 +297,7 @@ def ensure_alert_reports_enabled(self) -> Optional[Response]: apispec_parameter_schemas = { "get_delete_ids_schema": get_delete_ids_schema, + "get_slack_channels_schema": get_slack_channels_schema, } openapi_spec_tag = "Report Schedules" openapi_spec_methods = openapi_spec_methods_override diff --git a/superset/utils/screenshot_utils.py b/superset/utils/screenshot_utils.py index e9c1230a791f..3dc1ab33dbaa 100644 --- a/superset/utils/screenshot_utils.py +++ b/superset/utils/screenshot_utils.py @@ -23,7 +23,7 @@ from typing import TYPE_CHECKING from celery import current_task -from PIL import Image +from PIL import Image, UnidentifiedImageError from superset.utils.report_execution import ( ReportExecutionBudgetExceededError, @@ -35,6 +35,13 @@ # Time to wait after scrolling for content to settle and load (in milliseconds) SCROLL_SETTLE_TIMEOUT_MS = 1000 +# Chromium can occasionally return a valid but uniformly blank PNG for an +# off-screen clip. Retry after forcing a compositor frame, but keep each CDP +# capture bounded so a wedged compositor cannot consume the report deadline. +TILED_SCREENSHOT_CAPTURE_TIMEOUT_SECONDS = 120 +TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS = 3 +TILED_SCREENSHOT_BLANK_DOMINANT_PIXEL_RATIO = 0.995 + # Runtime task-budget policy shared with the approach introduced in #42118. # Celery exposes the effective per-task hard/soft limits only on the running # task, so a static Superset timeout cannot reliably stay below task-level @@ -115,6 +122,32 @@ class TiledScreenshotBudgetExceededError(ScreenshotTaskBudgetExceededError): """Raised when the tiled-screenshot time budget runs out mid-capture.""" +class ScreenshotCaptureTimeoutError(RuntimeError): + """Raised when Chromium repeatedly times out while capturing a tile.""" + + +def is_screenshot_nearly_uniform(screenshot: bytes) -> tuple[bool, float]: + """Return whether one color occupies nearly all sampled screenshot pixels.""" + + try: + with Image.open(io.BytesIO(screenshot)) as image: + sample = image.convert("RGB") + sample.thumbnail((256, 256)) + colors = sample.getcolors(maxcolors=256) + if not colors: + return False, 0.0 + dominant_pixels = max(count for count, _color in colors) + dominant_ratio = dominant_pixels / (sample.width * sample.height) + return ( + dominant_ratio >= TILED_SCREENSHOT_BLANK_DOMINANT_PIXEL_RATIO, + dominant_ratio, + ) + except (OSError, UnidentifiedImageError): + # Combining the tiles remains responsible for rejecting corrupt image + # bytes. This check only identifies valid images with blank pixels. + return False, 0.0 + + try: from playwright.sync_api import TimeoutError as PlaywrightTimeout except ImportError: @@ -136,8 +169,27 @@ class TiledScreenshotBudgetExceededError(ScreenshotTaskBudgetExceededError): SLICE_CONTAINER_SELECTOR = r".slice_container" LOADING_SELECTOR = r".loading" ALERT_SELECTOR = r'[role="alert"]' -EMPTY_SELECTOR = r".ant-empty" +EMPTY_SELECTOR = r".ant-empty, .ag-overlay-no-rows-wrapper:not(.ag-hidden)" MISSING_CHART_SELECTOR = r".missing-chart-container" +CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS = f"""clip => {{ + const holders = Array.from( + document.querySelectorAll('{CHART_HOLDER_SELECTOR}') + ); + const contentful = holders.filter(holder => {{ + const rect = holder.getBoundingClientRect(); + const overlap = Math.min(rect.bottom, clip.bottom) + - Math.max(rect.top, clip.top); + const meaningfulOverlap = overlap > Math.min( + rect.height, + clip.bottom - clip.top, + ) * 0.1; + const isEmptyOrError = holder.querySelector( + '{ALERT_SELECTOR}, {EMPTY_SELECTOR}, {MISSING_CHART_SELECTOR}' + ) !== null; + return meaningfulOverlap && !isEmptyOrError; + }}).length; + return {{total: holders.length, contentful}}; +}}""" TERMINAL_MARKER_SELECTOR = ( f"{SLICE_CONTAINER_SELECTOR}, {ALERT_SELECTOR}, {EMPTY_SELECTOR}, " f"{MISSING_CHART_SELECTOR}" @@ -155,6 +207,7 @@ class TiledScreenshotBudgetExceededError(ScreenshotTaskBudgetExceededError): # ECharts hosts are gated; DOM/SVG vizzes paint on commit and non-ECharts canvas # vizzes (deck.gl/mapbox/etc.) have no ``.echarts-host`` so they are unaffected. ECHARTS_UNPAINTED_HOST_SELECTOR = r".echarts-host:not(.echarts-render-finished)" +AG_GRID_HOST_SELECTOR = r'[data-themed-ag-grid="true"]' CHART_ERROR_OR_EMPTY_SELECTOR = ( f"{ALERT_SELECTOR}, {EMPTY_SELECTOR}, {MISSING_CHART_SELECTOR}" ) @@ -212,11 +265,23 @@ def _unready_chart_holders_js_body(*, viewport_only: bool) -> str: const hasUnpaintedEchart = holder.querySelector( '{ECHARTS_UNPAINTED_HOST_SELECTOR}' ) !== null; + const agGrids = Array.from(holder.querySelectorAll( + '{AG_GRID_HOST_SELECTOR}' + )); + const unpaintedAgGrids = agGrids.filter( + grid => grid._agGridFirstDataRendered !== true + ); + unpaintedAgGrids.forEach(grid => {{ + grid._supersetAgGridWaitObserved = true; + }}); + const hasUnpaintedAgGrid = unpaintedAgGrids.length > 0; // Ready = a settled error/empty/missing state, or a slice container - // whose ECharts canvas has finished painting. An unpainted ECharts host - // keeps the holder unready so a blank chart is never captured. + // whose renderer has painted. ECharts and AG Grid expose explicit + // completion signals; keep either host unready until its signal fires. const isReady = !stillLoading && ( - hasErrorOrEmpty || (hasSliceContainer && !hasUnpaintedEchart) + hasErrorOrEmpty || ( + hasSliceContainer && !hasUnpaintedEchart && !hasUnpaintedAgGrid + ) ); if (!isReady) {{ const chartIdMatch = holder.className.match(/{CHART_ID_CLASS_PATTERN}/); @@ -228,6 +293,8 @@ def _unready_chart_holders_js_body(*, viewport_only: bool) -> str: state = 'waiting_on_database'; }} else if (hasSliceContainer && hasUnpaintedEchart) {{ state = 'mounted_unpainted'; + }} else if (hasSliceContainer && hasUnpaintedAgGrid) {{ + state = 'ag_grid_unpainted'; }} else {{ state = 'nothing_mounted'; }} @@ -254,37 +321,46 @@ def _unready_chart_holders_js_body(*, viewport_only: bool) -> str: return Array.from(holders).map(holder => {{ const chartIdMatch = holder.className.match(/{CHART_ID_CLASS_PATTERN}/); const chartId = chartIdMatch ? chartIdMatch[1] : null; + const agGridWaitObserved = Array.from(holder.querySelectorAll( + '{AG_GRID_HOST_SELECTOR}' + )).some(grid => grid._supersetAgGridWaitObserved === true); const r = holder.getBoundingClientRect(); if (!(r.top < window.innerHeight && r.bottom > 0)) {{ - return {{ chartId, state: 'virtualized' }}; + return {{ chartId, state: 'virtualized', agGridWaitObserved }}; }} const hasSliceContainer = holder.querySelector( '{SLICE_CONTAINER_SELECTOR}' ) !== null; const stillLoading = holder.querySelector('{LOADING_SELECTOR}') !== null; + const hasUnpaintedAgGrid = Array.from(holder.querySelectorAll( + '{AG_GRID_HOST_SELECTOR}' + )).some(grid => grid._agGridFirstDataRendered !== true); if (stillLoading && hasSliceContainer) {{ - return {{ chartId, state: 'spinner_mounted' }}; + return {{ chartId, state: 'spinner_mounted', agGridWaitObserved }}; }} if (stillLoading) {{ - return {{ chartId, state: 'waiting_on_database' }}; + return {{ chartId, state: 'waiting_on_database', agGridWaitObserved }}; }} if (holder.querySelector('{ALERT_SELECTOR}') !== null) {{ - return {{ chartId, state: 'error' }}; + return {{ chartId, state: 'error', agGridWaitObserved }}; }} if (holder.querySelector( '{EMPTY_SELECTOR}, {MISSING_CHART_SELECTOR}' ) !== null) {{ - return {{ chartId, state: 'empty' }}; + return {{ chartId, state: 'empty', agGridWaitObserved }}; }} if (hasSliceContainer && holder.querySelector( '{ECHARTS_UNPAINTED_HOST_SELECTOR}' ) !== null) {{ - return {{ chartId, state: 'mounted_unpainted' }}; + return {{ chartId, state: 'mounted_unpainted', agGridWaitObserved }}; + }} + if (hasSliceContainer && hasUnpaintedAgGrid) {{ + return {{ chartId, state: 'ag_grid_unpainted', agGridWaitObserved }}; }} if (hasSliceContainer) {{ - return {{ chartId, state: 'rendered' }}; + return {{ chartId, state: 'rendered', agGridWaitObserved }}; }} - return {{ chartId, state: 'nothing_mounted' }}; + return {{ chartId, state: 'nothing_mounted', agGridWaitObserved }}; }}); }} """ @@ -323,7 +399,15 @@ def _unready_chart_holders_js_body(*, viewport_only: bool) -> str: return chart !== null && chart.querySelector('{LOADING_SELECTOR}') === null && chart.querySelector('{TERMINAL_MARKER_SELECTOR}') !== null - && chart.querySelector('{ECHARTS_UNPAINTED_HOST_SELECTOR}') === null; + && ( + chart.querySelector('{CHART_ERROR_OR_EMPTY_SELECTOR}') !== null + || ( + chart.querySelector('{ECHARTS_UNPAINTED_HOST_SELECTOR}') === null + && !Array.from( + chart.querySelectorAll('{AG_GRID_HOST_SELECTOR}') + ).some(grid => grid._agGridFirstDataRendered !== true) + ) + ); }} """ @@ -335,9 +419,17 @@ def _unready_chart_holders_js_body(*, viewport_only: bool) -> str: const chart = document.querySelector('.chart-container'); if (chart === null) {{ return 'missing'; }} if (chart.querySelector('{LOADING_SELECTOR}') !== null) {{ return 'loading'; }} + if (chart.querySelector('{CHART_ERROR_OR_EMPTY_SELECTOR}') !== null) {{ + return 'terminal'; + }} if (chart.querySelector('{ECHARTS_UNPAINTED_HOST_SELECTOR}') !== null) {{ return 'mounted_unpainted'; }} + if (Array.from(chart.querySelectorAll('{AG_GRID_HOST_SELECTOR}')).some( + grid => grid._agGridFirstDataRendered !== true + )) {{ + return 'ag_grid_unpainted'; + }} if (chart.querySelector('{TERMINAL_MARKER_SELECTOR}') !== null) {{ return 'terminal'; }} @@ -581,6 +673,7 @@ def _timeout_seconds( logger.info("Taking %s screenshot tiles%s", num_tiles, context_suffix) screenshot_tiles: list[bytes] = [] + blank_tile_retries = 0 def _raise_if_budget_exhausted() -> None: elapsed, remaining = _deadline_values() @@ -805,28 +898,179 @@ def _raise_if_budget_exhausted() -> None: "height": clip_height, } + holder_count_failed = False + try: + holder_counts = page.evaluate( + CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS, + {"top": clip_y, "bottom": clip_y + clip_height}, + ) + if not ( + isinstance(holder_counts, dict) + and isinstance(holder_counts.get("total"), int) + and isinstance(holder_counts.get("contentful"), int) + ): + raise ValueError("Unexpected chart-holder count result") + total_chart_holders = holder_counts["total"] + contentful_chart_holders = holder_counts["contentful"] + except Exception: # noqa: BLE001 + logger.warning( + "Unable to count chart holders intersecting tile %s/%s%s", + i + 1, + num_tiles, + context_suffix, + exc_info=True, + ) + holder_count_failed = True + total_chart_holders = 0 + contentful_chart_holders = 0 + + if ( + total_chart_holders == 0 + and report_execution_context + and report_execution_context.expected_chart_count + ): + logger.warning( + "report_capture_no_chart_holders tile=%s/%s " + "expected_holders=%s holder_count_failed=%s%s", + i + 1, + num_tiles, + report_execution_context.expected_chart_count, + holder_count_failed, + context_suffix, + ) + # Take screenshot with clipping to capture only this tile's content - capture_timeout = ( - _timeout_seconds( - "screenshot_capture", - reserve_seconds=( - report_execution_context.post_capture_reserve_seconds - if report_execution_context - else 0.0 - ), + tile_screenshot: bytes | None = None + for capture_attempt in range(1, TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS + 1): + capture_timeout = ( + _timeout_seconds( + "screenshot_capture", + requested_seconds=TILED_SCREENSHOT_CAPTURE_TIMEOUT_SECONDS, + reserve_seconds=( + report_execution_context.post_capture_reserve_seconds + if report_execution_context + else 0.0 + ), + ) + if report_execution_context or task_budget is not None + else None ) - if report_execution_context or task_budget is not None - else None - ) - tile_screenshot = page.screenshot( - type="png", - clip=clip, - **( - {"timeout": capture_timeout * 1000} - if capture_timeout is not None - else {} - ), - ) + capture_started_at = time.monotonic() + try: + candidate = page.screenshot( + type="png", + clip=clip, + **( + {"timeout": capture_timeout * 1000} + if capture_timeout is not None + else {} + ), + ) + except PlaywrightTimeout as ex: + capture_elapsed = time.monotonic() - capture_started_at + logger.warning( + "report_capture_tile_timeout tile=%s/%s attempt=%s/%s " + "capture_elapsed_seconds=%.2f%s", + i + 1, + num_tiles, + capture_attempt, + TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS, + capture_elapsed, + context_suffix, + ) + if capture_attempt == TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS: + raise ScreenshotCaptureTimeoutError( + f"Chromium timed out capturing tile {i + 1}/{num_tiles} " + f"after {capture_attempt} attempts" + ) from ex + else: + capture_elapsed = time.monotonic() - capture_started_at + is_uniform, dominant_ratio = is_screenshot_nearly_uniform(candidate) + is_blank = is_uniform and ( + contentful_chart_holders > 0 or holder_count_failed + ) + logger.debug( + "Captured tile %s/%s attempt %s/%s in %.2fs " + "(contentful_chart_holders=%s dominant_pixel_ratio=%.5f)%s", + i + 1, + num_tiles, + capture_attempt, + TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS, + capture_elapsed, + contentful_chart_holders, + dominant_ratio, + context_suffix, + ) + if not is_blank: + tile_screenshot = candidate + break + blank_tile_retries += 1 + logger.warning( + "report_capture_blank_tile tile=%s/%s attempt=%s/%s " + "capture_elapsed_seconds=%.2f contentful_chart_holders=%s " + "dominant_pixel_ratio=%.5f%s", + i + 1, + num_tiles, + capture_attempt, + TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS, + capture_elapsed, + contentful_chart_holders, + dominant_ratio, + context_suffix, + ) + if capture_attempt == TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS: + tile_screenshot = candidate + logger.warning( + "report_capture_uniform_tile_retained tile=%s/%s " + "attempts=%s contentful_chart_holders=%s " + "dominant_pixel_ratio=%.5f%s", + i + 1, + num_tiles, + capture_attempt, + contentful_chart_holders, + dominant_ratio, + context_suffix, + ) + break + + _raise_if_budget_exhausted() + try: + page.bring_to_front() + page.evaluate( + """() => { + window.scrollBy(0, 1); + window.scrollBy(0, -1); + window.__supersetRepaintComplete = false; + requestAnimationFrame(() => requestAnimationFrame(() => { + window.__supersetRepaintComplete = true; + })); + }""" + ) + repaint_timeout = _timeout_seconds( + "screenshot_repaint", + requested_seconds=5.0, + reserve_seconds=( + report_execution_context.post_capture_reserve_seconds + if report_execution_context + else 0.0 + ), + ) + page.wait_for_function( + "() => window.__supersetRepaintComplete === true", + timeout=repaint_timeout * 1000, + ) + except Exception: # noqa: BLE001 + logger.warning( + "report_capture_repaint_timeout tile=%s/%s attempt=%s/%s%s", + i + 1, + num_tiles, + capture_attempt, + TILED_SCREENSHOT_MAX_CAPTURE_ATTEMPTS, + context_suffix, + exc_info=True, + ) + + assert tile_screenshot is not None screenshot_tiles.append(tile_screenshot) logger.debug( @@ -851,9 +1095,17 @@ def _raise_if_budget_exhausted() -> None: holder_states = [] ready_states = {"rendered", "empty", "error", "virtualized"} elapsed, remaining = _deadline_values() + if blank_tile_retries: + logger.info( + "report_capture_blank_tile_retries count=%s%s", + blank_tile_retries, + context_suffix, + ) logger.info( "report_readiness_ready url=%s expected_holders=%s mounted_holders=%s " - "ready_holders=%s elapsed_seconds=%.2f remaining_seconds=%s%s", + "ready_holders=%s ag_grid_waited_holders=%s blank_tile_retries=%s " + "elapsed_seconds=%.2f " + "remaining_seconds=%s%s", url, ( report_execution_context.expected_chart_count @@ -862,6 +1114,8 @@ def _raise_if_budget_exhausted() -> None: ), len(holder_states), sum(holder.get("state") in ready_states for holder in holder_states), + sum(holder.get("agGridWaitObserved") is True for holder in holder_states), + blank_tile_retries, elapsed, f"{remaining:.2f}" if remaining is not None else None, context_suffix, @@ -891,6 +1145,13 @@ def _raise_if_budget_exhausted() -> None: context_suffix, ) raise + except ScreenshotCaptureTimeoutError: + # Preserve the explicit capture-timeout reason for report execution + # history instead of degrading it to an anonymous None screenshot. + logger.exception("Tiled screenshot capture rejected%s", context_suffix) + if report_execution_context: + raise + return None except Exception as e: if readiness_timeout: # Let the per-tile readiness timeout propagate so the caller diff --git a/tests/unit_tests/utils/test_screenshot_utils.py b/tests/unit_tests/utils/test_screenshot_utils.py index 13ecb2d62881..044f65eed830 100644 --- a/tests/unit_tests/utils/test_screenshot_utils.py +++ b/tests/unit_tests/utils/test_screenshot_utils.py @@ -28,8 +28,11 @@ ) from superset.utils.screenshot_utils import ( combine_screenshot_tiles, + CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS, + is_screenshot_nearly_uniform, resolve_screenshot_task_budget_seconds, SCREENSHOT_TASK_BUDGET_MAX_MARGIN_SECONDS, + ScreenshotCaptureTimeoutError, ScreenshotTaskBudgetExceededError, SCROLL_SETTLE_TIMEOUT_MS, take_tiled_screenshot, @@ -38,6 +41,37 @@ ) +def _png(width: int, height: int, color: str) -> bytes: + image = Image.new("RGB", (width, height), color) + output = io.BytesIO() + image.save(output, format="PNG") + return output.getvalue() + + +class TestScreenshotBlankDetection: + def test_uniform_png_is_blank(self): + is_blank, dominant_ratio = is_screenshot_nearly_uniform(_png(100, 100, "white")) + + assert is_blank is True + assert dominant_ratio == 1.0 + + def test_chart_like_png_is_not_blank(self): + image = Image.new("RGB", (100, 100), "white") + for x in range(10, 90): + for y in range(10, 90): + image.putpixel((x, y), (x, y, 100)) + output = io.BytesIO() + image.save(output, format="PNG") + + is_blank, dominant_ratio = is_screenshot_nearly_uniform(output.getvalue()) + + assert is_blank is False + assert dominant_ratio < 0.995 + + def test_non_image_bytes_are_left_for_combination_validation(self): + assert is_screenshot_nearly_uniform(b"not an image") == (False, 0.0) + + def _report_context() -> ReportExecutionContext: """Return a deterministic context with 30 seconds available for readiness.""" @@ -231,6 +265,359 @@ def test_successful_tiled_screenshot(self, mock_page): # Should have called combine function mock_combine.assert_called_once() + def test_blank_tile_forces_repaint_and_retries(self, mock_page): + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + + def evaluate(script, arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + assert arg == {"top": 1000, "bottom": 2000} + return {"total": 1, "contentful": 1} + if "requestAnimationFrame" in script or "window.scrollTo" in script: + return None + return [{"chartId": "7", "state": "rendered"}] + + mock_page.evaluate.side_effect = evaluate + chart_tile = self._create_chart_like_tile() + mock_page.screenshot.side_effect = [_png(800, 1000, "white"), chart_tile] + + with ( + patch( + "superset.utils.screenshot_utils.combine_screenshot_tiles", + return_value=b"combined", + ) as mock_combine, + patch("superset.utils.screenshot_utils.logger") as mock_logger, + ): + result = take_tiled_screenshot( + mock_page, + "dashboard", + tile_height=2000, + report_execution_context=_report_context(), + ) + + assert result == b"combined" + mock_combine.assert_called_once() + combined_tiles = mock_combine.call_args.args[0] + assert len(combined_tiles) == 1 + assert is_screenshot_nearly_uniform(combined_tiles[0])[0] is False + assert mock_page.screenshot.call_count == 2 + mock_page.bring_to_front.assert_called_once_with() + assert any( + "requestAnimationFrame" in call.args[0] + for call in mock_page.evaluate.call_args_list + ) + readiness_log = next( + call + for call in mock_logger.info.call_args_list + if call.args[0].startswith("report_readiness_ready") + ) + assert readiness_log.args[6] == 1 + retry_log = next( + call + for call in mock_logger.info.call_args_list + if call.args[0].startswith("report_capture_blank_tile_retries") + ) + assert retry_log.args[1] == 1 + + def test_repeated_uniform_tiles_are_retained_with_warning(self, mock_page): + element_info = {"height": 2000, "top": 0, "left": 0, "width": 800} + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + return {"total": 1, "contentful": 1} + if "requestAnimationFrame" in script or "window.scrollTo" in script: + return None + return [{"chartId": "7", "state": "rendered"}] + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.return_value = _png(800, 1000, "white") + + with ( + patch("superset.utils.screenshot_utils.logger") as mock_logger, + patch( + "superset.utils.screenshot_utils.combine_screenshot_tiles", + return_value=b"combined", + ) as mock_combine, + ): + result = take_tiled_screenshot( + mock_page, + "dashboard", + tile_height=1000, + report_execution_context=_report_context(), + ) + + assert result == b"combined" + assert mock_page.screenshot.call_count == 6 + assert len(mock_combine.call_args.args[0]) == 2 + retained_warnings = [ + call + for call in mock_logger.warning.call_args_list + if call.args[0].startswith("report_capture_uniform_tile_retained") + ] + assert len(retained_warnings) == 2 + + def test_single_uniform_content_tile_is_retained(self, mock_page): + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + uniform_tile = _png(800, 1000, "navy") + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + return {"total": 1, "contentful": 1} + if "requestAnimationFrame" in script or "window.scrollTo" in script: + return None + return [{"chartId": "7", "state": "rendered"}] + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.return_value = uniform_tile + + with patch( + "superset.utils.screenshot_utils.combine_screenshot_tiles", + return_value=b"combined", + ) as mock_combine: + result = take_tiled_screenshot( + mock_page, + "dashboard", + tile_height=2000, + report_execution_context=_report_context(), + ) + + assert result == b"combined" + assert mock_page.screenshot.call_count == 3 + mock_combine.assert_called_once_with( + [uniform_tile], + allow_partial_fallback=False, + log_context=_report_context().log_context, + ) + + def test_uniform_tile_without_visible_charts_is_allowed(self, mock_page): + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + return {"total": 1, "contentful": 0} + if "window.scrollTo" in script: + return None + return [] + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.return_value = _png(800, 1000, "white") + + with patch( + "superset.utils.screenshot_utils.combine_screenshot_tiles", + return_value=b"combined", + ): + result = take_tiled_screenshot(mock_page, "dashboard", tile_height=2000) + + assert result == b"combined" + assert mock_page.screenshot.call_count == 1 + mock_page.bring_to_front.assert_not_called() + + def test_capture_timeout_retries_with_remaining_budget(self, mock_page): + from superset.utils.screenshot_utils import PlaywrightTimeout + + elapsed = 0.0 + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + context = ReportExecutionContext( + execution_id=UUID("084e7ee6-5557-4ecd-9632-b7f39c9ec524"), + report_schedule_id=11, + dashboard_id=805, + expected_chart_count=52, + deadline=ReportExecutionDeadline( + total_seconds=400, + started_at=0, + _clock=lambda: elapsed, + ), + capture_reserve_seconds=60, + delivery_reserve_seconds=120, + cleanup_reserve_seconds=30, + ) + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + return {"total": 1, "contentful": 1} + if "requestAnimationFrame" in script or "window.scrollTo" in script: + return None + return [{"chartId": "7", "state": "rendered"}] + + def screenshot(**_kwargs): + nonlocal elapsed + if mock_page.screenshot.call_count == 1: + elapsed = 180.0 + raise PlaywrightTimeout("wedged compositor") + return self._create_chart_like_tile() + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.side_effect = screenshot + + with patch( + "superset.utils.screenshot_utils.combine_screenshot_tiles", + return_value=b"combined", + ): + result = take_tiled_screenshot( + mock_page, + "dashboard", + tile_height=2000, + report_execution_context=context, + ) + + assert result == b"combined" + first_call, second_call = mock_page.screenshot.call_args_list + assert first_call.kwargs["timeout"] == 120_000 + assert second_call.kwargs["timeout"] == 70_000 + + def test_repeated_capture_timeout_propagates_specific_error(self, mock_page): + from superset.utils.screenshot_utils import PlaywrightTimeout + + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + return {"total": 1, "contentful": 1} + if "requestAnimationFrame" in script or "window.scrollTo" in script: + return None + return [{"chartId": "7", "state": "rendered"}] + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.side_effect = PlaywrightTimeout("wedged compositor") + + with pytest.raises( + ScreenshotCaptureTimeoutError, + match="timed out capturing tile 1/1 after 3 attempts", + ): + take_tiled_screenshot( + mock_page, + "dashboard", + tile_height=2000, + report_execution_context=_report_context(), + ) + + assert mock_page.screenshot.call_count == 3 + + def test_holder_count_failure_does_not_abort_capture(self, mock_page): + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + raise RuntimeError("execution context destroyed") + if "window.scrollTo" in script: + return None + return [] + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.return_value = _png(800, 1000, "white") + + with ( + patch( + "superset.utils.screenshot_utils.combine_screenshot_tiles", + return_value=b"combined", + ) as mock_combine, + patch("superset.utils.screenshot_utils.logger") as mock_logger, + ): + result = take_tiled_screenshot(mock_page, "dashboard", tile_height=2000) + + assert result == b"combined" + assert mock_page.screenshot.call_count == 3 + assert len(mock_combine.call_args.args[0]) == 1 + assert any( + call.args[0].startswith("Unable to count chart holders") + for call in mock_logger.warning.call_args_list + ) + assert any( + call.args[0].startswith("report_capture_uniform_tile_retained") + for call in mock_logger.warning.call_args_list + ) + + def test_repaint_wait_timeout_is_bounded_and_retried(self, mock_page): + from superset.utils.screenshot_utils import PlaywrightTimeout + + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + return {"total": 1, "contentful": 1} + if "requestAnimationFrame" in script or "window.scrollTo" in script: + return None + return [{"chartId": "7", "state": "rendered"}] + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.side_effect = [ + _png(800, 1000, "white"), + self._create_chart_like_tile(), + ] + + def wait_for_function(script, **_kwargs): + if "__supersetRepaintComplete" in script: + raise PlaywrightTimeout("no repaint") + return None + + mock_page.wait_for_function.side_effect = wait_for_function + + with patch( + "superset.utils.screenshot_utils.combine_screenshot_tiles", + return_value=b"combined", + ): + result = take_tiled_screenshot( + mock_page, + "dashboard", + tile_height=2000, + report_execution_context=_report_context(), + ) + + assert result == b"combined" + assert any( + call.args == ("() => window.__supersetRepaintComplete === true",) + and call.kwargs == {"timeout": 5000.0} + for call in mock_page.wait_for_function.call_args_list + ) + assert mock_page.screenshot.call_count == 2 + + def test_repeated_capture_timeout_preserves_thumbnail_contract(self, mock_page): + from superset.utils.screenshot_utils import PlaywrightTimeout + + element_info = {"height": 1000, "top": 0, "left": 0, "width": 800} + + def evaluate(script, _arg=None): + if "scrollWidth" in script: + return element_info + if script == CONTENTFUL_CHART_HOLDERS_IN_CLIP_JS: + return {"total": 1, "contentful": 1} + if "requestAnimationFrame" in script or "window.scrollTo" in script: + return None + return [] + + mock_page.evaluate.side_effect = evaluate + mock_page.screenshot.side_effect = PlaywrightTimeout("wedged compositor") + + result = take_tiled_screenshot(mock_page, "dashboard", tile_height=2000) + + assert result is None + assert mock_page.screenshot.call_count == 3 + + @staticmethod + def _create_chart_like_tile() -> bytes: + image = Image.new("RGB", (800, 1000), "white") + for x in range(100, 700): + for y in range(100, 900): + image.putpixel((x, y), (x % 255, y % 255, 100)) + output = io.BytesIO() + image.save(output, format="PNG") + return output.getvalue() + def test_slow_holder_mount_is_polled_before_dimensions_and_capture( self, mock_page, @@ -245,7 +632,7 @@ def wait_for_function(*args, **kwargs): events.append("mount" if wait_calls == 0 else "ready") wait_calls += 1 - def evaluate(script): + def evaluate(script, _arg=None): if "scrollWidth" in script: events.append("dimensions") return element_info @@ -460,25 +847,24 @@ def test_scroll_positions_calculated_correctly(self, mock_page): with patch("superset.utils.screenshot_utils.combine_screenshot_tiles"): take_tiled_screenshot(mock_page, "dashboard", tile_height=2000) - # Check page.evaluate calls for scrolling - # First call is for dimensions, subsequent are for scrolling evaluate_calls = mock_page.evaluate.call_args_list - - # 1 dimension query + 3 scroll calls + final holder diagnostics - assert len(evaluate_calls) == 5 + scroll_calls = [ + call + for call in evaluate_calls + if call.args[0].startswith("window.scrollTo") + ] # First call is for dimensions (contains querySelector) assert "querySelector" in str(evaluate_calls[0]) - # Subsequent calls are scroll positions # Tile 1: scroll to y=100 (dashboard_top + 0 * tile_height) - assert evaluate_calls[1][0][0] == "window.scrollTo(0, 100)" + assert scroll_calls[0].args[0] == "window.scrollTo(0, 100)" # Tile 2: scroll to y=2100 (dashboard_top + 1 * tile_height) - assert evaluate_calls[2][0][0] == "window.scrollTo(0, 2100)" + assert scroll_calls[1].args[0] == "window.scrollTo(0, 2100)" # Tile 3: scroll to y=4100 (dashboard_top + 2 * tile_height) - assert evaluate_calls[3][0][0] == "window.scrollTo(0, 4100)" + assert scroll_calls[2].args[0] == "window.scrollTo(0, 4100)" def test_reset_scroll_position(self, mock_page): """Test that scroll position waits are called after each scroll.""" @@ -943,8 +1329,12 @@ def test_budget_exhausted_raises_and_stops_capturing(self, mock_page, monkeypatc # system fault, so it must log at WARNING (not ERROR) -- consistent # with the #38130/#38441 precedent for screenshot timeout logging. assert mock_logger.error.call_count == 0 - mock_logger.warning.assert_called_once() - warning_args = mock_logger.warning.call_args[0] + terminal_warning = next( + call + for call in mock_logger.warning.call_args_list + if call.args[0].startswith("report_capture_terminal") + ) + warning_args = terminal_warning.args assert "terminal_reason=budget_exhausted" in warning_args[0] def test_budget_exhausted_warning_includes_log_context( @@ -1166,3 +1556,57 @@ def test_readiness_predicates_gate_on_unpainted_echarts_hosts() -> None: assert ECHARTS_UNPAINTED_HOST_SELECTOR in REPORT_CHART_HOLDERS_READY_JS assert ECHARTS_UNPAINTED_HOST_SELECTOR in CHART_CONTAINER_READY_JS assert "mounted_unpainted" in FIND_CHART_HOLDER_STATES_JS + + +def test_readiness_predicates_gate_on_unpainted_ag_grid_hosts() -> None: + """Report readiness follows the AG Grid first-data-rendered contract used + by the frontend image export path, rather than accepting its mounted shell.""" + from superset.utils.screenshot_utils import ( + AG_GRID_HOST_SELECTOR, + CHART_CONTAINER_READY_JS, + CHART_CONTAINER_STATE_JS, + CHART_HOLDERS_READY_JS, + FIND_CHART_HOLDER_STATES_JS, + REPORT_ALL_CHART_HOLDERS_READY_JS, + REPORT_CHART_HOLDERS_READY_JS, + ) + + assert AG_GRID_HOST_SELECTOR == '[data-themed-ag-grid="true"]' + for predicate in ( + CHART_HOLDERS_READY_JS, + REPORT_CHART_HOLDERS_READY_JS, + REPORT_ALL_CHART_HOLDERS_READY_JS, + CHART_CONTAINER_READY_JS, + ): + assert AG_GRID_HOST_SELECTOR in predicate + assert "_agGridFirstDataRendered !== true" in predicate + for predicate in ( + CHART_HOLDERS_READY_JS, + REPORT_CHART_HOLDERS_READY_JS, + REPORT_ALL_CHART_HOLDERS_READY_JS, + ): + assert "grid._supersetAgGridWaitObserved = true" in predicate + assert "ag_grid_unpainted" in FIND_CHART_HOLDER_STATES_JS + assert "grid._supersetAgGridWaitObserved === true" in (FIND_CHART_HOLDER_STATES_JS) + assert "agGridWaitObserved" in FIND_CHART_HOLDER_STATES_JS + assert "ag_grid_unpainted" in CHART_CONTAINER_STATE_JS + + +def test_ag_grid_no_rows_overlay_is_a_terminal_empty_state() -> None: + """A mounted zero-row grid must not wait for firstDataRendered forever.""" + from superset.utils.screenshot_utils import ( + CHART_CONTAINER_READY_JS, + CHART_HOLDERS_READY_JS, + EMPTY_SELECTOR, + REPORT_ALL_CHART_HOLDERS_READY_JS, + REPORT_CHART_HOLDERS_READY_JS, + ) + + assert ".ag-overlay-no-rows-wrapper:not(.ag-hidden)" in EMPTY_SELECTOR + for predicate in ( + CHART_HOLDERS_READY_JS, + REPORT_CHART_HOLDERS_READY_JS, + REPORT_ALL_CHART_HOLDERS_READY_JS, + CHART_CONTAINER_READY_JS, + ): + assert ".ag-overlay-no-rows-wrapper:not(.ag-hidden)" in predicate