You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/02/12 21:29:51 UTC

(superset) branch docs/add-theme-api-to-openapi-spec created (now 0002f975354)

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a change to branch docs/add-theme-api-to-openapi-spec
in repository https://gitbox.apache.org/repos/asf/superset.git


      at 0002f975354 docs(api): regenerate OpenAPI spec to include Theme API endpoints

This branch includes the following new commits:

     new 0002f975354 docs(api): regenerate OpenAPI spec to include Theme API endpoints

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(superset) 01/01: docs(api): regenerate OpenAPI spec to include Theme API endpoints

Posted by ru...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch docs/add-theme-api-to-openapi-spec
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 0002f9753549f39bb0e02a5c9a335964d67297e4
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Thu Feb 12 13:29:34 2026 -0800

    docs(api): regenerate OpenAPI spec to include Theme API endpoints
    
    The Theme API was added in #34182 but the OpenAPI spec used in the docs
    hadn't been regenerated to include these endpoints. This commit:
    
    - Regenerates openapi.json from the running Superset instance
    - Adds Theme API endpoints (/api/v1/theme/*)
    - Includes theme management, system theme settings, and export/import
    - Adds "Themes" tag description to fix-openapi-spec.py
    
    The Theme API provides:
    - GET/POST /api/v1/theme/ - List and create themes
    - PUT/DELETE /api/v1/theme/{pk} - Update and delete themes
    - PUT /api/v1/theme/{pk}/set_system_default - Set system default theme
    - PUT /api/v1/theme/{pk}/set_system_dark - Set system dark theme
    - DELETE /api/v1/theme/unset_system_default - Clear system default
    - DELETE /api/v1/theme/unset_system_dark - Clear system dark
    - GET /api/v1/theme/export/ - Export themes as YAML
    - POST /api/v1/theme/import/ - Import themes from YAML
    
    Co-Authored-By: Claude Opus 4.5 <no...@anthropic.com>
---
 docs/scripts/fix-openapi-spec.py   |    1 +
 docs/static/resources/openapi.json | 8626 ++++++++++++++++++++++++++----------
 2 files changed, 6284 insertions(+), 2343 deletions(-)

diff --git a/docs/scripts/fix-openapi-spec.py b/docs/scripts/fix-openapi-spec.py
index f2609b38c33..413c90540d0 100644
--- a/docs/scripts/fix-openapi-spec.py
+++ b/docs/scripts/fix-openapi-spec.py
@@ -295,6 +295,7 @@ TAG_DESCRIPTIONS = {
     "Security Roles": "Manage security roles and their permissions.",
     "Security Users": "Manage user accounts.",
     "Tags": "Organize assets with tags.",
+    "Themes": "Manage UI themes for customizing Superset's appearance.",
     "User": "User profile and preferences.",
 }
 
diff --git a/docs/static/resources/openapi.json b/docs/static/resources/openapi.json
index 4fa850bd838..30401c7ebce 100644
--- a/docs/static/resources/openapi.json
+++ b/docs/static/resources/openapi.json
@@ -276,7 +276,8 @@
               "",
               "opacityLow",
               "opacityMedium",
-              "opacityHigh"
+              "opacityHigh",
+              null
             ],
             "nullable": true,
             "type": "string"
@@ -980,15 +981,7 @@
       "ChartDataDatasource": {
         "properties": {
           "id": {
-            "description": "Datasource id/uuid",
-            "oneOf": [
-              {
-                "type": "integer"
-              },
-              {
-                "type": "string"
-              }
-            ]
+            "description": "Datasource id or uuid"
           },
           "type": {
             "description": "Datasource type",
@@ -1009,6 +1002,14 @@
       },
       "ChartDataExtras": {
         "properties": {
+          "column_order": {
+            "description": "Ordered list of column names for result ordering. Used to preserve user's column reordering (including mixed dimension columns and metrics)",
+            "items": {
+              "type": "string"
+            },
+            "nullable": true,
+            "type": "array"
+          },
           "having": {
             "description": "HAVING clause to be added to aggregate queries using AND operator.",
             "type": "string"
@@ -1055,12 +1056,18 @@
               "1969-12-28T00:00:00Z/P1W",
               "1969-12-29T00:00:00Z/P1W",
               "P1W/1970-01-03T00:00:00Z",
-              "P1W/1970-01-04T00:00:00Z"
+              "P1W/1970-01-04T00:00:00Z",
+              null
             ],
             "example": "P1D",
             "nullable": true,
             "type": "string"
           },
+          "transpile_to_dialect": {
+            "description": "If true, WHERE/HAVING clauses will be transpiled to the target database dialect using SQLGlot.",
+            "nullable": true,
+            "type": "boolean"
+          },
           "where": {
             "description": "WHERE clause to be added to queries using AND operator.",
             "type": "string"
@@ -1095,6 +1102,7 @@
               "LIKE",
               "NOT LIKE",
               "ILIKE",
+              "NOT ILIKE",
               "IS NULL",
               "IS NOT NULL",
               "IN",
@@ -1466,6 +1474,12 @@
             "nullable": true,
             "type": "string"
           },
+          "group_others_when_limit_reached": {
+            "default": false,
+            "description": "When true, groups remaining series into an 'Others' category when series limit is reached. Prevents incomplete data.",
+            "nullable": true,
+            "type": "boolean"
+          },
           "groupby": {
             "description": "Columns by which to group the query. This field is deprecated, use `columns` instead.",
             "items": {},
@@ -1537,7 +1551,8 @@
               "samples",
               "timegrains",
               "post_processed",
-              "drill_detail"
+              "drill_detail",
+              null
             ],
             "nullable": true
           },
@@ -1669,6 +1684,12 @@
             },
             "type": "array"
           },
+          "detected_currency": {
+            "default": null,
+            "description": "Detected ISO 4217 currency code when AUTO mode is used. Returns the currency code if all filtered data contains a single currency or null if multiple currencies are present.",
+            "nullable": true,
+            "type": "string"
+          },
           "error": {
             "description": "Error",
             "nullable": true,
@@ -1683,8 +1704,14 @@
             "description": "Is the result cached",
             "type": "boolean"
           },
+          "queried_dttm": {
+            "description": "UTC timestamp when the query was executed (ISO 8601 format)",
+            "nullable": true,
+            "type": "string"
+          },
           "query": {
-            "description": "The executed query statement",
+            "description": "The executed query statement. May be absent when validation errors occur.",
+            "nullable": true,
             "type": "string"
           },
           "rejected_filters": {
@@ -1727,7 +1754,7 @@
           "cache_timeout",
           "cached_dttm",
           "is_cached",
-          "query"
+          "queried_dttm"
         ],
         "type": "object"
       },
@@ -1745,125 +1772,12 @@
       },
       "ChartDataRestApi.get": {
         "properties": {
-          "cache_timeout": {
-            "nullable": true,
-            "type": "integer"
-          },
-          "certification_details": {
-            "nullable": true,
-            "type": "string"
-          },
-          "certified_by": {
-            "nullable": true,
-            "type": "string"
-          },
-          "changed_on_delta_humanized": {
-            "readOnly": true
-          },
-          "dashboards": {
-            "$ref": "#/components/schemas/ChartDataRestApi.get.Dashboard"
-          },
-          "description": {
-            "nullable": true,
-            "type": "string"
-          },
           "id": {
             "type": "integer"
-          },
-          "is_managed_externally": {
-            "type": "boolean"
-          },
-          "owners": {
-            "$ref": "#/components/schemas/ChartDataRestApi.get.User"
-          },
-          "params": {
-            "nullable": true,
-            "type": "string"
-          },
-          "query_context": {
-            "nullable": true,
-            "type": "string"
-          },
-          "slice_name": {
-            "maxLength": 250,
-            "nullable": true,
-            "type": "string"
-          },
-          "tags": {
-            "$ref": "#/components/schemas/ChartDataRestApi.get.Tag"
-          },
-          "thumbnail_url": {
-            "readOnly": true
-          },
-          "url": {
-            "readOnly": true
-          },
-          "viz_type": {
-            "maxLength": 250,
-            "nullable": true,
-            "type": "string"
-          }
-        },
-        "type": "object"
-      },
-      "ChartDataRestApi.get.Dashboard": {
-        "properties": {
-          "dashboard_title": {
-            "maxLength": 500,
-            "nullable": true,
-            "type": "string"
-          },
-          "id": {
-            "type": "integer"
-          },
-          "json_metadata": {
-            "nullable": true,
-            "type": "string"
-          }
-        },
-        "type": "object"
-      },
-      "ChartDataRestApi.get.Tag": {
-        "properties": {
-          "id": {
-            "type": "integer"
-          },
-          "name": {
-            "maxLength": 250,
-            "nullable": true,
-            "type": "string"
-          },
-          "type": {
-            "enum": [
-              1,
-              2,
-              3,
-              4
-            ]
           }
         },
         "type": "object"
       },
-      "ChartDataRestApi.get.User": {
-        "properties": {
-          "first_name": {
-            "maxLength": 64,
-            "type": "string"
-          },
-          "id": {
-            "type": "integer"
-          },
-          "last_name": {
-            "maxLength": 64,
-            "type": "string"
-          }
-        },
-        "required": [
-          "first_name",
-          "last_name"
-        ],
-        "type": "object"
-      },
       "ChartDataRestApi.get_list": {
         "properties": {
           "cache_timeout": {
@@ -2202,6 +2116,11 @@
             "minLength": 1,
             "type": "string"
           },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
+          },
           "viz_type": {
             "description": "The type of chart visualization used.",
             "example": [
@@ -2257,7 +2176,8 @@
               "dataset",
               "query",
               "saved_query",
-              "view"
+              "view",
+              null
             ],
             "nullable": true,
             "type": "string"
@@ -2311,6 +2231,11 @@
             },
             "type": "array"
           },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
+          },
           "viz_type": {
             "description": "The type of chart visualization used.",
             "example": [
@@ -2568,125 +2493,95 @@
         },
         "type": "object"
       },
-      "ChartRestApi.get": {
+      "ChartGetResponseSchema": {
         "properties": {
           "cache_timeout": {
-            "nullable": true,
-            "type": "integer"
+            "type": "string"
           },
           "certification_details": {
-            "nullable": true,
             "type": "string"
           },
           "certified_by": {
-            "nullable": true,
             "type": "string"
           },
           "changed_on_delta_humanized": {
-            "readOnly": true
+            "type": "string"
           },
           "dashboards": {
-            "$ref": "#/components/schemas/ChartRestApi.get.Dashboard"
+            "items": {
+              "$ref": "#/components/schemas/Dashboard"
+            },
+            "type": "array"
+          },
+          "datasource_id": {
+            "type": "integer"
+          },
+          "datasource_name_text": {
+            "readOnly": true
+          },
+          "datasource_type": {
+            "type": "string"
+          },
+          "datasource_url": {
+            "readOnly": true
+          },
+          "datasource_uuid": {
+            "format": "uuid",
+            "type": "string"
           },
           "description": {
-            "nullable": true,
             "type": "string"
           },
           "id": {
+            "description": "The id of the chart.",
             "type": "integer"
           },
           "is_managed_externally": {
             "type": "boolean"
           },
           "owners": {
-            "$ref": "#/components/schemas/ChartRestApi.get.User"
+            "items": {
+              "$ref": "#/components/schemas/User"
+            },
+            "type": "array"
           },
           "params": {
-            "nullable": true,
             "type": "string"
           },
           "query_context": {
-            "nullable": true,
             "type": "string"
           },
           "slice_name": {
-            "maxLength": 250,
-            "nullable": true,
             "type": "string"
           },
           "tags": {
-            "$ref": "#/components/schemas/ChartRestApi.get.Tag"
+            "items": {
+              "$ref": "#/components/schemas/Tag"
+            },
+            "type": "array"
           },
           "thumbnail_url": {
-            "readOnly": true
+            "type": "string"
           },
           "url": {
-            "readOnly": true
-          },
-          "viz_type": {
-            "maxLength": 250,
-            "nullable": true,
-            "type": "string"
-          }
-        },
-        "type": "object"
-      },
-      "ChartRestApi.get.Dashboard": {
-        "properties": {
-          "dashboard_title": {
-            "maxLength": 500,
-            "nullable": true,
             "type": "string"
           },
-          "id": {
-            "type": "integer"
-          },
-          "json_metadata": {
-            "nullable": true,
+          "uuid": {
+            "format": "uuid",
             "type": "string"
-          }
-        },
-        "type": "object"
-      },
-      "ChartRestApi.get.Tag": {
-        "properties": {
-          "id": {
-            "type": "integer"
           },
-          "name": {
-            "maxLength": 250,
-            "nullable": true,
+          "viz_type": {
             "type": "string"
-          },
-          "type": {
-            "enum": [
-              1,
-              2,
-              3,
-              4
-            ]
           }
         },
         "type": "object"
       },
-      "ChartRestApi.get.User": {
+      "ChartRestApi.get": {
         "properties": {
-          "first_name": {
-            "maxLength": 64,
-            "type": "string"
-          },
           "id": {
             "type": "integer"
-          },
-          "last_name": {
-            "maxLength": 64,
-            "type": "string"
           }
         },
-        "required": [
-          "first_name",
-          "last_name"
-        ],
         "type": "object"
       },
       "ChartRestApi.get_list": {
@@ -3027,6 +2922,11 @@
             "minLength": 1,
             "type": "string"
           },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
+          },
           "viz_type": {
             "description": "The type of chart visualization used.",
             "example": [
@@ -3082,7 +2982,8 @@
               "dataset",
               "query",
               "saved_query",
-              "view"
+              "view",
+              null
             ],
             "nullable": true,
             "type": "string"
@@ -3136,6 +3037,11 @@
             },
             "type": "array"
           },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
+          },
           "viz_type": {
             "description": "The type of chart visualization used.",
             "example": [
@@ -3316,6 +3222,41 @@
         },
         "type": "object"
       },
+      "CurrentUserPutSchema": {
+        "properties": {
+          "first_name": {
+            "description": "The current user's first name",
+            "maxLength": 64,
+            "minLength": 1,
+            "type": "string"
+          },
+          "last_name": {
+            "description": "The current user's last name",
+            "maxLength": 64,
+            "minLength": 1,
+            "type": "string"
+          },
+          "password": {
+            "description": "The current user's password for authentication",
+            "type": "string"
+          }
+        },
+        "type": "object"
+      },
+      "Dashboard": {
+        "properties": {
+          "dashboard_title": {
+            "type": "string"
+          },
+          "id": {
+            "type": "integer"
+          },
+          "json_metadata": {
+            "type": "string"
+          }
+        },
+        "type": "object"
+      },
       "DashboardCacheScreenshotResponseSchema": {
         "properties": {
           "cache_key": {
@@ -3397,6 +3338,9 @@
             },
             "type": "array"
           },
+          "currency_code_column": {
+            "type": "string"
+          },
           "database": {
             "$ref": "#/components/schemas/Database"
           },
@@ -3525,7 +3469,7 @@
             "type": "string"
           },
           "changed_by": {
-            "$ref": "#/components/schemas/User"
+            "$ref": "#/components/schemas/User1"
           },
           "changed_by_name": {
             "type": "string"
@@ -3545,7 +3489,7 @@
             "type": "array"
           },
           "created_by": {
-            "$ref": "#/components/schemas/User"
+            "$ref": "#/components/schemas/User1"
           },
           "created_on_delta_humanized": {
             "type": "string"
@@ -3554,6 +3498,12 @@
             "description": "Override CSS for the dashboard.",
             "type": "string"
           },
+          "custom_tags": {
+            "items": {
+              "$ref": "#/components/schemas/Tag1"
+            },
+            "type": "array"
+          },
           "dashboard_title": {
             "description": "A title for the dashboard.",
             "type": "string"
@@ -3571,7 +3521,7 @@
           },
           "owners": {
             "items": {
-              "$ref": "#/components/schemas/User"
+              "$ref": "#/components/schemas/User1"
             },
             "type": "array"
           },
@@ -3593,16 +3543,29 @@
           },
           "tags": {
             "items": {
-              "$ref": "#/components/schemas/Tag"
+              "$ref": "#/components/schemas/Tag1"
             },
             "type": "array"
           },
+          "theme": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Theme"
+              }
+            ],
+            "nullable": true
+          },
           "thumbnail_url": {
             "nullable": true,
             "type": "string"
           },
           "url": {
             "type": "string"
+          },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
           }
         },
         "type": "object"
@@ -3622,6 +3585,11 @@
             "nullable": true,
             "type": "string"
           },
+          "chartStates": {
+            "description": "Chart-level state for stateful tables (column order, sorting, filtering)",
+            "nullable": true,
+            "type": "object"
+          },
           "dataMask": {
             "description": "Data mask used for native filter state",
             "nullable": true,
@@ -3880,6 +3848,16 @@
             "minLength": 1,
             "nullable": true,
             "type": "string"
+          },
+          "theme_id": {
+            "description": "Theme ID for the dashboard",
+            "nullable": true,
+            "type": "integer"
+          },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
           }
         },
         "type": "object"
@@ -3961,6 +3939,42 @@
               "type": "integer"
             },
             "type": "array"
+          },
+          "theme_id": {
+            "description": "Theme ID for the dashboard",
+            "nullable": true,
+            "type": "integer"
+          },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
+          }
+        },
+        "type": "object"
+      },
+      "DashboardScreenshotPostSchema": {
+        "properties": {
+          "activeTabs": {
+            "description": "A list representing active tabs.",
+            "items": {
+              "type": "string"
+            },
+            "type": "array"
+          },
+          "anchor": {
+            "description": "A string representing the anchor.",
+            "type": "string"
+          },
+          "dataMask": {
+            "additionalProperties": {},
+            "description": "An object representing the data mask.",
+            "type": "object"
+          },
+          "urlParams": {
+            "description": "A list of tuples, each containing two strings.",
+            "items": {},
+            "type": "array"
           }
         },
         "type": "object"
@@ -4333,6 +4347,11 @@
           "changed_on_delta_humanized": {
             "readOnly": true
           },
+          "configuration_method": {
+            "maxLength": 255,
+            "nullable": true,
+            "type": "string"
+          },
           "created_by": {
             "$ref": "#/components/schemas/DatabaseRestApi.get_list.User1"
           },
@@ -5067,6 +5086,12 @@
             "minLength": 1,
             "type": "string"
           },
+          "datetime_format": {
+            "maxLength": 100,
+            "minLength": 1,
+            "nullable": true,
+            "type": "string"
+          },
           "description": {
             "nullable": true,
             "type": "string"
@@ -5170,6 +5195,21 @@
         ],
         "type": "object"
       },
+      "DatasetMetricCurrencyPut": {
+        "properties": {
+          "symbol": {
+            "maxLength": 128,
+            "minLength": 1,
+            "type": "string"
+          },
+          "symbolPosition": {
+            "maxLength": 128,
+            "minLength": 1,
+            "type": "string"
+          }
+        },
+        "type": "object"
+      },
       "DatasetMetricRestApi.get": {
         "properties": {
           "id": {
@@ -5205,10 +5245,12 @@
       "DatasetMetricsPut": {
         "properties": {
           "currency": {
-            "maxLength": 128,
-            "minLength": 1,
-            "nullable": true,
-            "type": "string"
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/DatasetMetricCurrencyPut"
+              }
+            ],
+            "nullable": true
           },
           "d3format": {
             "maxLength": 128,
@@ -5342,8 +5384,7 @@
             "type": "boolean"
           },
           "cache_timeout": {
-            "nullable": true,
-            "type": "integer"
+            "readOnly": true
           },
           "catalog": {
             "maxLength": 256,
@@ -5378,6 +5419,11 @@
           "created_on_humanized": {
             "readOnly": true
           },
+          "currency_code_column": {
+            "maxLength": 250,
+            "nullable": true,
+            "type": "string"
+          },
           "database": {
             "$ref": "#/components/schemas/DatasetRestApi.get.Database"
           },
@@ -5480,6 +5526,11 @@
           "url": {
             "readOnly": true
           },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
+          },
           "verbose_map": {
             "readOnly": true
           }
@@ -5506,6 +5557,11 @@
           },
           "id": {
             "type": "integer"
+          },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
           }
         },
         "required": [
@@ -5793,6 +5849,11 @@
           },
           "id": {
             "type": "integer"
+          },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
           }
         },
         "required": [
@@ -5887,6 +5948,15 @@
             "maxLength": 250,
             "minLength": 1,
             "type": "string"
+          },
+          "template_params": {
+            "nullable": true,
+            "type": "string"
+          },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
           }
         },
         "required": [
@@ -5917,6 +5987,12 @@
             },
             "type": "array"
           },
+          "currency_code_column": {
+            "maxLength": 250,
+            "minLength": 0,
+            "nullable": true,
+            "type": "string"
+          },
           "database_id": {
             "type": "integer"
           },
@@ -6003,6 +6079,11 @@
           "template_params": {
             "nullable": true,
             "type": "string"
+          },
+          "uuid": {
+            "format": "uuid",
+            "nullable": true,
+            "type": "string"
           }
         },
         "type": "object"
@@ -6090,7 +6171,7 @@
             "type": "array"
           },
           "changed_by": {
-            "$ref": "#/components/schemas/User1"
+            "$ref": "#/components/schemas/User2"
           },
           "changed_on": {
             "format": "date-time",
@@ -6214,10 +6295,6 @@
             "nullable": true,
             "type": "boolean"
           },
-          "json": {
-            "nullable": true,
-            "type": "boolean"
-          },
           "queryLimit": {
             "nullable": true,
             "type": "integer"
@@ -6404,6 +6481,31 @@
         ],
         "type": "object"
       },
+      "FormatQueryPayloadSchema": {
+        "properties": {
+          "database_id": {
+            "description": "The database id",
+            "nullable": true,
+            "type": "integer"
+          },
+          "engine": {
+            "nullable": true,
+            "type": "string"
+          },
+          "sql": {
+            "type": "string"
+          },
+          "template_params": {
+            "description": "The SQL query template params as JSON string",
+            "nullable": true,
+            "type": "string"
+          }
+        },
+        "required": [
+          "sql"
+        ],
+        "type": "object"
+      },
       "GetFavStarIdsSchema": {
         "properties": {
           "result": {
@@ -6459,6 +6561,290 @@
         ],
         "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"
+        ],
+        "type": "object"
+      },
+      "GroupApi.post": {
+        "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"
+          }
+        },
+        "required": [
+          "name"
+        ],
+        "type": "object"
+      },
+      "GroupApi.put": {
+        "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"
+      },
+      "GroupPostSchema": {
+        "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"
+          }
+        },
+        "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": {
@@ -6474,7 +6860,7 @@
             "type": "array"
           },
           "user": {
-            "$ref": "#/components/schemas/User2"
+            "$ref": "#/components/schemas/User3"
           }
         },
         "required": [
@@ -6504,6 +6890,15 @@
             "nullable": true,
             "type": "integer"
           },
+          "configuration_method": {
+            "default": "sqlalchemy_form",
+            "enum": [
+              "sqlalchemy_form",
+              "dynamic_form",
+              null
+            ],
+            "nullable": true
+          },
           "database_name": {
             "type": "string"
           },
@@ -6593,6 +6988,9 @@
             "additionalProperties": {},
             "type": "object"
           },
+          "per_user_caching": {
+            "type": "boolean"
+          },
           "schema_options": {
             "additionalProperties": {},
             "type": "object"
@@ -6646,21 +7044,28 @@
           "user": {
             "$ref": "#/components/schemas/LogRestApi.get.User"
           },
-          "user_id": {
-            "nullable": true,
-            "type": "integer"
-          }
+          "user_id": {}
         },
         "type": "object"
       },
       "LogRestApi.get.User": {
         "properties": {
-          "username": {
+          "first_name": {
+            "maxLength": 64,
+            "type": "string"
+          },
+          "last_name": {
             "maxLength": 64,
             "type": "string"
+          },
+          "username": {
+            "maxLength": 128,
+            "type": "string"
           }
         },
         "required": [
+          "first_name",
+          "last_name",
           "username"
         ],
         "type": "object"
@@ -6701,21 +7106,28 @@
           "user": {
             "$ref": "#/components/schemas/LogRestApi.get_list.User"
           },
-          "user_id": {
-            "nullable": true,
-            "type": "integer"
-          }
+          "user_id": {}
         },
         "type": "object"
       },
       "LogRestApi.get_list.User": {
         "properties": {
-          "username": {
+          "first_name": {
             "maxLength": 64,
             "type": "string"
+          },
+          "last_name": {
+            "maxLength": 64,
+            "type": "string"
+          },
+          "username": {
+            "maxLength": 128,
+            "type": "string"
           }
         },
         "required": [
+          "first_name",
+          "last_name",
           "username"
         ],
         "type": "object"
@@ -6882,27 +7294,15 @@
       },
       "PermissionViewMenuApi.post": {
         "properties": {
-          "permission_id": {
-            "nullable": true,
-            "type": "integer"
-          },
-          "view_menu_id": {
-            "nullable": true,
-            "type": "integer"
-          }
+          "permission_id": {},
+          "view_menu_id": {}
         },
         "type": "object"
       },
       "PermissionViewMenuApi.put": {
         "properties": {
-          "permission_id": {
-            "nullable": true,
-            "type": "integer"
-          },
-          "view_menu_id": {
-            "nullable": true,
-            "type": "integer"
-          }
+          "permission_id": {},
+          "view_menu_id": {}
         },
         "type": "object"
       },
@@ -7112,7 +7512,7 @@
             "type": "string"
           },
           "user": {
-            "$ref": "#/components/schemas/User"
+            "$ref": "#/components/schemas/User1"
           }
         },
         "type": "object"
@@ -7272,7 +7672,7 @@
       "RLSRestApi.get_list": {
         "properties": {
           "changed_by": {
-            "$ref": "#/components/schemas/User"
+            "$ref": "#/components/schemas/User1"
           },
           "changed_on_delta_humanized": {
             "readOnly": true
@@ -7644,7 +8044,8 @@
             "enum": [
               "Email",
               "Slack",
-              "SlackV2"
+              "SlackV2",
+              "Webhook"
             ],
             "type": "string"
           }
@@ -7896,10 +8297,7 @@
           "changed_on_delta_humanized": {
             "readOnly": true
           },
-          "chart_id": {
-            "nullable": true,
-            "type": "integer"
-          },
+          "chart_id": {},
           "created_by": {
             "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User1"
           },
@@ -7920,10 +8318,7 @@
           "crontab_humanized": {
             "readOnly": true
           },
-          "dashboard_id": {
-            "nullable": true,
-            "type": "integer"
-          },
+          "dashboard_id": {},
           "description": {
             "nullable": true,
             "type": "string"
@@ -8255,6 +8650,7 @@
               "America/Coral_Harbour",
               "America/Cordoba",
               "America/Costa_Rica",
+              "America/Coyhaique",
               "America/Creston",
               "America/Cuiaba",
               "America/Curacao",
@@ -8807,7 +9203,8 @@
             "enum": [
               "charts",
               "dashboards",
-              "alerts_reports"
+              "alerts_reports",
+              null
             ],
             "nullable": true
           },
@@ -8996,6 +9393,7 @@
               "America/Coral_Harbour",
               "America/Cordoba",
               "America/Costa_Rica",
+              "America/Coyhaique",
               "America/Creston",
               "America/Cuiaba",
               "America/Curacao",
@@ -9511,7 +9909,8 @@
             "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`<br>Supports the comparison operators <, <=, >, >=, ==, and !=",
             "enum": [
               "not null",
-              "operator"
+              "operator",
+              null
             ],
             "nullable": true,
             "type": "string"
@@ -9557,6 +9956,21 @@
         ],
         "type": "object"
       },
+      "RoleGroupPutSchema": {
+        "properties": {
+          "group_ids": {
+            "description": "List of group ids",
+            "items": {
+              "type": "integer"
+            },
+            "type": "array"
+          }
+        },
+        "required": [
+          "group_ids"
+        ],
+        "type": "object"
+      },
       "RolePermissionListSchema": {
         "properties": {
           "id": {
@@ -9831,10 +10245,7 @@
           "database": {
             "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Database"
           },
-          "db_id": {
-            "nullable": true,
-            "type": "integer"
-          },
+          "db_id": {},
           "description": {
             "nullable": true,
             "type": "string"
@@ -9958,10 +10369,7 @@
             "nullable": true,
             "type": "string"
           },
-          "db_id": {
-            "nullable": true,
-            "type": "integer"
-          },
+          "db_id": {},
           "description": {
             "nullable": true,
             "type": "string"
@@ -9998,10 +10406,7 @@
             "nullable": true,
             "type": "string"
           },
-          "db_id": {
-            "nullable": true,
-            "type": "integer"
-          },
+          "db_id": {},
           "description": {
             "nullable": true,
             "type": "string"
@@ -10265,6 +10670,9 @@
             "maxLength": 64,
             "type": "string"
           },
+          "groups": {
+            "$ref": "#/components/schemas/SupersetUserApi.get.Group"
+          },
           "id": {
             "type": "integer"
           },
@@ -10285,7 +10693,7 @@
             "$ref": "#/components/schemas/SupersetUserApi.get.Role"
           },
           "username": {
-            "maxLength": 64,
+            "maxLength": 128,
             "type": "string"
           }
         },
@@ -10297,6 +10705,31 @@
         ],
         "type": "object"
       },
+      "SupersetUserApi.get.Group": {
+        "properties": {
+          "description": {
+            "maxLength": 512,
+            "nullable": true,
+            "type": "string"
+          },
+          "id": {
+            "type": "integer"
+          },
+          "label": {
+            "maxLength": 150,
+            "nullable": true,
+            "type": "string"
+          },
+          "name": {
+            "maxLength": 100,
+            "type": "string"
+          }
+        },
+        "required": [
+          "name"
+        ],
+        "type": "object"
+      },
       "SupersetUserApi.get.Role": {
         "properties": {
           "id": {
@@ -10362,6 +10795,9 @@
             "maxLength": 64,
             "type": "string"
           },
+          "groups": {
+            "$ref": "#/components/schemas/SupersetUserApi.get_list.Group"
+          },
           "id": {
             "type": "integer"
           },
@@ -10382,7 +10818,7 @@
             "$ref": "#/components/schemas/SupersetUserApi.get_list.Role"
           },
           "username": {
-            "maxLength": 64,
+            "maxLength": 128,
             "type": "string"
           }
         },
@@ -10394,6 +10830,31 @@
         ],
         "type": "object"
       },
+      "SupersetUserApi.get_list.Group": {
+        "properties": {
+          "description": {
+            "maxLength": 512,
+            "nullable": true,
+            "type": "string"
+          },
+          "id": {
+            "type": "integer"
+          },
+          "label": {
+            "maxLength": 150,
+            "nullable": true,
+            "type": "string"
+          },
+          "name": {
+            "maxLength": 100,
+            "type": "string"
+          }
+        },
+        "required": [
+          "name"
+        ],
+        "type": "object"
+      },
       "SupersetUserApi.get_list.Role": {
         "properties": {
           "id": {
@@ -10439,6 +10900,13 @@
             "description": "The user's first name",
             "type": "string"
           },
+          "groups": {
+            "description": "The user's roles",
+            "items": {
+              "type": "integer"
+            },
+            "type": "array"
+          },
           "last_name": {
             "description": "The user's last name",
             "type": "string"
@@ -10452,7 +10920,6 @@
             "items": {
               "type": "integer"
             },
-            "minItems": 1,
             "type": "array"
           },
           "username": {
@@ -10467,7 +10934,6 @@
           "first_name",
           "last_name",
           "password",
-          "roles",
           "username"
         ],
         "type": "object"
@@ -10486,6 +10952,13 @@
             "description": "The user's first name",
             "type": "string"
           },
+          "groups": {
+            "description": "The user's roles",
+            "items": {
+              "type": "integer"
+            },
+            "type": "array"
+          },
           "last_name": {
             "description": "The user's last name",
             "type": "string"
@@ -10499,7 +10972,6 @@
             "items": {
               "type": "integer"
             },
-            "minItems": 1,
             "type": "array"
           },
           "username": {
@@ -10817,6 +11289,25 @@
         },
         "type": "object"
       },
+      "Tag1": {
+        "properties": {
+          "id": {
+            "type": "integer"
+          },
+          "name": {
+            "type": "string"
+          },
+          "type": {
+            "enum": [
+              1,
+              2,
+              3,
+              4
+            ]
+          }
+        },
+        "type": "object"
+      },
       "TagGetResponseSchema": {
         "properties": {
           "id": {
@@ -10939,63 +11430,18 @@
       },
       "TagRestApi.get.User1": {
         "properties": {
-          "active": {
-            "nullable": true,
-            "type": "boolean"
-          },
-          "changed_on": {
-            "format": "date-time",
-            "nullable": true,
-            "type": "string"
-          },
-          "created_on": {
-            "format": "date-time",
-            "nullable": true,
-            "type": "string"
-          },
-          "email": {
-            "maxLength": 320,
-            "type": "string"
-          },
-          "fail_login_count": {
-            "nullable": true,
-            "type": "integer"
-          },
           "first_name": {
             "maxLength": 64,
             "type": "string"
           },
-          "id": {
-            "type": "integer"
-          },
-          "last_login": {
-            "format": "date-time",
-            "nullable": true,
-            "type": "string"
-          },
           "last_name": {
             "maxLength": 64,
             "type": "string"
-          },
-          "login_count": {
-            "nullable": true,
-            "type": "integer"
-          },
-          "password": {
-            "maxLength": 256,
-            "nullable": true,
-            "type": "string"
-          },
-          "username": {
-            "maxLength": 64,
-            "type": "string"
           }
         },
         "required": [
-          "email",
           "first_name",
-          "last_name",
-          "username"
+          "last_name"
         ],
         "type": "object"
       },
@@ -11113,7 +11559,7 @@
             "type": "string"
           },
           "created_by": {
-            "$ref": "#/components/schemas/User"
+            "$ref": "#/components/schemas/User1"
           },
           "creator": {
             "type": "string"
@@ -11126,7 +11572,7 @@
           },
           "owners": {
             "items": {
-              "$ref": "#/components/schemas/User1"
+              "$ref": "#/components/schemas/User2"
             },
             "type": "array"
           },
@@ -11169,6 +11615,218 @@
         ],
         "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"
+      },
+      "ThemeRestApi.get.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": {
+        "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": {
@@ -11359,6 +12017,20 @@
         "type": "object"
       },
       "User1": {
+        "properties": {
+          "first_name": {
+            "type": "string"
+          },
+          "id": {
+            "type": "integer"
+          },
+          "last_name": {
+            "type": "string"
+          }
+        },
+        "type": "object"
+      },
+      "User2": {
         "properties": {
           "first_name": {
             "type": "string"
@@ -11375,18 +12047,82 @@
         },
         "type": "object"
       },
-      "User2": {
+      "User3": {
+        "properties": {
+          "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"
+          },
           "first_name": {
+            "maxLength": 64,
             "type": "string"
           },
+          "id": {
+            "type": "integer"
+          },
           "last_name": {
+            "maxLength": 64,
+            "type": "string"
+          },
+          "registration_date": {
+            "format": "date-time",
+            "nullable": true,
+            "type": "string"
+          },
+          "registration_hash": {
+            "maxLength": 256,
+            "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": {
@@ -11409,6 +12145,9 @@
           "last_name": {
             "type": "string"
           },
+          "login_count": {
+            "type": "integer"
+          },
           "username": {
             "type": "string"
           }
@@ -11714,6 +12453,19 @@
                       "type": "boolean"
                     },
                     {
+                      "items": {
+                        "anyOf": [
+                          {
+                            "type": "number"
+                          },
+                          {
+                            "type": "string"
+                          },
+                          {
+                            "type": "boolean"
+                          }
+                        ]
+                      },
                       "type": "array"
                     }
                   ]
@@ -11857,39 +12609,6 @@
         },
         "type": "object"
       },
-      "DashboardScreenshotPostSchema": {
-        "type": "object",
-        "properties": {
-          "dataMask": {
-            "type": "object",
-            "description": "An object representing the data mask.",
-            "additionalProperties": true
-          },
-          "activeTabs": {
-            "type": "array",
-            "items": {
-              "type": "string"
-            },
-            "description": "A list representing active tabs."
-          },
-          "anchor": {
-            "type": "string",
-            "description": "A string representing the anchor."
-          },
-          "urlParams": {
-            "type": "array",
-            "items": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            "description": "A list of tuples, each containing two strings."
-          }
-        }
-      },
       "DashboardNativeFiltersConfigUpdateSchema": {
         "type": "object",
         "properties": {
@@ -11959,33 +12678,6 @@
           }
         }
       },
-      "FormatQueryPayloadSchema": {
-        "type": "object",
-        "required": [
-          "sql"
-        ],
-        "properties": {
-          "sql": {
-            "type": "string",
-            "description": "The SQL query to format."
-          },
-          "engine": {
-            "type": "string",
-            "nullable": true,
-            "description": "The database engine."
-          },
-          "database_id": {
-            "type": "integer",
-            "nullable": true,
-            "description": "The database id."
-          },
-          "template_params": {
-            "type": "string",
-            "nullable": true,
-            "description": "The SQL query template params as JSON string."
-          }
-        }
-      },
       "get_slack_channels_schema": {
         "type": "object",
         "properties": {
@@ -14185,6 +14877,7 @@
                 "query_context": "string",
                 "query_context_generation": true,
                 "slice_name": "string",
+                "uuid": "550e8400-e29b-41d4-a716-446655440000",
                 "viz_type": [
                   "bar",
                   "area",
@@ -14229,6 +14922,7 @@
                     "query_context": "string",
                     "query_context_generation": true,
                     "slice_name": "string",
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000",
                     "viz_type": [
                       "bar",
                       "area",
@@ -14956,15 +15650,17 @@
         ]
       }
     },
-    "/api/v1/chart/{pk}": {
-      "delete": {
+    "/api/v1/chart/{id_or_uuid}": {
+      "get": {
+        "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"
             }
           }
         ],
@@ -14974,33 +15670,53 @@
               "application/json": {
                 "schema": {
                   "properties": {
-                    "message": {
-                      "type": "string"
+                    "result": {
+                      "$ref": "#/components/schemas/ChartGetResponseSchema"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "message": "string"
+                  "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 delete"
+            "description": "Chart"
+          },
+          "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"
           }
         },
         "security": [
@@ -15008,7 +15724,7 @@
             "jwt": []
           }
         ],
-        "summary": "Delete a chart",
+        "summary": "Get a chart detail information",
         "tags": [
           "Charts"
         ],
@@ -15016,22 +15732,23 @@
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X DELETE \"http://localhost:8088/api/v1/chart/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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.delete(\n    \"http://localhost:8088/api/v1/chart/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)"
+            "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/1\",\n  {\n    method: \"DELETE\",\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconsole.log(response.status);"
+            "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);"
           }
         ]
-      },
-      "get": {
-        "description": "Get an item model",
+      }
+    },
+    "/api/v1/chart/{pk}": {
+      "delete": {
         "parameters": [
           {
             "in": "path",
@@ -15040,17 +15757,6 @@
             "schema": {
               "type": "integer"
             }
-          },
-          {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/get_item_schema"
-                }
-              }
-            },
-            "in": "query",
-            "name": "q"
           }
         ],
         "responses": {
@@ -15059,86 +15765,25 @@
               "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/ChartRestApi.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",
+                    "message": {
                       "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": {
-                    "cache_timeout": 1,
-                    "certification_details": "string",
-                    "certified_by": "string",
-                    "changed_on_delta_humanized": {},
-                    "description": "string",
-                    "id": 1,
-                    "is_managed_externally": true,
-                    "params": "string",
-                    "query_context": "string",
-                    "slice_name": "string",
-                    "thumbnail_url": {},
-                    "url": {},
-                    "viz_type": "string"
-                  },
-                  "show_columns": [
-                    "string"
-                  ],
-                  "show_title": "Show Item Details"
+                  "message": "string"
                 }
               }
             },
-            "description": "Item from Model"
-          },
-          "400": {
-            "$ref": "#/components/responses/400"
+            "description": "Chart delete"
           },
           "401": {
             "$ref": "#/components/responses/401"
           },
+          "403": {
+            "$ref": "#/components/responses/403"
+          },
           "404": {
             "$ref": "#/components/responses/404"
           },
@@ -15154,7 +15799,7 @@
             "jwt": []
           }
         ],
-        "summary": "Get a chart detail information",
+        "summary": "Delete a chart",
         "tags": [
           "Charts"
         ],
@@ -15162,17 +15807,17 @@
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X GET \"http://localhost:8088/api/v1/chart/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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.get(\n    \"http://localhost:8088/api/v1/chart/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
       },
@@ -15215,6 +15860,7 @@
                 "tags": [
                   1
                 ],
+                "uuid": "550e8400-e29b-41d4-a716-446655440000",
                 "viz_type": [
                   "bar",
                   "area",
@@ -15259,6 +15905,7 @@
                     "query_context_generation": true,
                     "slice_name": "string",
                     "tags": [],
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000",
                     "viz_type": [
                       "bar",
                       "area",
@@ -16705,59 +17352,17 @@
                 "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"
+                      "type": "integer"
                     },
                     "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": "integer"
                       },
                       "type": "array"
                     },
                     "result": {
-                      "description": "The result from the get list query",
                       "items": {
-                        "$ref": "#/components/schemas/DashboardRestApi.get_list"
+                        "type": "object"
                       },
                       "type": "array"
                     }
@@ -16765,22 +17370,9 @@
                   "type": "object"
                 },
                 "example": {
-                  "count": 1.0,
-                  "description_columns": {
-                    "column_name": "A Nice description for the column"
-                  },
+                  "count": 1,
                   "ids": [
-                    "string"
-                  ],
-                  "label_columns": {
-                    "column_name": "A Nice label for the column"
-                  },
-                  "list_columns": [
-                    "string"
-                  ],
-                  "list_title": "List Items",
-                  "order_columns": [
-                    "string"
+                    1
                   ],
                   "result": [
                     {}
@@ -16788,7 +17380,7 @@
                 }
               }
             },
-            "description": "Items from Model"
+            "description": "Dashboards"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -16853,7 +17445,9 @@
                 "roles": [
                   1
                 ],
-                "slug": "string"
+                "slug": "string",
+                "theme_id": 1,
+                "uuid": "550e8400-e29b-41d4-a716-446655440000"
               }
             }
           },
@@ -16889,7 +17483,9 @@
                     "position_json": "string",
                     "published": true,
                     "roles": [],
-                    "slug": "string"
+                    "slug": "string",
+                    "theme_id": 1,
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000"
                   }
                 }
               }
@@ -17483,6 +18079,7 @@
                     "charts": [],
                     "created_on_delta_humanized": "string",
                     "css": "string",
+                    "custom_tags": [],
                     "dashboard_title": "string",
                     "id": 1,
                     "is_managed_externally": true,
@@ -17493,8 +18090,10 @@
                     "roles": [],
                     "slug": "string",
                     "tags": [],
+                    "theme": {},
                     "thumbnail_url": "string",
-                    "url": "string"
+                    "url": "string",
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000"
                   }
                 }
               }
@@ -18292,7 +18891,9 @@
                 "slug": "string",
                 "tags": [
                   1
-                ]
+                ],
+                "theme_id": 1,
+                "uuid": "550e8400-e29b-41d4-a716-446655440000"
               }
             }
           },
@@ -18333,7 +18934,9 @@
                     "published": true,
                     "roles": [],
                     "slug": "string",
-                    "tags": []
+                    "tags": [],
+                    "theme_id": 1,
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000"
                   }
                 }
               }
@@ -18406,18 +19009,12 @@
                 "$ref": "#/components/schemas/DashboardScreenshotPostSchema"
               },
               "example": {
-                "dataMask": {
-                  "key": "value"
-                },
                 "activeTabs": [
                   "string"
                 ],
                 "anchor": "string",
-                "urlParams": [
-                  [
-                    "string"
-                  ]
-                ]
+                "dataMask": {},
+                "urlParams": []
               }
             }
           }
@@ -18481,6 +19078,95 @@
         ]
       }
     },
+    "/api/v1/dashboard/{pk}/chart_customizations": {
+      "put": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/DashboardChartCustomizationsConfigUpdateSchema"
+              }
+            }
+          },
+          "description": "Chart customizations configuration",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": []
+                }
+              }
+            },
+            "description": "Dashboard chart customizations updated"
+          },
+          "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"
+          }
+        },
+        "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/v1/dashboard/{pk}/colors": {
       "put": {
         "parameters": [
@@ -18594,6 +19280,90 @@
         ]
       }
     },
+    "/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": "The dashboard id",
+            "in": "path",
+            "name": "pk",
+            "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"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/zip": {
+                "schema": {
+                  "format": "binary",
+                  "type": "string"
+                }
+              }
+            },
+            "description": "Example bundle ZIP file"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "403": {
+            "$ref": "#/components/responses/403"
+          },
+          "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/v1/dashboard/{pk}/favorites/": {
       "delete": {
         "parameters": [
@@ -19422,6 +20192,7 @@
                   "string"
                 ],
                 "anchor": "string",
+                "chartStates": {},
                 "dataMask": {},
                 "urlParams": [
                   {}
@@ -21652,81 +22423,6 @@
         ]
       }
     },
-    "/api/v1/database/{pk}/ssh_tunnel/": {
-      "delete": {
-        "parameters": [
-          {
-            "in": "path",
-            "name": "pk",
-            "required": true,
-            "schema": {
-              "type": "integer"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "message": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "message": "string"
-                }
-              }
-            },
-            "description": "SSH Tunnel 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 SSH tunnel",
-        "tags": [
-          "Database"
-        ],
-        "x-codeSamples": [
-          {
-            "lang": "cURL",
-            "label": "cURL",
-            "source": "curl -X DELETE \"http://localhost:8088/api/v1/database/1/ssh_tunnel/\" \\\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/ssh_tunnel/\",\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/ssh_tunnel/\",\n  {\n    method: \"DELETE\",\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconsole.log(response.status);"
-          }
-        ]
-      }
-    },
     "/api/v1/database/{pk}/sync_permissions/": {
       "post": {
         "parameters": [
@@ -22696,7 +23392,9 @@
                 ],
                 "schema": "string",
                 "sql": "string",
-                "table_name": "string"
+                "table_name": "string",
+                "template_params": "string",
+                "uuid": "550e8400-e29b-41d4-a716-446655440000"
               }
             }
           },
@@ -22730,7 +23428,9 @@
                     "owners": [],
                     "schema": "string",
                     "sql": "string",
-                    "table_name": "string"
+                    "table_name": "string",
+                    "template_params": "string",
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000"
                   }
                 }
               }
@@ -23476,90 +24176,17 @@
         ]
       }
     },
-    "/api/v1/dataset/{pk}": {
-      "delete": {
-        "parameters": [
-          {
-            "in": "path",
-            "name": "pk",
-            "required": true,
-            "schema": {
-              "type": "integer"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "message": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "message": "string"
-                }
-              }
-            },
-            "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": []
-          }
-        ],
-        "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/v1/dataset/{id_or_uuid}": {
       "get": {
         "description": "Get a dataset by ID",
         "parameters": [
           {
-            "description": "The dataset ID",
+            "description": "Either the id of the dataset, or its uuid",
             "in": "path",
-            "name": "pk",
+            "name": "id_or_uuid",
             "required": true,
             "schema": {
-              "type": "integer"
+              "type": "string"
             }
           },
           {
@@ -23602,13 +24229,14 @@
                   "id": "string",
                   "result": {
                     "always_filter_main_dttm": true,
-                    "cache_timeout": 1,
+                    "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",
@@ -23635,6 +24263,7 @@
                     "time_grain_sqla": {},
                     "uid": {},
                     "url": {},
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000",
                     "verbose_map": {}
                   }
                 }
@@ -23668,17 +24297,157 @@
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/1\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/dataset/{id_or_uuid}/related_objects": {
+      "get": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "id_or_uuid",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/DatasetRelatedObjectsResponse"
+                },
+                "example": {
+                  "charts": {},
+                  "dashboards": {}
+                }
+              }
+            },
+            "description": "Query result"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "404": {
+            "$ref": "#/components/responses/404"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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/v1/dataset/{pk}": {
+      "delete": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "message": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "message": "string"
+                }
+              }
+            },
+            "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": []
+          }
+        ],
+        "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);"
           }
         ]
       },
@@ -23713,6 +24482,7 @@
                 "columns": [
                   {}
                 ],
+                "currency_code_column": "string",
                 "database_id": 1,
                 "default_endpoint": "string",
                 "description": "string",
@@ -23737,7 +24507,8 @@
                 "schema": "string",
                 "sql": "string",
                 "table_name": "string",
-                "template_params": "string"
+                "template_params": "string",
+                "uuid": "550e8400-e29b-41d4-a716-446655440000"
               }
             }
           },
@@ -23766,6 +24537,7 @@
                     "cache_timeout": 1,
                     "catalog": "string",
                     "columns": [],
+                    "currency_code_column": "string",
                     "database_id": 1,
                     "default_endpoint": "string",
                     "description": "string",
@@ -23784,7 +24556,8 @@
                     "schema": "string",
                     "sql": "string",
                     "table_name": "string",
-                    "template_params": "string"
+                    "template_params": "string",
+                    "uuid": "550e8400-e29b-41d4-a716-446655440000"
                   }
                 }
               }
@@ -23923,26 +24696,17 @@
         ]
       }
     },
-    "/api/v1/dataset/{pk}/metric/{metric_id}": {
-      "delete": {
+    "/api/v1/dataset/{pk}/drill_info/": {
+      "get": {
         "parameters": [
           {
-            "description": "The dataset pk for this column",
+            "description": "The dataset ID",
             "in": "path",
             "name": "pk",
             "required": true,
             "schema": {
               "type": "integer"
             }
-          },
-          {
-            "description": "The metric id for this dataset",
-            "in": "path",
-            "name": "metric_id",
-            "required": true,
-            "schema": {
-              "type": "integer"
-            }
           }
         ],
         "responses": {
@@ -23951,18 +24715,18 @@
               "application/json": {
                 "schema": {
                   "properties": {
-                    "message": {
-                      "type": "string"
+                    "result": {
+                      "type": "object"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "message": "string"
+                  "result": {}
                 }
               }
             },
-            "description": "Metric deleted"
+            "description": "Dataset drill info"
           },
           "401": {
             "$ref": "#/components/responses/401"
@@ -23985,7 +24749,7 @@
             "jwt": []
           }
         ],
-        "summary": "Delete a dataset metric",
+        "summary": "Get dataset drill info",
         "tags": [
           "Datasets"
         ],
@@ -23993,31 +24757,41 @@
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X DELETE \"http://localhost:8088/api/v1/dataset/1/metric/{metric_id}\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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.delete(\n    \"http://localhost:8088/api/v1/dataset/1/metric/{metric_id}\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)"
+            "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/metric/{metric_id}\",\n  {\n    method: \"DELETE\",\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconsole.log(response.status);"
+            "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/v1/dataset/{pk}/refresh": {
-      "put": {
+    "/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"
             }
+          },
+          {
+            "description": "The metric id for this dataset",
+            "in": "path",
+            "name": "metric_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
           }
         ],
         "responses": {
@@ -24037,7 +24811,7 @@
                 }
               }
             },
-            "description": "Dataset delete"
+            "description": "Metric deleted"
           },
           "401": {
             "$ref": "#/components/responses/401"
@@ -24060,7 +24834,7 @@
             "jwt": []
           }
         ],
-        "summary": "Refresh and update columns of a dataset",
+        "summary": "Delete a dataset metric",
         "tags": [
           "Datasets"
         ],
@@ -24068,23 +24842,23 @@
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X PUT \"http://localhost:8088/api/v1/dataset/1/refresh\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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.put(\n    \"http://localhost:8088/api/v1/dataset/1/refresh\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/dataset/{pk}/related_objects": {
-      "get": {
+    "/api/v1/dataset/{pk}/refresh": {
+      "put": {
         "parameters": [
           {
             "in": "path",
@@ -24100,22 +24874,32 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/DatasetRelatedObjectsResponse"
+                  "properties": {
+                    "message": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
                 },
                 "example": {
-                  "charts": {},
-                  "dashboards": {}
+                  "message": "string"
                 }
               }
             },
-            "description": "Query result"
+            "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"
           }
@@ -24125,7 +24909,7 @@
             "jwt": []
           }
         ],
-        "summary": "Get charts and dashboards count associated to a dataset",
+        "summary": "Refresh and update columns of a dataset",
         "tags": [
           "Datasets"
         ],
@@ -24133,17 +24917,17 @@
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X GET \"http://localhost:8088/api/v1/dataset/1/related_objects\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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.get(\n    \"http://localhost:8088/api/v1/dataset/1/related_objects\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/related_objects\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
       }
@@ -24263,6 +25047,159 @@
         ]
       }
     },
+    "/api/v1/datasource/{datasource_type}/{datasource_id}/validate_expression/": {
+      "post": {
+        "parameters": [
+          {
+            "description": "The type of datasource",
+            "in": "path",
+            "name": "datasource_type",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "description": "The id of the datasource",
+            "in": "path",
+            "name": "datasource_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "properties": {
+                  "clause": {
+                    "description": "SQL clause type for filter expressions",
+                    "enum": [
+                      "WHERE",
+                      "HAVING"
+                    ],
+                    "type": "string"
+                  },
+                  "expression": {
+                    "description": "The SQL expression to validate",
+                    "type": "string"
+                  },
+                  "expression_type": {
+                    "default": "where",
+                    "description": "The type of SQL expression",
+                    "enum": [
+                      "column",
+                      "metric",
+                      "where",
+                      "having"
+                    ],
+                    "type": "string"
+                  }
+                },
+                "required": [
+                  "expression"
+                ],
+                "type": "object"
+              },
+              "example": {
+                "clause": "WHERE",
+                "expression": "string",
+                "expression_type": "column"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "description": "Empty array for success, errors for failure",
+                      "items": {
+                        "properties": {
+                          "end_column": {
+                            "type": "integer"
+                          },
+                          "line_number": {
+                            "type": "integer"
+                          },
+                          "message": {
+                            "type": "string"
+                          },
+                          "start_column": {
+                            "type": "integer"
+                          }
+                        },
+                        "type": "object"
+                      },
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": [
+                    {
+                      "end_column": 1,
+                      "line_number": 1,
+                      "message": "string",
+                      "start_column": 1
+                    }
+                  ]
+                }
+              }
+            },
+            "description": "Validation result"
+          },
+          "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": "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/v1/embedded_dashboard/{uuid}": {
       "get": {
         "parameters": [
@@ -25377,7 +26314,7 @@
                     "json": "string",
                     "referrer": "string",
                     "slice_id": 1,
-                    "user_id": 1
+                    "user_id": {}
                   },
                   "show_columns": [
                     "string"
@@ -25455,6 +26392,7 @@
                     "is_active": true,
                     "is_anonymous": true,
                     "last_name": "string",
+                    "login_count": 1,
                     "username": "string"
                   }
                 }
@@ -25466,6 +26404,11 @@
             "$ref": "#/components/responses/401"
           }
         },
+        "security": [
+          {
+            "jwt": []
+          }
+        ],
         "summary": "Get the user object",
         "tags": [
           "Current User"
@@ -25487,6 +26430,85 @@
             "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);"
           }
         ]
+      },
+      "put": {
+        "description": "Updates the current user's first name, last name, or password.",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CurrentUserPutSchema"
+              },
+              "example": {
+                "first_name": "string",
+                "last_name": "string",
+                "password": "string"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "$ref": "#/components/schemas/UserResponseSchema"
+                    }
+                  },
+                  "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"
+                  }
+                }
+              }
+            },
+            "description": "User updated successfully"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          }
+        },
+        "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/v1/me/roles/": {
@@ -25512,6 +26534,7 @@
                     "is_active": true,
                     "is_anonymous": true,
                     "last_name": "string",
+                    "login_count": 1,
                     "username": "string"
                   }
                 }
@@ -25523,6 +26546,11 @@
             "$ref": "#/components/responses/401"
           }
         },
+        "security": [
+          {
+            "jwt": []
+          }
+        ],
         "summary": "Get the user roles",
         "tags": [
           "Current User"
@@ -28582,7 +29610,7 @@
               },
               "example": {
                 "catalog": "string",
-                "db_id": 1,
+                "db_id": {},
                 "description": "string",
                 "extra_json": "string",
                 "label": "string",
@@ -28614,7 +29642,7 @@
                   "id": "string",
                   "result": {
                     "catalog": "string",
-                    "db_id": 1,
+                    "db_id": {},
                     "description": "string",
                     "extra_json": "string",
                     "label": "string",
@@ -29339,7 +30367,7 @@
               },
               "example": {
                 "catalog": "string",
-                "db_id": 1,
+                "db_id": {},
                 "description": "string",
                 "extra_json": "string",
                 "label": "string",
@@ -29367,7 +30395,7 @@
                 "example": {
                   "result": {
                     "catalog": "string",
-                    "db_id": 1,
+                    "db_id": {},
                     "description": "string",
                     "extra_json": "string",
                     "label": "string",
@@ -29480,192 +30508,7 @@
         ]
       }
     },
-    "/api/v1/security/guest_token/": {
-      "post": {
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/GuestTokenCreate"
-              },
-              "example": {
-                "resources": [
-                  {}
-                ],
-                "rls": [
-                  {}
-                ],
-                "user": {
-                  "first_name": "string",
-                  "last_name": "string",
-                  "username": "string"
-                }
-              }
-            }
-          },
-          "description": "Parameters for the guest token",
-          "required": true
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "token": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "token": "string"
-                }
-              }
-            },
-            "description": "Result contains the guest token"
-          },
-          "400": {
-            "$ref": "#/components/responses/400"
-          },
-          "401": {
-            "$ref": "#/components/responses/401"
-          },
-          "500": {
-            "$ref": "#/components/responses/500"
-          }
-        },
-        "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/v1/security/login": {
-      "post": {
-        "description": "Authenticate and get a JWT access and refresh token",
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "properties": {
-                  "password": {
-                    "description": "The password for authentication",
-                    "example": "complex-password",
-                    "type": "string"
-                  },
-                  "provider": {
-                    "description": "Choose an authentication provider",
-                    "enum": [
-                      "db",
-                      "ldap"
-                    ],
-                    "example": "db",
-                    "type": "string"
-                  },
-                  "refresh": {
-                    "description": "If true a refresh token is provided also",
-                    "example": true,
-                    "type": "boolean"
-                  },
-                  "username": {
-                    "description": "The username for authentication",
-                    "example": "admin",
-                    "type": "string"
-                  }
-                },
-                "type": "object"
-              },
-              "example": {
-                "password": "complex-password",
-                "provider": "db",
-                "refresh": true,
-                "username": "admin"
-              }
-            }
-          },
-          "required": true
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "access_token": {
-                      "type": "string"
-                    },
-                    "refresh_token": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "access_token": "string",
-                  "refresh_token": "string"
-                }
-              }
-            },
-            "description": "Authentication Successful"
-          },
-          "400": {
-            "$ref": "#/components/responses/400"
-          },
-          "401": {
-            "$ref": "#/components/responses/401"
-          },
-          "500": {
-            "$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);"
-          }
-        ]
-      }
-    },
-    "/api/v1/security/permissions-resources/": {
+    "/api/v1/security/groups/": {
       "get": {
         "description": "Get a list of models",
         "parameters": [
@@ -29740,7 +30583,7 @@
                     "result": {
                       "description": "The result from the get list query",
                       "items": {
-                        "$ref": "#/components/schemas/PermissionViewMenuApi.get_list"
+                        "$ref": "#/components/schemas/GroupApi.get_list"
                       },
                       "type": "array"
                     }
@@ -29792,25 +30635,25 @@
           }
         ],
         "tags": [
-          "Security Permissions on Resources (View Menus)"
+          "Security Groups"
         ],
-        "operationId": "get_security_permissions_resources",
-        "summary": "Get security permissions resources",
+        "operationId": "get_security_groups",
+        "summary": "Get security groups",
         "x-codeSamples": [
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X GET \"http://localhost:8088/api/v1/security/permissions-resources/\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/permissions-resources/\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/permissions-resources/\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
       },
@@ -29819,11 +30662,18 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/PermissionViewMenuApi.post"
+                "$ref": "#/components/schemas/GroupPostSchema"
               },
               "example": {
-                "permission_id": 1,
-                "view_menu_id": 1
+                "description": "string",
+                "label": "string",
+                "name": "string",
+                "roles": [
+                  1
+                ],
+                "users": [
+                  1
+                ]
               }
             }
           },
@@ -29836,25 +30686,24 @@
               "application/json": {
                 "schema": {
                   "properties": {
-                    "id": {
-                      "type": "string"
-                    },
                     "result": {
-                      "$ref": "#/components/schemas/PermissionViewMenuApi.post"
+                      "$ref": "#/components/schemas/GroupPostSchema"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "id": "string",
                   "result": {
-                    "permission_id": 1,
-                    "view_menu_id": 1
+                    "description": "string",
+                    "label": "string",
+                    "name": "string",
+                    "roles": [],
+                    "users": []
                   }
                 }
               }
             },
-            "description": "Item inserted"
+            "description": "Group created"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -29875,30 +30724,30 @@
           }
         ],
         "tags": [
-          "Security Permissions on Resources (View Menus)"
+          "Security Groups"
         ],
-        "operationId": "create_security_permissions_resources",
-        "summary": "Create security permissions resources",
+        "operationId": "create_security_groups",
+        "summary": "Create security groups",
         "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\"}'"
+            "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/permissions-resources/\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/security/permissions-resources/_info": {
+    "/api/v1/security/groups/_info": {
       "get": {
         "description": "Get metadata information about this API resource",
         "parameters": [
@@ -29992,30 +30841,30 @@
           }
         ],
         "tags": [
-          "Security Permissions on Resources (View Menus)"
+          "Security Groups"
         ],
-        "operationId": "get_security_permissions_resources__info",
-        "summary": "Get security permissions resources  info",
+        "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/permissions-resources/_info\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/permissions-resources/_info\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/permissions-resources/_info\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/security/permissions-resources/{pk}": {
+    "/api/v1/security/groups/{pk}": {
       "delete": {
         "parameters": [
           {
@@ -30062,25 +30911,25 @@
           }
         ],
         "tags": [
-          "Security Permissions on Resources (View Menus)"
+          "Security Groups"
         ],
-        "operationId": "delete_security_permissions_resources_by_pk",
-        "summary": "Delete security permissions resources by pk",
+        "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/permissions-resources/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/permissions-resources/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)"
+            "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)"
           },
           {
             "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);"
+            "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);"
           }
         ]
       },
@@ -30138,7 +30987,7 @@
                       "type": "object"
                     },
                     "result": {
-                      "$ref": "#/components/schemas/PermissionViewMenuApi.get"
+                      "$ref": "#/components/schemas/GroupApi.get"
                     },
                     "show_columns": {
                       "description": "A list of columns",
@@ -30164,7 +31013,10 @@
                     "column_name": "A Nice label for the column"
                   },
                   "result": {
-                    "id": 1
+                    "description": "string",
+                    "id": 1,
+                    "label": "string",
+                    "name": "string"
                   },
                   "show_columns": [
                     "string"
@@ -30197,25 +31049,25 @@
           }
         ],
         "tags": [
-          "Security Permissions on Resources (View Menus)"
+          "Security Groups"
         ],
-        "operationId": "get_security_permissions_resources_by_pk",
-        "summary": "Get security permissions resources by pk",
+        "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/permissions-resources/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/permissions-resources/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/permissions-resources/1\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
       },
@@ -30234,11 +31086,18 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/PermissionViewMenuApi.put"
+                "$ref": "#/components/schemas/GroupPutSchema"
               },
               "example": {
-                "permission_id": 1,
-                "view_menu_id": 1
+                "description": "string",
+                "label": "string",
+                "name": "string",
+                "roles": [
+                  1
+                ],
+                "users": [
+                  1
+                ]
               }
             }
           },
@@ -30252,20 +31111,23 @@
                 "schema": {
                   "properties": {
                     "result": {
-                      "$ref": "#/components/schemas/PermissionViewMenuApi.put"
+                      "$ref": "#/components/schemas/GroupPutSchema"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
                   "result": {
-                    "permission_id": 1,
-                    "view_menu_id": 1
+                    "description": "string",
+                    "label": "string",
+                    "name": "string",
+                    "roles": [],
+                    "users": []
                   }
                 }
               }
             },
-            "description": "Item changed"
+            "description": "Group updated"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -30289,30 +31151,215 @@
           }
         ],
         "tags": [
-          "Security Permissions on Resources (View Menus)"
+          "Security Groups"
         ],
-        "operationId": "update_security_permissions_resources_by_pk",
-        "summary": "Update security permissions resources by pk",
+        "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/permissions-resources/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\": \"value\"}'"
+            "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/permissions-resources/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/security/permissions/": {
+    "/api/v1/security/guest_token/": {
+      "post": {
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/GuestTokenCreate"
+              },
+              "example": {
+                "resources": [
+                  {}
+                ],
+                "rls": [
+                  {}
+                ],
+                "user": {
+                  "first_name": "string",
+                  "last_name": "string",
+                  "username": "string"
+                }
+              }
+            }
+          },
+          "description": "Parameters for the guest token",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "token": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "token": "string"
+                }
+              }
+            },
+            "description": "Result contains the guest token"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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/v1/security/login": {
+      "post": {
+        "description": "Authenticate and get a JWT access and refresh token",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "properties": {
+                  "password": {
+                    "description": "The password for authentication",
+                    "example": "complex-password",
+                    "type": "string"
+                  },
+                  "provider": {
+                    "description": "Choose an authentication provider",
+                    "enum": [
+                      "db",
+                      "ldap"
+                    ],
+                    "example": "db",
+                    "type": "string"
+                  },
+                  "refresh": {
+                    "description": "If true a refresh token is provided also",
+                    "example": true,
+                    "type": "boolean"
+                  },
+                  "username": {
+                    "description": "The username for authentication",
+                    "example": "admin",
+                    "type": "string"
+                  }
+                },
+                "type": "object"
+              },
+              "example": {
+                "password": "complex-password",
+                "provider": "db",
+                "refresh": true,
+                "username": "admin"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "access_token": {
+                      "type": "string"
+                    },
+                    "refresh_token": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "access_token": "string",
+                  "refresh_token": "string"
+                }
+              }
+            },
+            "description": "Authentication Successful"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "500": {
+            "$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);"
+          }
+        ]
+      }
+    },
+    "/api/v1/security/permissions-resources/": {
       "get": {
         "description": "Get a list of models",
         "parameters": [
@@ -30387,7 +31434,7 @@
                     "result": {
                       "description": "The result from the get list query",
                       "items": {
-                        "$ref": "#/components/schemas/PermissionApi.get_list"
+                        "$ref": "#/components/schemas/PermissionViewMenuApi.get_list"
                       },
                       "type": "array"
                     }
@@ -30439,30 +31486,113 @@
           }
         ],
         "tags": [
-          "Security Permissions"
+          "Security Permissions on Resources (View Menus)"
         ],
-        "operationId": "get_security_permissions",
-        "summary": "Get security permissions",
+        "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/\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
+          }
+        ]
+      },
+      "post": {
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/PermissionViewMenuApi.post"
+              },
+              "example": {
+                "permission_id": {},
+                "view_menu_id": {}
+              }
+            }
+          },
+          "description": "Model schema",
+          "required": true
+        },
+        "responses": {
+          "201": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "id": {
+                      "type": "string"
+                    },
+                    "result": {
+                      "$ref": "#/components/schemas/PermissionViewMenuApi.post"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "id": "string",
+                  "result": {
+                    "permission_id": {},
+                    "view_menu_id": {}
+                  }
+                }
+              }
+            },
+            "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": []
+          }
+        ],
+        "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/v1/security/permissions/_info": {
+    "/api/v1/security/permissions-resources/_info": {
       "get": {
         "description": "Get metadata information about this API resource",
         "parameters": [
@@ -30556,30 +31686,98 @@
           }
         ],
         "tags": [
-          "Security Permissions"
+          "Security Permissions on Resources (View Menus)"
         ],
-        "operationId": "get_security_permissions__info",
-        "summary": "Get security permissions  info",
+        "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/_info\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/_info\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/_info\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/security/permissions/{pk}": {
+    "/api/v1/security/permissions-resources/{pk}": {
+      "delete": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "message": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "message": "string"
+                }
+              }
+            },
+            "description": "Item deleted"
+          },
+          "404": {
+            "$ref": "#/components/responses/404"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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);"
+          }
+        ]
+      },
       "get": {
         "description": "Get an item model",
         "parameters": [
@@ -30634,7 +31832,7 @@
                       "type": "object"
                     },
                     "result": {
-                      "$ref": "#/components/schemas/PermissionApi.get"
+                      "$ref": "#/components/schemas/PermissionViewMenuApi.get"
                     },
                     "show_columns": {
                       "description": "A list of columns",
@@ -30660,8 +31858,7 @@
                     "column_name": "A Nice label for the column"
                   },
                   "result": {
-                    "id": 1,
-                    "name": "string"
+                    "id": 1
                   },
                   "show_columns": [
                     "string"
@@ -30694,89 +31891,122 @@
           }
         ],
         "tags": [
-          "Security Permissions"
+          "Security Permissions on Resources (View Menus)"
         ],
-        "operationId": "get_security_permissions_by_pk",
-        "summary": "Get security permissions by pk",
+        "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/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/1\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/security/refresh": {
-      "post": {
-        "description": "Use the refresh token to get a new JWT access token",
+      },
+      "put": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/PermissionViewMenuApi.put"
+              },
+              "example": {
+                "permission_id": {},
+                "view_menu_id": {}
+              }
+            }
+          },
+          "description": "Model schema",
+          "required": true
+        },
         "responses": {
           "200": {
             "content": {
               "application/json": {
                 "schema": {
                   "properties": {
-                    "access_token": {
-                      "description": "A new refreshed access token",
-                      "type": "string"
+                    "result": {
+                      "$ref": "#/components/schemas/PermissionViewMenuApi.put"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "access_token": "string"
+                  "result": {
+                    "permission_id": {},
+                    "view_menu_id": {}
+                  }
                 }
               }
             },
-            "description": "Refresh Successful"
+            "description": "Item changed"
+          },
+          "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_refresh": []
+            "jwt": []
           }
         ],
         "tags": [
-          "Security"
+          "Security Permissions on Resources (View Menus)"
         ],
-        "operationId": "create_security_refresh",
-        "summary": "Create security refresh",
+        "operationId": "update_security_permissions_resources_by_pk",
+        "summary": "Update security permissions resources by pk",
         "x-codeSamples": [
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X POST \"http://localhost:8088/api/v1/security/refresh\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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.post(\n    \"http://localhost:8088/api/v1/security/refresh\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/security/resources/": {
+    "/api/v1/security/permissions/": {
       "get": {
         "description": "Get a list of models",
         "parameters": [
@@ -30851,7 +32081,7 @@
                     "result": {
                       "description": "The result from the get list query",
                       "items": {
-                        "$ref": "#/components/schemas/ViewMenuApi.get_list"
+                        "$ref": "#/components/schemas/PermissionApi.get_list"
                       },
                       "type": "array"
                     }
@@ -30903,111 +32133,30 @@
           }
         ],
         "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);"
-          }
-        ]
-      },
-      "post": {
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/ViewMenuApi.post"
-              },
-              "example": {
-                "name": "string"
-              }
-            }
-          },
-          "description": "Model schema",
-          "required": true
-        },
-        "responses": {
-          "201": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "id": {
-                      "type": "string"
-                    },
-                    "result": {
-                      "$ref": "#/components/schemas/ViewMenuApi.post"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "id": "string",
-                  "result": {
-                    "name": "string"
-                  }
-                }
-              }
-            },
-            "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": []
-          }
-        ],
-        "tags": [
-          "Security Resources (View Menus)"
+          "Security Permissions"
         ],
-        "operationId": "create_security_resources",
-        "summary": "Create security resources",
+        "operationId": "get_security_permissions",
+        "summary": "Get security permissions",
         "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\"}'"
+            "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.post(\n    \"http://localhost:8088/api/v1/security/resources/\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/security/resources/_info": {
+    "/api/v1/security/permissions/_info": {
       "get": {
         "description": "Get metadata information about this API resource",
         "parameters": [
@@ -31101,98 +32250,30 @@
           }
         ],
         "tags": [
-          "Security Resources (View Menus)"
+          "Security Permissions"
         ],
-        "operationId": "get_security_resources__info",
-        "summary": "Get security resources  info",
+        "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/resources/_info\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/resources/_info\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/resources/_info\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/security/resources/{pk}": {
-      "delete": {
-        "parameters": [
-          {
-            "in": "path",
-            "name": "pk",
-            "required": true,
-            "schema": {
-              "type": "integer"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "message": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "message": "string"
-                }
-              }
-            },
-            "description": "Item deleted"
-          },
-          "404": {
-            "$ref": "#/components/responses/404"
-          },
-          "422": {
-            "$ref": "#/components/responses/422"
-          },
-          "500": {
-            "$ref": "#/components/responses/500"
-          }
-        },
-        "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/v1/security/permissions/{pk}": {
       "get": {
         "description": "Get an item model",
         "parameters": [
@@ -31247,7 +32328,7 @@
                       "type": "object"
                     },
                     "result": {
-                      "$ref": "#/components/schemas/ViewMenuApi.get"
+                      "$ref": "#/components/schemas/PermissionApi.get"
                     },
                     "show_columns": {
                       "description": "A list of columns",
@@ -31307,120 +32388,89 @@
           }
         ],
         "tags": [
-          "Security Resources (View Menus)"
+          "Security Permissions"
         ],
-        "operationId": "get_security_resources_by_pk",
-        "summary": "Get security resources by pk",
+        "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/resources/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/resources/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/resources/1\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
-      },
-      "put": {
-        "parameters": [
-          {
-            "in": "path",
-            "name": "pk",
-            "required": true,
-            "schema": {
-              "type": "integer"
-            }
-          }
-        ],
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/ViewMenuApi.put"
-              },
-              "example": {
-                "name": "string"
-              }
-            }
-          },
-          "description": "Model schema",
-          "required": true
-        },
+      }
+    },
+    "/api/v1/security/refresh": {
+      "post": {
+        "description": "Use the refresh token to get a new JWT access token",
         "responses": {
           "200": {
             "content": {
               "application/json": {
                 "schema": {
                   "properties": {
-                    "result": {
-                      "$ref": "#/components/schemas/ViewMenuApi.put"
+                    "access_token": {
+                      "description": "A new refreshed access token",
+                      "type": "string"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "result": {
-                    "name": "string"
-                  }
+                  "access_token": "string"
                 }
               }
             },
-            "description": "Item changed"
-          },
-          "400": {
-            "$ref": "#/components/responses/400"
+            "description": "Refresh Successful"
           },
           "401": {
             "$ref": "#/components/responses/401"
           },
-          "404": {
-            "$ref": "#/components/responses/404"
-          },
-          "422": {
-            "$ref": "#/components/responses/422"
-          },
           "500": {
             "$ref": "#/components/responses/500"
           }
         },
         "security": [
           {
-            "jwt": []
+            "jwt_refresh": []
           }
         ],
         "tags": [
-          "Security Resources (View Menus)"
+          "Security"
         ],
-        "operationId": "update_security_resources_by_pk",
-        "summary": "Update security resources by pk",
+        "operationId": "create_security_refresh",
+        "summary": "Create security refresh",
         "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\"}'"
+            "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.put(\n    \"http://localhost:8088/api/v1/security/resources/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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);"
           }
         ]
       }
     },
-    "/api/v1/security/roles/": {
+    "/api/v1/security/resources/": {
       "get": {
         "description": "Get a list of models",
         "parameters": [
@@ -31495,7 +32545,7 @@
                     "result": {
                       "description": "The result from the get list query",
                       "items": {
-                        "$ref": "#/components/schemas/SupersetRoleApi.get_list"
+                        "$ref": "#/components/schemas/ViewMenuApi.get_list"
                       },
                       "type": "array"
                     }
@@ -31547,25 +32597,25 @@
           }
         ],
         "tags": [
-          "Security Roles"
+          "Security Resources (View Menus)"
         ],
-        "operationId": "get_security_roles",
-        "summary": "Get security roles",
+        "operationId": "get_security_resources",
+        "summary": "Get security resources",
         "x-codeSamples": [
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X GET \"http://localhost:8088/api/v1/security/roles/\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/roles/\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/roles/\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
       },
@@ -31574,7 +32624,7 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/SupersetRoleApi.post"
+                "$ref": "#/components/schemas/ViewMenuApi.post"
               },
               "example": {
                 "name": "string"
@@ -31594,7 +32644,7 @@
                       "type": "string"
                     },
                     "result": {
-                      "$ref": "#/components/schemas/SupersetRoleApi.post"
+                      "$ref": "#/components/schemas/ViewMenuApi.post"
                     }
                   },
                   "type": "object"
@@ -31628,30 +32678,30 @@
           }
         ],
         "tags": [
-          "Security Roles"
+          "Security Resources (View Menus)"
         ],
-        "operationId": "create_security_roles",
-        "summary": "Create security roles",
+        "operationId": "create_security_resources",
+        "summary": "Create security resources",
         "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\"}'"
+            "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/roles/\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/security/roles/_info": {
+    "/api/v1/security/resources/_info": {
       "get": {
         "description": "Get metadata information about this API resource",
         "parameters": [
@@ -31745,170 +32795,30 @@
           }
         ],
         "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/v1/security/roles/search/": {
-      "get": {
-        "description": "Fetch a paginated list of roles with user and permission IDs.",
-        "parameters": [
-          {
-            "in": "query",
-            "name": "q",
-            "schema": {
-              "properties": {
-                "filters": {
-                  "items": {
-                    "properties": {
-                      "col": {
-                        "enum": [
-                          "user_ids",
-                          "permission_ids",
-                          "name"
-                        ],
-                        "type": "string"
-                      },
-                      "value": {
-                        "type": "string"
-                      }
-                    },
-                    "type": "object"
-                  },
-                  "type": "array"
-                },
-                "order_column": {
-                  "default": "id",
-                  "enum": [
-                    "id",
-                    "name"
-                  ],
-                  "type": "string"
-                },
-                "order_direction": {
-                  "default": "asc",
-                  "enum": [
-                    "asc",
-                    "desc"
-                  ],
-                  "type": "string"
-                },
-                "page": {
-                  "default": 0,
-                  "type": "integer"
-                },
-                "page_size": {
-                  "default": 10,
-                  "type": "integer"
-                }
-              },
-              "type": "object"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/RolesResponseSchema"
-                },
-                "example": {
-                  "count": 1,
-                  "ids": [
-                    1
-                  ],
-                  "result": []
-                }
-              }
-            },
-            "description": "Successfully retrieved roles"
-          },
-          "400": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "error": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "error": "string"
-                }
-              }
-            },
-            "description": "Bad request (invalid input)"
-          },
-          "403": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "error": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                },
-                "example": {
-                  "error": "string"
-                }
-              }
-            },
-            "description": "Forbidden"
-          }
-        },
-        "security": [
-          {
-            "jwt": []
-          }
-        ],
-        "summary": "List roles",
-        "tags": [
-          "Security Roles"
+          "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/roles/search/\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/roles/search/\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/roles/search/\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/security/roles/{pk}": {
+    "/api/v1/security/resources/{pk}": {
       "delete": {
         "parameters": [
           {
@@ -31955,25 +32865,25 @@
           }
         ],
         "tags": [
-          "Security Roles"
+          "Security Resources (View Menus)"
         ],
-        "operationId": "delete_security_roles_by_pk",
-        "summary": "Delete security roles by pk",
+        "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/roles/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/roles/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)"
+            "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/roles/1\",\n  {\n    method: \"DELETE\",\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconsole.log(response.status);"
+            "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);"
           }
         ]
       },
@@ -32031,7 +32941,7 @@
                       "type": "object"
                     },
                     "result": {
-                      "$ref": "#/components/schemas/SupersetRoleApi.get"
+                      "$ref": "#/components/schemas/ViewMenuApi.get"
                     },
                     "show_columns": {
                       "description": "A list of columns",
@@ -32091,25 +33001,25 @@
           }
         ],
         "tags": [
-          "Security Roles"
+          "Security Resources (View Menus)"
         ],
-        "operationId": "get_security_roles_by_pk",
-        "summary": "Get security roles by pk",
+        "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/roles/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/roles/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/roles/1\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
       },
@@ -32128,7 +33038,7 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/SupersetRoleApi.put"
+                "$ref": "#/components/schemas/ViewMenuApi.put"
               },
               "example": {
                 "name": "string"
@@ -32145,7 +33055,7 @@
                 "schema": {
                   "properties": {
                     "result": {
-                      "$ref": "#/components/schemas/SupersetRoleApi.put"
+                      "$ref": "#/components/schemas/ViewMenuApi.put"
                     }
                   },
                   "type": "object"
@@ -32181,77 +33091,217 @@
           }
         ],
         "tags": [
-          "Security Roles"
+          "Security Resources (View Menus)"
         ],
-        "operationId": "update_security_roles_by_pk",
-        "summary": "Update security roles by pk",
+        "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/roles/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\": \"value\"}'"
+            "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/roles/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/security/roles/{role_id}/permissions": {
-      "post": {
+    "/api/v1/security/roles/": {
+      "get": {
+        "description": "Get a list of models",
         "parameters": [
           {
-            "in": "path",
-            "name": "role_id",
-            "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"
+                    },
+                    "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/SupersetRoleApi.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"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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);"
+          }
+        ]
+      },
+      "post": {
         "requestBody": {
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/RolePermissionPostSchema"
+                "$ref": "#/components/schemas/SupersetRoleApi.post"
               },
               "example": {
-                "permission_view_menu_ids": [
-                  1
-                ]
+                "name": "string"
               }
             }
           },
-          "description": "Add role permissions schema",
+          "description": "Model schema",
           "required": true
         },
         "responses": {
-          "200": {
+          "201": {
             "content": {
               "application/json": {
                 "schema": {
                   "properties": {
+                    "id": {
+                      "type": "string"
+                    },
                     "result": {
-                      "$ref": "#/components/schemas/RolePermissionPostSchema"
+                      "$ref": "#/components/schemas/SupersetRoleApi.post"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
+                  "id": "string",
                   "result": {
-                    "permission_view_menu_ids": []
+                    "name": "string"
                   }
                 }
               }
             },
-            "description": "Permissions added"
+            "description": "Item inserted"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -32259,8 +33309,122 @@
           "401": {
             "$ref": "#/components/responses/401"
           },
-          "404": {
-            "$ref": "#/components/responses/404"
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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/v1/security/roles/_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"
+                },
+                "example": {
+                  "add_columns": {},
+                  "edit_columns": {},
+                  "filters": {
+                    "column_name": [
+                      {}
+                    ]
+                  },
+                  "permissions": [
+                    "string"
+                  ]
+                }
+              }
+            },
+            "description": "Item from Model"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
           },
           "422": {
             "$ref": "#/components/responses/422"
@@ -32277,33 +33441,173 @@
         "tags": [
           "Security Roles"
         ],
-        "operationId": "create_security_roles_by_role_id_permissions",
-        "summary": "Create security roles by role_id permissions",
+        "operationId": "get_security_roles__info",
+        "summary": "Get security roles  info",
         "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\"}'"
+            "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.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())"
+            "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/{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);"
+            "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/v1/security/roles/{role_id}/permissions/": {
+    "/api/v1/security/roles/search/": {
       "get": {
+        "description": "Fetch a paginated list of roles with user and permission IDs.",
+        "parameters": [
+          {
+            "in": "query",
+            "name": "q",
+            "schema": {
+              "properties": {
+                "filters": {
+                  "items": {
+                    "properties": {
+                      "col": {
+                        "enum": [
+                          "user_ids",
+                          "permission_ids",
+                          "name"
+                        ],
+                        "type": "string"
+                      },
+                      "value": {
+                        "type": "string"
+                      }
+                    },
+                    "type": "object"
+                  },
+                  "type": "array"
+                },
+                "order_column": {
+                  "default": "id",
+                  "enum": [
+                    "id",
+                    "name"
+                  ],
+                  "type": "string"
+                },
+                "order_direction": {
+                  "default": "asc",
+                  "enum": [
+                    "asc",
+                    "desc"
+                  ],
+                  "type": "string"
+                },
+                "page": {
+                  "default": 0,
+                  "type": "integer"
+                },
+                "page_size": {
+                  "default": 10,
+                  "type": "integer"
+                }
+              },
+              "type": "object"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/RolesResponseSchema"
+                },
+                "example": {
+                  "count": 1,
+                  "ids": [
+                    1
+                  ],
+                  "result": []
+                }
+              }
+            },
+            "description": "Successfully retrieved roles"
+          },
+          "400": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "error": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "error": "string"
+                }
+              }
+            },
+            "description": "Bad request (invalid input)"
+          },
+          "403": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "error": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "error": "string"
+                }
+              }
+            },
+            "description": "Forbidden"
+          }
+        },
+        "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/v1/security/roles/{pk}": {
+      "delete": {
         "parameters": [
           {
             "in": "path",
-            "name": "role_id",
+            "name": "pk",
             "required": true,
             "schema": {
               "type": "integer"
@@ -32316,22 +33620,2842 @@
               "application/json": {
                 "schema": {
                   "properties": {
-                    "result": {
-                      "$ref": "#/components/schemas/RolePermissionListSchema"
+                    "message": {
+                      "type": "string"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "result": {
-                    "id": 1,
-                    "permission_name": "string",
-                    "view_menu_name": "string"
-                  }
+                  "message": "string"
+                }
+              }
+            },
+            "description": "Item deleted"
+          },
+          "404": {
+            "$ref": "#/components/responses/404"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "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\""
+          },
+          {
+            "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)"
+          },
+          {
+            "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);"
+          }
+        ]
+      },
+      "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/SupersetRoleApi.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": {
+                  "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"
+                }
+              }
+            },
+            "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": []
+          }
+        ],
+        "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);"
+          }
+        ]
+      },
+      "put": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/SupersetRoleApi.put"
+              },
+              "example": {
+                "name": "string"
+              }
+            }
+          },
+          "description": "Model schema",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "$ref": "#/components/schemas/SupersetRoleApi.put"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": {
+                    "name": "string"
+                  }
+                }
+              }
+            },
+            "description": "Item changed"
+          },
+          "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": []
+          }
+        ],
+        "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/v1/security/roles/{role_id}/groups": {
+      "put": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "role_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/RoleGroupPutSchema"
+              },
+              "example": {
+                "group_ids": [
+                  1
+                ]
+              }
+            }
+          },
+          "description": "Update role groups schema",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "$ref": "#/components/schemas/RoleGroupPutSchema"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": {
+                    "group_ids": []
+                  }
+                }
+              }
+            },
+            "description": "Role groups updated"
+          },
+          "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": []
+          }
+        ],
+        "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/v1/security/roles/{role_id}/permissions": {
+      "post": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "role_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/RolePermissionPostSchema"
+              },
+              "example": {
+                "permission_view_menu_ids": [
+                  1
+                ]
+              }
+            }
+          },
+          "description": "Add role permissions schema",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "$ref": "#/components/schemas/RolePermissionPostSchema"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": {
+                    "permission_view_menu_ids": []
+                  }
+                }
+              }
+            },
+            "description": "Permissions added"
+          },
+          "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": []
+          }
+        ],
+        "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/v1/security/roles/{role_id}/permissions/": {
+      "get": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "role_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "items": {
+                        "$ref": "#/components/schemas/RolePermissionListSchema"
+                      },
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": [
+                    {}
+                  ]
+                }
+              }
+            },
+            "description": "List of permissions"
+          },
+          "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": []
+          }
+        ],
+        "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/v1/security/roles/{role_id}/users": {
+      "put": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "role_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/RoleUserPutSchema"
+              },
+              "example": {
+                "user_ids": [
+                  1
+                ]
+              }
+            }
+          },
+          "description": "Update role users schema",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "$ref": "#/components/schemas/RoleUserPutSchema"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": {
+                    "user_ids": []
+                  }
+                }
+              }
+            },
+            "description": "Role users updated"
+          },
+          "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": []
+          }
+        ],
+        "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/v1/security/user_registrations/": {
+      "get": {
+        "description": "Get a list of models",
+        "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/UserRegistrationsRestAPI.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"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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": []
+          }
+        ],
+        "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);"
+          }
+        ]
+      }
+    },
+    "/api/v1/security/user_registrations/_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"
+                },
+                "example": {
+                  "add_columns": {},
+                  "edit_columns": {},
+                  "filters": {
+                    "column_name": [
+                      {}
+                    ]
+                  },
+                  "permissions": [
+                    "string"
+                  ]
+                }
+              }
+            },
+            "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": []
+          }
+        ],
+        "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": []
+          }
+        ],
+        "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);"
+          }
+        ]
+      }
+    },
+    "/api/v1/security/user_registrations/{pk}": {
+      "delete": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "message": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "message": "string"
+                }
+              }
+            },
+            "description": "Item deleted"
+          },
+          "404": {
+            "$ref": "#/components/responses/404"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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);"
+          }
+        ]
+      },
+      "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/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": {
+                  "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"
+          },
+          "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": []
+          }
+        ],
+        "tags": [
+          "UserRegistrationsRestAPI"
+        ],
+        "operationId": "get_security_user_registrations_by_pk",
+        "summary": "Get security user registrations by pk",
+        "x-codeSamples": [
+          {
+            "lang": "cURL",
+            "label": "cURL",
+            "source": "curl -X GET \"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.get(\n    \"http://localhost:8088/api/v1/security/user_registrations/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/user_registrations/1\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+          }
+        ]
+      },
+      "put": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UserRegistrationsRestAPI.put"
+              },
+              "example": {
+                "id": 1
+              }
+            }
+          },
+          "description": "Model schema",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "$ref": "#/components/schemas/UserRegistrationsRestAPI.put"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": {
+                    "id": 1
+                  }
+                }
+              }
+            },
+            "description": "Item changed"
+          },
+          "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": []
+          }
+        ],
+        "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/v1/security/users/": {
+      "get": {
+        "description": "Get a list of models",
+        "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/SupersetUserApi.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"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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);"
+          }
+        ]
+      },
+      "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"
+          },
+          "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": []
+          }
+        ],
+        "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/v1/security/users/_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"
+                },
+                "example": {
+                  "add_columns": {},
+                  "edit_columns": {},
+                  "filters": {
+                    "column_name": [
+                      {}
+                    ]
+                  },
+                  "permissions": [
+                    "string"
+                  ]
+                }
+              }
+            },
+            "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": []
+          }
+        ],
+        "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/v1/security/users/{pk}": {
+      "delete": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "message": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "message": "string"
+                }
+              }
+            },
+            "description": "Item deleted"
+          },
+          "404": {
+            "$ref": "#/components/responses/404"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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);"
+          }
+        ]
+      },
+      "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/SupersetUserApi.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": {
+                  "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"
+                }
+              }
+            },
+            "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": []
+          }
+        ],
+        "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);"
+          }
+        ]
+      },
+      "put": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "pk",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "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"
+          },
+          "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": []
+          }
+        ],
+        "tags": [
+          "Security Users"
+        ],
+        "operationId": "update_security_users_by_pk",
+        "summary": "Update security users by pk",
+        "x-codeSamples": [
+          {
+            "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\"}'"
+          },
+          {
+            "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())"
+          },
+          {
+            "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/v1/sqllab/": {
+      "get": {
+        "description": "Assembles SQLLab bootstrap data (active_tab, databases, queries, tab_state_ids) in a single endpoint. The data can be assembled from the current user's id.",
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/SQLLabBootstrapSchema"
+                },
+                "example": {
+                  "active_tab": {},
+                  "databases": {
+                    "key": "value"
+                  },
+                  "queries": {
+                    "key": "value"
+                  },
+                  "tab_state_ids": [
+                    "string"
+                  ]
+                }
+              }
+            },
+            "description": "Returns the initial bootstrap data for SqlLab"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "403": {
+            "$ref": "#/components/responses/403"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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/v1/sqllab/estimate/": {
+      "post": {
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/EstimateQueryCostSchema"
+              },
+              "example": {
+                "catalog": "string",
+                "database_id": 1,
+                "schema": "string",
+                "sql": "string",
+                "template_params": {}
+              }
+            }
+          },
+          "description": "SQL query and params",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "type": "object"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": {}
+                }
+              }
+            },
+            "description": "Query estimation result"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "403": {
+            "$ref": "#/components/responses/403"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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/v1/sqllab/execute/": {
+      "post": {
+        "requestBody": {
+          "content": {
+            "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"
+              }
+            }
+          },
+          "description": "SQL query and params",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/QueryExecutionResponseSchema"
+                },
+                "example": {
+                  "columns": [
+                    {}
+                  ],
+                  "data": [
+                    {}
+                  ],
+                  "expanded_columns": [
+                    {}
+                  ],
+                  "query": {},
+                  "query_id": 1,
+                  "selected_columns": [
+                    {}
+                  ],
+                  "status": "string"
+                }
+              }
+            },
+            "description": "Query execution result"
+          },
+          "202": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/QueryExecutionResponseSchema"
+                },
+                "example": {
+                  "columns": [
+                    {}
+                  ],
+                  "data": [
+                    {}
+                  ],
+                  "expanded_columns": [
+                    {}
+                  ],
+                  "query": {},
+                  "query_id": 1,
+                  "selected_columns": [
+                    {}
+                  ],
+                  "status": "string"
+                }
+              }
+            },
+            "description": "Query execution result, query still running"
+          },
+          "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": "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/v1/sqllab/export/{client_id}/": {
+      "get": {
+        "parameters": [
+          {
+            "description": "The SQL query result identifier",
+            "in": "path",
+            "name": "client_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "text/csv": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            },
+            "description": "SQL query results"
+          },
+          "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": "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/v1/sqllab/export_streaming/": {
+      "post": {
+        "requestBody": {
+          "content": {
+            "application/x-www-form-urlencoded": {
+              "schema": {
+                "properties": {
+                  "client_id": {
+                    "description": "The SQL query result identifier",
+                    "type": "string"
+                  },
+                  "expected_rows": {
+                    "description": "Optional expected row count for progress tracking",
+                    "type": "integer"
+                  },
+                  "filename": {
+                    "description": "Optional filename for the export",
+                    "type": "string"
+                  }
+                },
+                "type": "object"
+              }
+            }
+          },
+          "description": "Export parameters",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "text/csv": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            },
+            "description": "Streaming CSV export"
+          },
+          "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": "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\"}'"
+          },
+          {
+            "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())"
+          },
+          {
+            "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/v1/sqllab/format_sql/": {
+      "post": {
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/FormatQueryPayloadSchema"
+              },
+              "example": {
+                "database_id": 1,
+                "engine": "string",
+                "sql": "string",
+                "template_params": "string"
+              }
+            }
+          },
+          "description": "SQL query",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "result": {
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "result": "string"
+                }
+              }
+            },
+            "description": "Format SQL result"
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "403": {
+            "$ref": "#/components/responses/403"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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/v1/sqllab/permalink": {
+      "post": {
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/ExplorePermalinkStateSchema"
+              },
+              "example": {
+                "formData": {},
+                "urlParams": [
+                  {}
+                ]
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "201": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "key": {
+                      "description": "The key to retrieve the permanent link data.",
+                      "type": "string"
+                    },
+                    "url": {
+                      "description": "permanent link.",
+                      "type": "string"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "key": "string",
+                  "url": "string"
+                }
+              }
+            },
+            "description": "The permanent link was stored successfully."
+          },
+          "400": {
+            "$ref": "#/components/responses/400"
+          },
+          "401": {
+            "$ref": "#/components/responses/401"
+          },
+          "422": {
+            "$ref": "#/components/responses/422"
+          },
+          "500": {
+            "$ref": "#/components/responses/500"
+          }
+        },
+        "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/v1/sqllab/permalink/{key}": {
+      "get": {
+        "parameters": [
+          {
+            "in": "path",
+            "name": "key",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "properties": {
+                    "state": {
+                      "description": "The stored state",
+                      "type": "object"
+                    }
+                  },
+                  "type": "object"
+                },
+                "example": {
+                  "state": {}
+                }
+              }
+            },
+            "description": "Returns the stored form_data."
+          },
+          "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": []
+          }
+        ],
+        "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/v1/sqllab/results/": {
+      "get": {
+        "parameters": [
+          {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/sql_lab_get_results_schema"
+                }
+              }
+            },
+            "in": "query",
+            "name": "q"
+          }
+        ],
+        "responses": {
+          "200": {
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/QueryExecutionResponseSchema"
+                },
+                "example": {
+                  "columns": [
+                    {}
+                  ],
+                  "data": [
+                    {}
+                  ],
+                  "expanded_columns": [
+                    {}
+                  ],
+                  "query": {},
+                  "query_id": 1,
+                  "selected_columns": [
+                    {}
+                  ],
+                  "status": "string"
                 }
               }
             },
-            "description": "List of permissions"
+            "description": "SQL query execution result"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -32339,11 +36463,14 @@
           "401": {
             "$ref": "#/components/responses/401"
           },
+          "403": {
+            "$ref": "#/components/responses/403"
+          },
           "404": {
             "$ref": "#/components/responses/404"
           },
-          "422": {
-            "$ref": "#/components/responses/422"
+          "410": {
+            "$ref": "#/components/responses/410"
           },
           "500": {
             "$ref": "#/components/responses/500"
@@ -32354,85 +36481,70 @@
             "jwt": []
           }
         ],
+        "summary": "Get the result of a SQL query execution",
         "tags": [
-          "Security Roles"
+          "SQL Lab"
         ],
-        "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\""
+            "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/security/roles/{role_id}/permissions/\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/security/roles/{role_id}/permissions/\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/security/roles/{role_id}/users": {
-      "put": {
+    "/api/v1/tag/": {
+      "delete": {
+        "description": "Bulk deletes tags. This will remove all tagged objects with this tag.",
         "parameters": [
           {
-            "in": "path",
-            "name": "role_id",
-            "required": true,
-            "schema": {
-              "type": "integer"
-            }
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/delete_tags_schema"
+                }
+              }
+            },
+            "in": "query",
+            "name": "q"
           }
         ],
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/RoleUserPutSchema"
-              },
-              "example": {
-                "user_ids": [
-                  1
-                ]
-              }
-            }
-          },
-          "description": "Update role users schema",
-          "required": true
-        },
         "responses": {
           "200": {
             "content": {
               "application/json": {
                 "schema": {
                   "properties": {
-                    "result": {
-                      "$ref": "#/components/schemas/RoleUserPutSchema"
+                    "message": {
+                      "type": "string"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "result": {
-                    "user_ids": []
-                  }
+                  "message": "string"
                 }
               }
             },
-            "description": "Role users updated"
-          },
-          "400": {
-            "$ref": "#/components/responses/400"
+            "description": "Deletes multiple Tags"
           },
           "401": {
             "$ref": "#/components/responses/401"
           },
+          "403": {
+            "$ref": "#/components/responses/403"
+          },
           "404": {
             "$ref": "#/components/responses/404"
           },
@@ -32448,33 +36560,30 @@
             "jwt": []
           }
         ],
+        "summary": "Bulk delete tags",
         "tags": [
-          "Security Roles"
+          "Tags"
         ],
-        "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\"}'"
+            "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.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())"
+            "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/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);"
+            "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/v1/security/users/": {
+      },
       "get": {
-        "description": "Get a list of models",
+        "description": "Get a list of tags, use Rison or JSON query parameters for filtering, sorting, pagination and  for selecting specific columns and metadata.",
         "parameters": [
           {
             "content": {
@@ -32547,7 +36656,7 @@
                     "result": {
                       "description": "The result from the get list query",
                       "items": {
-                        "$ref": "#/components/schemas/SupersetUserApi.get_list"
+                        "$ref": "#/components/schemas/TagRestApi.get_list"
                       },
                       "type": "array"
                     }
@@ -32598,50 +36707,44 @@
             "jwt": []
           }
         ],
+        "summary": "Get a list of tags",
         "tags": [
-          "Security Users"
+          "Tags"
         ],
-        "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\""
+            "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/security/users/\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/security/users/\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
       },
       "post": {
+        "description": "Create a new Tag",
         "requestBody": {
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/SupersetUserApi.post"
+                "$ref": "#/components/schemas/TagRestApi.post"
               },
               "example": {
-                "active": true,
-                "email": "string",
-                "first_name": "string",
-                "last_name": "string",
-                "password": "string",
-                "roles": [
-                  1
-                ],
-                "username": "string"
+                "description": "string",
+                "name": "string",
+                "objects_to_tag": []
               }
             }
           },
-          "description": "Model schema",
+          "description": "Tag schema",
           "required": true
         },
         "responses": {
@@ -32650,26 +36753,26 @@
               "application/json": {
                 "schema": {
                   "properties": {
+                    "id": {
+                      "type": "number"
+                    },
                     "result": {
-                      "$ref": "#/components/schemas/SupersetUserApi.post"
+                      "$ref": "#/components/schemas/TagRestApi.post"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
+                  "id": 1.0,
                   "result": {
-                    "active": true,
-                    "email": "string",
-                    "first_name": "string",
-                    "last_name": "string",
-                    "password": "string",
-                    "roles": [],
-                    "username": "string"
+                    "description": "string",
+                    "name": "string",
+                    "objects_to_tag": []
                   }
                 }
               }
             },
-            "description": "Item changed"
+            "description": "Tag added"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -32677,9 +36780,6 @@
           "401": {
             "$ref": "#/components/responses/401"
           },
-          "404": {
-            "$ref": "#/components/responses/404"
-          },
           "422": {
             "$ref": "#/components/responses/422"
           },
@@ -32692,31 +36792,30 @@
             "jwt": []
           }
         ],
+        "summary": "Create a tag",
         "tags": [
-          "Security Users"
+          "Tags"
         ],
-        "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\"}'"
+            "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/security/users/\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/security/users/_info": {
+    "/api/v1/tag/_info": {
       "get": {
         "description": "Get metadata information about this API resource",
         "parameters": [
@@ -32809,67 +36908,73 @@
             "jwt": []
           }
         ],
+        "summary": "Get metadata information about tag API endpoints",
         "tags": [
-          "Security Users"
+          "Tags"
         ],
-        "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\""
+            "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/security/users/_info\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/security/users/_info\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/security/users/{pk}": {
-      "delete": {
-        "parameters": [
-          {
-            "in": "path",
-            "name": "pk",
-            "required": true,
-            "schema": {
-              "type": "integer"
+    "/api/v1/tag/bulk_create": {
+      "post": {
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/TagPostBulkSchema"
+              },
+              "example": {
+                "tags": [
+                  {}
+                ]
+              }
             }
-          }
-        ],
+          },
+          "description": "Tag schema",
+          "required": true
+        },
         "responses": {
           "200": {
             "content": {
               "application/json": {
                 "schema": {
-                  "properties": {
-                    "message": {
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
+                  "$ref": "#/components/schemas/TagPostBulkResponseSchema"
                 },
                 "example": {
-                  "message": "string"
+                  "result": {}
                 }
               }
             },
-            "description": "Item deleted"
+            "description": "Bulk created tags and tagged objects"
+          },
+          "302": {
+            "description": "Redirects to the current digest"
+          },
+          "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"
           }
@@ -32879,45 +36984,38 @@
             "jwt": []
           }
         ],
+        "summary": "Bulk create tags and tagged objects",
         "tags": [
-          "Security Users"
+          "Tags"
         ],
-        "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\""
+            "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.delete(\n    \"http://localhost:8088/api/v1/security/users/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.status_code)"
+            "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/security/users/1\",\n  {\n    method: \"DELETE\",\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconsole.log(response.status);"
+            "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/v1/tag/favorite_status/": {
       "get": {
-        "description": "Get an item model",
+        "description": "Get favorited tags for current user",
         "parameters": [
-          {
-            "in": "path",
-            "name": "pk",
-            "required": true,
-            "schema": {
-              "type": "integer"
-            }
-          },
           {
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/get_item_schema"
+                  "$ref": "#/components/schemas/get_fav_star_ids_schema"
                 }
               }
             },
@@ -32930,78 +37028,14 @@
             "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/SupersetUserApi.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"
+                  "$ref": "#/components/schemas/GetFavStarIdsSchema"
                 },
                 "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"
+                  "result": []
                 }
               }
             },
-            "description": "Item from Model"
+            "description": "None"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -33012,9 +37046,6 @@
           "404": {
             "$ref": "#/components/responses/404"
           },
-          "422": {
-            "$ref": "#/components/responses/422"
-          },
           "500": {
             "$ref": "#/components/responses/500"
           }
@@ -33025,61 +37056,41 @@
           }
         ],
         "tags": [
-          "Security Users"
+          "Tags"
         ],
-        "operationId": "get_security_users_by_pk",
-        "summary": "Get security users by pk",
+        "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/security/users/1\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/security/users/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/security/users/1\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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);"
           }
         ]
-      },
-      "put": {
+      }
+    },
+    "/api/v1/tag/get_objects/": {
+      "get": {
         "parameters": [
           {
             "in": "path",
-            "name": "pk",
+            "name": "tag_id",
             "required": true,
             "schema": {
               "type": "integer"
             }
           }
         ],
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/SupersetUserApi.put"
-              },
-              "example": {
-                "active": true,
-                "email": "string",
-                "first_name": "string",
-                "last_name": "string",
-                "password": "string",
-                "roles": [
-                  1
-                ],
-                "username": "string"
-              }
-            }
-          },
-          "description": "Model schema",
-          "required": true
-        },
         "responses": {
           "200": {
             "content": {
@@ -33087,25 +37098,25 @@
                 "schema": {
                   "properties": {
                     "result": {
-                      "$ref": "#/components/schemas/SupersetUserApi.put"
+                      "items": {
+                        "$ref": "#/components/schemas/TaggedObjectEntityResponseSchema"
+                      },
+                      "type": "array"
                     }
                   },
                   "type": "object"
                 },
                 "example": {
-                  "result": {
-                    "active": true,
-                    "email": "string",
-                    "first_name": "string",
-                    "last_name": "string",
-                    "password": "string",
-                    "roles": [],
-                    "username": "string"
-                  }
+                  "result": [
+                    {}
+                  ]
                 }
               }
             },
-            "description": "Item changed"
+            "description": "List of tagged objects associated with a Tag"
+          },
+          "302": {
+            "description": "Redirects to the current digest"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -33116,9 +37127,6 @@
           "404": {
             "$ref": "#/components/responses/404"
           },
-          "422": {
-            "$ref": "#/components/responses/422"
-          },
           "500": {
             "$ref": "#/components/responses/500"
           }
@@ -33128,55 +37136,66 @@
             "jwt": []
           }
         ],
+        "summary": "Get all objects associated with a tag",
         "tags": [
-          "Security Users"
+          "Tags"
         ],
-        "operationId": "update_security_users_by_pk",
-        "summary": "Update security users by pk",
         "x-codeSamples": [
           {
             "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\"}'"
+            "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.put(\n    \"http://localhost:8088/api/v1/security/users/1\",\n    headers={\"Authorization\": \"Bearer \" + access_token},\n    json={\"key\": \"value\"}\n)\nprint(response.json())"
+            "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/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);"
+            "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/v1/sqllab/": {
+    "/api/v1/tag/related/{column_name}": {
       "get": {
-        "description": "Assembles SQLLab bootstrap data (active_tab, databases, queries, tab_state_ids) in a single endpoint. The data can be assembled from the current user's id.",
+        "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/SQLLabBootstrapSchema"
+                  "$ref": "#/components/schemas/RelatedResponseSchema"
                 },
                 "example": {
-                  "active_tab": {},
-                  "databases": {
-                    "key": "value"
-                  },
-                  "queries": {
-                    "key": "value"
-                  },
-                  "tab_state_ids": [
-                    "string"
-                  ]
+                  "count": 1,
+                  "result": []
                 }
               }
             },
-            "description": "Returns the initial bootstrap data for SqlLab"
+            "description": "Related column data"
           },
           "400": {
             "$ref": "#/components/responses/400"
@@ -33184,8 +37203,8 @@
           "401": {
             "$ref": "#/components/responses/401"
           },
-          "403": {
-            "$ref": "#/components/responses/403"
+          "404": {
+            "$ref": "#/components/responses/404"
           },
           "500": {
             "$ref": "#/components/responses/500"
@@ -33196,67 +37215,81 @@
             "jwt": []
           }
         ],
-        "summary": "Get the bootstrap data for SqlLab page",
+        "summary": "Get related fields data (tag-related-column-name)",
         "tags": [
-          "SQL Lab"
+          "Tags"
         ],
         "x-codeSamples": [
           {
             "lang": "cURL",
             "label": "cURL",
-            "source": "curl -X GET \"http://localhost:8088/api/v1/sqllab/\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\""
+            "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/sqllab/\",\n    headers={\"Authorization\": \"Bearer \" + access_token}\n)\nprint(response.json())"
+            "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/sqllab/\",\n  {\n    headers: {\n      \"Authorization\": `Bearer ${accessToken}`\n    }\n  }\n);\nconst data = await response.json();\nconsole.log(data);"
+            "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/v1/sqllab/estimate/": {
+    "/api/v1/tag/{object_type}/{object_id}/": {
       "post": {
+        "description": "Adds tags to an object. Creates new tags if they do not already exist.",
+        "parameters": [
+          {
+            "in": "path",
+            "name": "object_type",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          },
+          {
+            "in": "path",
+            "name": "object_id",
+            "required": true,
+            "schema": {
+              "type": "integer"
+            }
+          }
+        ],
         "requestBody": {
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/EstimateQueryCostSchema"
-              },
-              "example": {
-                "catalog": "string",
-                "database_id": 1,
-                "schema": "string",
-                "sql": "string",
-                "template_params": {}
-              }
-            }
-          },
-          "description": "SQL query and params",
-          "required": true
-        },
... 1998 lines suppressed ...