diff --git a/docs/api-documentation.md b/docs/api-documentation.md
index ef96f5382678b8c33e49e730952fe5edcc288552..6ff8953dbcea07860bba105de6f76945c0448709 100644
--- a/docs/api-documentation.md
+++ b/docs/api-documentation.md
@@ -12,8 +12,8 @@ clojure -M:ee:run api-documentation
 
 ## About the Metabase API
 
-- **The API is subject to change.** The API is tightly coupled with the front end and is subject to change between releases. The endpoints likely won’t change that much (existing API endpoints are changed infrequently, and removed rarely), but if you write code to use the API, you might have to update it in the future.
-- **The API isn't versioned.** Meaning: it can change version to version, so don’t expect to stay on a particular version of Metabase in order to use a “stable” API.
+- **The API is subject to change.** We rarely change API endpoints, and almost never remove them, but if you write code that relies on the API, there's a chance you might have to update your code in the future.
+- **The API isn't versioned.** So don’t expect to stay on a particular version of Metabase in order to use a “stable” API.
 
 ## API tutorial
 
@@ -35,7 +35,7 @@ _* indicates endpoints used for features available on [paid plans](https://www.m
 - [Bookmark](api/bookmark.md)
 - [Card](api/card.md)
 - [Collection](api/collection.md)
-- [Content management review*](api/ee/content-management-review.md)
+- [Content verification review*](api/ee/content-verification-review.md)
 - [Dashboard](api/dashboard.md)
 - [Database](api/database.md)
 - [Dataset](api/dataset.md)
@@ -65,7 +65,6 @@ _* indicates endpoints used for features available on [paid plans](https://www.m
 - [Sandbox user*](api/ee/sandbox-user.md)
 - [Search](api/search.md)
 - [Segment](api/segment.md)
-- [Serialization serialize*](api/ee/serialization-serialize.md)
 - [Session](api/session.md)
 - [Setting](api/setting.md)
 - [Setup](api/setup.md)
diff --git a/docs/api/action.md b/docs/api/action.md
index 944b095238a33e206b0060bd1543db0b951c88bd..92dcabadbcaa45b159196cb1a24f0380e50d4fd9 100644
--- a/docs/api/action.md
+++ b/docs/api/action.md
@@ -37,6 +37,16 @@ Returns actions that can be used for QueryActions. By default lists all viewable
 
 *  **`action-id`** value must be an integer greater than zero.
 
+## `GET /api/action/:action-id/execute`
+
+Fetches the values for filling in execution parameters. Pass PK parameters and values to select.
+
+### PARAMS:
+
+*  **`action-id`** value must be an integer greater than zero.
+
+*  **`parameters`** value must be a valid JSON string.
+
 ## `GET /api/action/public`
 
 Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.
diff --git a/docs/api/alert.md b/docs/api/alert.md
index a9a1c2f46c09bba782151d4036018d29dad757bf..429cb37e943c82e1613832fd72794368b37d5ec9 100644
--- a/docs/api/alert.md
+++ b/docs/api/alert.md
@@ -18,13 +18,14 @@ For users to unsubscribe themselves from the given alert.
 
 ## `GET /api/alert/`
 
-Fetch all alerts.
+Fetch alerts which the current user has created or will receive, or all alerts if the user is an admin.
+  The optional `user_id` will return alerts created by the corresponding user, but is ignored for non-admin users.
 
 ### PARAMS:
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`user_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`user_id`** nullable value must be an integer greater than zero.
 
 ## `GET /api/alert/:id`
 
@@ -36,13 +37,13 @@ Fetch an alert by ID.
 
 ## `GET /api/alert/question/:id`
 
-Fetch all questions for the given question (`Card`) id.
+Fetch all alerts for the given question (`Card`) id.
 
 ### PARAMS:
 
-*  **`id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`id`** nullable value must be an integer greater than zero.
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
 ## `POST /api/alert/`
 
@@ -50,15 +51,15 @@ Create a new Alert.
 
 ### PARAMS:
 
-*  **`alert_condition`** value must be one of: `goal`, `rows`.
+*  **`alert_condition`** enum of rows, goal
 
 *  **`card`** value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
 
-*  **`channels`** value must be an array. Each value must be a map. The array cannot be empty.
+*  **`channels`** one or more map
 
-*  **`alert_first_only`** value must be a boolean.
+*  **`alert_first_only`** boolean
 
-*  **`alert_above_goal`** value may be nil, or if non-nil, value must be a boolean.
+*  **`alert_above_goal`** nullable boolean
 
 *  **`new-alert-request-body`**
 
@@ -68,19 +69,19 @@ Update a `Alert` with ID.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`alert_condition`** value may be nil, or if non-nil, value must be one of: `goal`, `rows`.
+*  **`alert_condition`** nullable enum of rows, goal
 
-*  **`alert_first_only`** value may be nil, or if non-nil, value must be a boolean.
+*  **`alert_first_only`** nullable boolean
 
-*  **`alert_above_goal`** value may be nil, or if non-nil, value must be a boolean.
+*  **`alert_above_goal`** nullable boolean
 
-*  **`card`** value may be nil, or if non-nil, value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
+*  **`card`** nullable value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
 
-*  **`channels`** value may be nil, or if non-nil, value must be an array. Each value must be a map. The array cannot be empty.
+*  **`channels`** nullable one or more map
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
 *  **`alert-updates`**
 
diff --git a/docs/api/automagic-dashboards.md b/docs/api/automagic-dashboards.md
index 4eb826e240cdc8ecd29274c5b378eda2e72719fc..7ad89d4a8f65d6498ea044c9c62a2cf3da58fa7d 100644
--- a/docs/api/automagic-dashboards.md
+++ b/docs/api/automagic-dashboards.md
@@ -18,13 +18,13 @@ Return an automagic dashboard for entity `entity` with id `id`.
 
 *  **`entity-id-or-query`** 
 
-*  **`show`** nullable must equal all
+*  **`show`** nullable must equal all, or natural integer
 
 ## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query`
 
 Return an automagic dashboard analyzing cell in  automagic dashboard for entity `entity`
    defined by
-   query `cell-querry`.
+   query `cell-query`.
 
 ### PARAMS:
 
@@ -39,7 +39,7 @@ Return an automagic dashboard analyzing cell in  automagic dashboard for entity
 ## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/compare/:comparison-entity/:comparison-entity-id-or-query`
 
 Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`
-   with id `id` defined by query `cell-querry`; compared with entity `comparison-entity` with id
+   with id `id` defined by query `cell-query`; compared with entity `comparison-entity` with id
    `comparison-entity-id-or-query.`.
 
 ### PARAMS:
@@ -56,10 +56,10 @@ Return an automagic comparison dashboard for cell in automagic dashboard for ent
 
 *  **`comparison-entity-id-or-query`**
 
-## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/rule/:prefix/:rule`
+## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/rule/:prefix/:dashboard-template`
 
 Return an automagic dashboard analyzing cell in question  with id `id` defined by
-   query `cell-querry` using rule `rule`.
+   query `cell-query` using dashboard-template `dashboard-template`.
 
 ### PARAMS:
 
@@ -71,14 +71,14 @@ Return an automagic dashboard analyzing cell in question  with id `id` defined b
 
 *  **`prefix`** invalid value for prefix
 
-*  **`rule`** invalid value for rule name
+*  **`dashboard-template`** invalid value for dashboard template name
 
 *  **`show`** invalid show value
 
-## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/rule/:prefix/:rule/compare/:comparison-entity/:comparison-entity-id-or-query`
+## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/cell/:cell-query/rule/:prefix/:dashboard-template/compare/:comparison-entity/:comparison-entity-id-or-query`
 
 Return an automagic comparison dashboard for cell in automagic dashboard for entity `entity`
-   with id `id` defined by query `cell-querry` using rule `rule`; compared with entity
+   with id `id` defined by query `cell-query` using dashboard-template `dashboard-template`; compared with entity
    `comparison-entity` with id `comparison-entity-id-or-query.`.
 
 ### PARAMS:
@@ -91,7 +91,7 @@ Return an automagic comparison dashboard for cell in automagic dashboard for ent
 
 *  **`prefix`** invalid value for prefix
 
-*  **`rule`** invalid value for rule name
+*  **`dashboard-template`** invalid value for dashboard template name
 
 *  **`show`** invalid show value
 
@@ -116,9 +116,9 @@ Return an automagic comparison dashboard for entity `entity` with id `id` compar
 
 *  **`comparison-entity-id-or-query`**
 
-## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/rule/:prefix/:rule`
+## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/rule/:prefix/:dashboard-template`
 
-Return an automagic dashboard for entity `entity` with id `id` using rule `rule`.
+Return an automagic dashboard for entity `entity` with id `id` using dashboard-template `dashboard-template`.
 
 ### PARAMS:
 
@@ -128,13 +128,13 @@ Return an automagic dashboard for entity `entity` with id `id` using rule `rule`
 
 *  **`prefix`** invalid value for prefix
 
-*  **`rule`** invalid value for rule name
+*  **`dashboard-template`** invalid value for dashboard template name
 
 *  **`show`** invalid show value
 
-## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/rule/:prefix/:rule/compare/:comparison-entity/:comparison-entity-id-or-query`
+## `GET /api/automagic-dashboards/:entity/:entity-id-or-query/rule/:prefix/:dashboard-template/compare/:comparison-entity/:comparison-entity-id-or-query`
 
-Return an automagic comparison dashboard for entity `entity` with id `id` using rule `rule`;
+Return an automagic comparison dashboard for entity `entity` with id `id` using dashboard-template `dashboard-template`;
    compared with entity `comparison-entity` with id `comparison-entity-id-or-query.`.
 
 ### PARAMS:
@@ -145,7 +145,7 @@ Return an automagic comparison dashboard for entity `entity` with id `id` using
 
 *  **`prefix`** invalid value for prefix
 
-*  **`rule`** invalid value for rule name
+*  **`dashboard-template`** invalid value for dashboard template name
 
 *  **`show`** invalid show value
 
@@ -161,6 +161,17 @@ Return a list of candidates for automagic dashboards orderd by interestingness.
 
 *  **`id`** value must be an integer greater than zero.
 
+## `GET /api/automagic-dashboards/model_index/:model-index-id/primary_key/:pk-id`
+
+Return an automagic dashboard for an entity detail specified by `entity`
+  with id `id` and a primary key of `indexed-value`.
+
+### PARAMS:
+
+*  **`model-index-id`** integer
+
+*  **`pk-id`** integer
+
 ---
 
 [<< Back to API index](../api-documentation.md)
\ No newline at end of file
diff --git a/docs/api/bookmark.md b/docs/api/bookmark.md
index f4ccfd26e303cd9ef2d586b59f5c86de590714fe..943396c48ed1f8361a030f13d952a3e61b7f6aee 100644
--- a/docs/api/bookmark.md
+++ b/docs/api/bookmark.md
@@ -46,10 +46,7 @@ Sets the order of bookmarks for user.
 
 ### PARAMS:
 
-*  **`orderings`** value must be an array. Each value must be a map with schema: (
-  item_id : value must be an integer greater than zero.
-  type : value must be one of: `card`, `collection`, `dashboard`.
-)
+*  **`orderings`** sequence of map where {:type -> <enum of card, dashboard, collection>, :item_id -> <value must be an integer greater than zero.>}
 
 ---
 
diff --git a/docs/api/card.md b/docs/api/card.md
index 064966acd473136b2f957043e9a01029e65f9103..b626dad8046a1dd4314dbd6045287f3bb6f47da2 100644
--- a/docs/api/card.md
+++ b/docs/api/card.md
@@ -27,13 +27,12 @@ Delete a Card. (DEPRECATED -- don't delete a Card anymore -- archive it instead.
 ## `GET /api/card/`
 
 Get all the Cards. Option filter param `f` can be used to change the set of Cards that are returned; default is
-  `all`, but other options include `mine`, `bookmarked`, `database`, `table`, `recent`, `popular`, :using_model
-  and `archived`. See corresponditng implementation functions above for the specific behavior of each filter
-  option. :card_index.
+  `all`, but other options include `mine`, `bookmarked`, `database`, `table`, `using_model` and `archived`. See
+  corresponding implementation functions above for the specific behavior of each filterp option. :card_index.
 
 ### PARAMS:
 
-*  **`f`** nullable enum of archived, table, using_model, bookmarked, popular, all, recent, mine, database
+*  **`f`** nullable enum of archived, table, using_model, bookmarked, all, mine, database
 
 *  **`model_id`** nullable value must be an integer greater than zero.
 
@@ -132,25 +131,27 @@ Create a new `Card`.
 
 ### PARAMS:
 
-*  **`visualization_settings`** value must be a map.
+*  **`visualization_settings`** Value must be a map.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be an array. Each parameter must be a map with :id and :type keys
+*  **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
 
-*  **`description`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`dataset`** nullable boolean
 
-*  **`collection_position`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`description`** nullable value must be a non-blank string.
 
-*  **`result_metadata`** value may be nil, or if non-nil, value must be an array of valid results column metadata maps.
+*  **`collection_position`** nullable value must be an integer greater than zero.
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`result_metadata`** nullable :metabase.sync.analyze.query-results/ResultsMetadata
+
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
 *  **`name`** value must be a non-blank string.
 
-*  **`cache_ttl`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`cache_ttl`** nullable value must be an integer greater than zero.
 
-*  **`dataset_query`** value must be a map.
+*  **`dataset_query`** Value must be a map.
 
-*  **`parameter_mappings`** value may be nil, or if non-nil, value must be an array. Each parameter_mapping must be a map with :parameter_id and :target keys
+*  **`parameter_mappings`** nullable sequence of parameter_mapping must be a map with :parameter_id and :target keys
 
 *  **`display`** value must be a non-blank string.
 
@@ -231,14 +232,14 @@ Copy a `Card`, with the new name 'Copy of _name_'.
 
 ## `POST /api/card/collections`
 
-Bulk update endpoint for Card Collections. Move a set of `Cards` with CARD_IDS into a `Collection` with
-  COLLECTION_ID, or remove them from any Collections by passing a `null` COLLECTION_ID.
+Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with
+  `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.
 
 ### PARAMS:
 
-*  **`card_ids`** value must be an array. Each value must be an integer greater than zero.
+*  **`card_ids`** sequence of value must be an integer greater than zero.
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
 ## `POST /api/card/from-csv`
 
@@ -274,39 +275,39 @@ Update a `Card`.
 
 ### PARAMS:
 
-*  **`collection_preview`** value may be nil, or if non-nil, value must be a boolean.
+*  **`collection_preview`** nullable boolean
 
-*  **`visualization_settings`** value may be nil, or if non-nil, value must be a map.
+*  **`visualization_settings`** nullable Value must be a map.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be an array. Each parameter must be a map with :id and :type keys
+*  **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
 
-*  **`dataset`** value may be nil, or if non-nil, value must be a boolean.
+*  **`dataset`** nullable boolean
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
-*  **`collection_position`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_position`** nullable value must be an integer greater than zero.
 
-*  **`result_metadata`** value may be nil, or if non-nil, value must be an array of valid results column metadata maps.
+*  **`result_metadata`** nullable :metabase.sync.analyze.query-results/ResultsMetadata
 
-*  **`enable_embedding`** value may be nil, or if non-nil, value must be a boolean.
+*  **`enable_embedding`** nullable boolean
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
 *  **`card-updates`** 
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`embedding_params`** value may be nil, or if non-nil, value must be a valid embedding params map.
+*  **`embedding_params`** nullable value must be a valid embedding params map.
 
-*  **`cache_ttl`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`cache_ttl`** nullable value must be an integer greater than zero.
 
-*  **`dataset_query`** value may be nil, or if non-nil, value must be a map.
+*  **`dataset_query`** nullable Value must be a map.
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`display`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`display`** nullable value must be a non-blank string.
 
 ---
 
diff --git a/docs/api/collection.md b/docs/api/collection.md
index 3ef5db9359526cd5495e1be287d731b01fc0bfbf..f0871e33f43b299e3e90af0c64f7388aa883a621 100644
--- a/docs/api/collection.md
+++ b/docs/api/collection.md
@@ -53,17 +53,17 @@ Fetch a specific Collection's items with the following options:
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`models`** value may be nil, or if non-nil, value must satisfy one of the following requirements: 1) value must be an array. Each value must be one of: `card`, `collection`, `dashboard`, `dataset`, `no_models`, `pulse`, `snippet`, `timeline`. 2) value must be one of: `card`, `collection`, `dashboard`, `dataset`, `no_models`, `pulse`, `snippet`, `timeline`.
+*  **`models`** nullable sequence of enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card, or enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`pinned_state`** value may be nil, or if non-nil, value must be one of: `all`, `is_not_pinned`, `is_pinned`.
+*  **`pinned_state`** nullable enum of is_not_pinned, is_pinned, all
 
-*  **`sort_column`** value may be nil, or if non-nil, value must be one of: `last_edited_at`, `last_edited_by`, `model`, `name`.
+*  **`sort_column`** nullable enum of model, name, last_edited_by, last_edited_at
 
-*  **`sort_direction`** value may be nil, or if non-nil, value must be one of: `asc`, `desc`.
+*  **`sort_direction`** nullable enum of desc, asc
 
 ## `GET /api/collection/:id/timelines`
 
@@ -113,17 +113,17 @@ Fetch objects that the current user should see at their root level. As mentioned
 
 ### PARAMS:
 
-*  **`models`** value may be nil, or if non-nil, value must satisfy one of the following requirements: 1) value must be an array. Each value must be one of: `card`, `collection`, `dashboard`, `dataset`, `no_models`, `pulse`, `snippet`, `timeline`. 2) value must be one of: `card`, `collection`, `dashboard`, `dataset`, `no_models`, `pulse`, `snippet`, `timeline`.
+*  **`models`** nullable sequence of enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card, or enum of dashboard, dataset, no_models, timeline, snippet, collection, pulse, card
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`namespace`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`namespace`** nullable value must be a non-blank string.
 
-*  **`pinned_state`** value may be nil, or if non-nil, value must be one of: `all`, `is_not_pinned`, `is_pinned`.
+*  **`pinned_state`** nullable enum of is_not_pinned, is_pinned, all
 
-*  **`sort_column`** value may be nil, or if non-nil, value must be one of: `last_edited_at`, `last_edited_by`, `model`, `name`.
+*  **`sort_column`** nullable enum of model, name, last_edited_by, last_edited_at
 
-*  **`sort_direction`** value may be nil, or if non-nil, value must be one of: `asc`, `desc`.
+*  **`sort_direction`** nullable enum of desc, asc
 
 ## `GET /api/collection/root/timelines`
 
@@ -174,15 +174,13 @@ Create a new Collection.
 
 *  **`name`** value must be a non-blank string.
 
-*  **`color`** value must be a string that matches the regex `^#[0-9A-Fa-f]{6}$`.
-
-*  **`description`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`description`** nullable value must be a non-blank string.
 
-*  **`parent_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`parent_id`** nullable value must be an integer greater than zero.
 
-*  **`namespace`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`namespace`** nullable value must be a non-blank string.
 
-*  **`authority_level`** value may be nil, or if non-nil, value must be one of: `official`.
+*  **`authority_level`** nullable enum of official
 
 ## `PUT /api/collection/:id`
 
@@ -190,19 +188,17 @@ Modify an existing Collection, including archiving or unarchiving it, or moving
 
 ### PARAMS:
 
-*  **`id`** 
-
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`id`** value must be an integer greater than zero.
 
-*  **`color`** value may be nil, or if non-nil, value must be a string that matches the regex `^#[0-9A-Fa-f]{6}$`.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`description`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`description`** nullable value must be a non-blank string.
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`parent_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`parent_id`** nullable value must be an integer greater than zero.
 
-*  **`authority_level`** value may be nil, or if non-nil, value must be one of: `official`.
+*  **`authority_level`** nullable enum of official
 
 *  **`collection-updates`**
 
diff --git a/docs/api/dashboard.md b/docs/api/dashboard.md
index 897b879dd105270a3bcc63f862530d1218c71cff..85cba5cdeea0254ffb3e265dee2e12f4fa343162 100644
--- a/docs/api/dashboard.md
+++ b/docs/api/dashboard.md
@@ -26,18 +26,6 @@ Delete a Dashboard.
 
 *  **`id`** value must be an integer greater than zero.
 
-## `GET /api/dashboard/`
-
-Get `Dashboards`. With filter option `f` (default `all`), restrict results as follows:
-
-  *  `all`      - Return all Dashboards.
-  *  `mine`     - Return Dashboards created by the current user.
-  *  `archived` - Return Dashboards that have been archived. (By default, these are *excluded*.).
-
-### PARAMS:
-
-*  **`f`** value may be nil, or if non-nil, value must be one of: `all`, `archived`, `mine`.
-
 ## `GET /api/dashboard/:dashboard-id/dashcard/:dashcard-id/execute`
 
 Fetches the values for filling in execution parameters. Pass PK parameters and values to select.
@@ -73,11 +61,11 @@ Fetch possible values of the parameter whose ID is `:param-key` that contain `:q
 
 *  **`id`** value must be an integer greater than zero.
 
-*  **`param-key`**
+*  **`param-key`** 
 
-*  **`query`**
+*  **`query`** value must be a non-blank string.
 
-*  **`query-params`**
+*  **`constraint-param-key->value`**
 
 ## `GET /api/dashboard/:id/params/:param-key/values`
 
@@ -91,9 +79,9 @@ Fetch possible values of the parameter whose ID is `:param-key`. If the values c
 
 *  **`id`** value must be an integer greater than zero.
 
-*  **`param-key`**
+*  **`param-key`** 
 
-*  **`query-params`**
+*  **`constraint-param-key->value`**
 
 ## `GET /api/dashboard/:id/related`
 
@@ -125,25 +113,25 @@ Utility endpoint for powering Dashboard UI. Given some set of `filtered` Field I
 
   e.g. in a chain filter query like
 
-    GET /api/dashboard/10/params/PARAM_1/values?PARAM_2=100
+  GET /api/dashboard/10/params/PARAM_1/values?PARAM_2=100
 
   Assume `PARAM_1` maps to Field 1 and `PARAM_2` maps to Fields 2 and 3. The underlying MBQL query may or may not
   filter against Fields 2 and 3, depending on whether an FK relationship that lets us create a join against Field 1
   can be found. You can use this endpoint to determine which of those Fields is actually used:
 
-    GET /api/dashboard/params/valid-filter-fields?filtered=1&filtering=2&filtering=3
-    ;; ->
-    {1 [2 3]}
+  GET /api/dashboard/params/valid-filter-fields?filtered=1&filtering=2&filtering=3
+  ;; ->
+  {1 [2 3]}
 
   Results are returned as a map of
 
-    `filtered` Field ID -> subset of `filtering` Field IDs that would be used in chain filter query.
+  `filtered` Field ID -> subset of `filtering` Field IDs that would be used in chain filter query.
 
 ### PARAMS:
 
-*  **`filtered`** value must satisfy one of the following requirements: 1) value must be a valid integer greater than zero. 2) value must be an array. Each value must be a valid integer greater than zero. The array cannot be empty.
+*  **`filtered`** value must be an integer greater than zero., or one or more value must be an integer greater than zero.
 
-*  **`filtering`** value may be nil, or if non-nil, value must satisfy one of the following requirements: 1) value must be a valid integer greater than zero. 2) value must be an array. Each value must be a valid integer greater than zero. The array cannot be empty.
+*  **`filtering`** nullable value must be an integer greater than zero., or one or more value must be an integer greater than zero.
 
 ## `GET /api/dashboard/public`
 
@@ -158,15 +146,15 @@ Create a new Dashboard.
 
 *  **`name`** value must be a non-blank string.
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`parameters`** value may be nil, or if non-nil, value must be an array. Each parameter must be a map with :id and :type keys
+*  **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
 
-*  **`cache_ttl`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`cache_ttl`** nullable value must be an integer greater than zero.
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
-*  **`collection_position`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_position`** nullable value must be an integer greater than zero.
 
 *  **`_dashboard`**
 
@@ -176,13 +164,13 @@ Run the query associated with a Saved Question (`Card`) in the context of a `Das
 
 ### PARAMS:
 
-*  **`dashboard-id`**
+*  **`dashboard-id`** value must be an integer greater than zero.
 
-*  **`dashcard-id`**
+*  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`card-id`**
+*  **`card-id`** value must be an integer greater than zero.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be an array. Each value must be a parameter map with an 'id' key
+*  **`parameters`** nullable sequence of value must be a parameter map with an id key
 
 ## `POST /api/dashboard/:dashboard-id/dashcard/:dashcard-id/card/:card-id/query/:export-format`
 
@@ -194,15 +182,15 @@ Run the query associated with a Saved Question (`Card`) in the context of a `Das
 
 ### PARAMS:
 
-*  **`dashboard-id`**
+*  **`dashboard-id`** value must be an integer greater than zero.
 
-*  **`dashcard-id`**
+*  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`card-id`**
+*  **`card-id`** value must be an integer greater than zero.
 
-*  **`export-format`** value must be one of: `api`, `csv`, `json`, `xlsx`.
+*  **`export-format`** enum of csv, api, xlsx, json
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a valid JSON string.
+*  **`parameters`** nullable value must be a valid JSON string.
 
 *  **`request-parameters`**
 
@@ -219,14 +207,7 @@ Execute the associated Action in the context of a `Dashboard` and `DashboardCard
 
 *  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a map with schema: (
-  value must be a map with schema: (
-    p? :
-    pred-name :
-  ) : value must be a map with schema: (
-    _ :
-  )
-)
+*  **`parameters`** nullable map from <keyword> to <anything>
 
 *  **`_body`**
 
@@ -278,13 +259,13 @@ Run a pivot table query for a specific DashCard.
 
 ### PARAMS:
 
-*  **`dashboard-id`**
+*  **`dashboard-id`** value must be an integer greater than zero.
 
-*  **`dashcard-id`**
+*  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`card-id`**
+*  **`card-id`** value must be an integer greater than zero.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be an array. Each value must be a parameter map with an 'id' key
+*  **`parameters`** nullable sequence of value must be a parameter map with an id key
 
 ## `POST /api/dashboard/save`
 
@@ -306,47 +287,49 @@ Save a denormalized description of dashboard into collection with ID `:parent-co
 
 ## `PUT /api/dashboard/:id`
 
-Update a Dashboard.
-
-  Usually, you just need write permissions for this Dashboard to do this (which means you have appropriate
-  permissions for the Cards belonging to this Dashboard), but to change the value of `enable_embedding` you must be a
-  superuser.
+Update a Dashboard, and optionally the `dashcards` and `tabs` of a Dashboard. The request body should be a JSON object with the same
+  structure as the response from `GET /api/dashboard/:id`.
 
 ### PARAMS:
 
-*  **`parameters`** value may be nil, or if non-nil, value must be an array. Each parameter must be a map with :id and :type keys
+*  **`parameters`** nullable sequence of parameter must be a map with :id and :type keys
+
+*  **`points_of_interest`** nullable string
+
+*  **`description`** nullable string
 
-*  **`points_of_interest`** value may be nil, or if non-nil, value must be a string.
+*  **`archived`** nullable boolean
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`dashcards`** nullable value must be seq of maps in which ids are unique
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`collection_position`** nullable value must be an integer greater than zero.
 
-*  **`collection_position`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`tabs`** nullable value must be seq of maps in which ids are unique
 
-*  **`show_in_getting_started`** value may be nil, or if non-nil, value must be a boolean.
+*  **`show_in_getting_started`** nullable boolean
 
-*  **`enable_embedding`** value may be nil, or if non-nil, value must be a boolean.
+*  **`enable_embedding`** nullable boolean
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
-*  **`dash-updates`**
+*  **`dash-updates`** 
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`caveats`** value may be nil, or if non-nil, value must be a string.
+*  **`caveats`** nullable string
 
-*  **`embedding_params`** value may be nil, or if non-nil, value must be a valid embedding params map.
+*  **`embedding_params`** nullable value must be a valid embedding params map.
 
-*  **`cache_ttl`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`cache_ttl`** nullable value must be an integer greater than zero.
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
-*  **`position`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`position`** nullable value must be an integer greater than zero.
 
 ## `PUT /api/dashboard/:id/cards`
 
-Update `Cards` and `Tabs` on a Dashboard. Request body should have the form:
+(DEPRECATED -- Use the `PUT /api/dashboard/:id` endpoint instead.)
+   Update `Cards` and `Tabs` on a Dashboard. Request body should have the form:
 
     {:cards        [{:id                 ... ; DashboardCard ID
                      :size_x             ...
diff --git a/docs/api/database.md b/docs/api/database.md
index d13a34e0af3d11519e41cfa656b84c795dab90b5..ac67178248274790fd28ec8183fa270c26659676 100644
--- a/docs/api/database.md
+++ b/docs/api/database.md
@@ -16,7 +16,7 @@ You must be a superuser to do this.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/database/`
 
@@ -63,9 +63,9 @@ Get a single Database with `id`. Optionally pass `?include=tables` or `?include=
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`include`** value may be nil, or if non-nil, value must be one of: `tables`, `tables.fields`.
+*  **`include`** nullable enum of tables, tables.fields
 
 *  **`include_editable_data_model`** 
 
@@ -85,11 +85,11 @@ Return a list of autocomplete suggestions for a given `prefix`, or `substring`.
 
 ### PARAMS:
 
-*  **`id`** value must be an integer.
+*  **`id`** value must be an integer greater than zero.
 
-*  **`prefix`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`prefix`** nullable value must be a non-blank string.
 
-*  **`substring`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`substring`** nullable value must be a non-blank string.
 
 ## `GET /api/database/:id/card_autocomplete_suggestions`
 
@@ -99,7 +99,7 @@ Return a list of `Card` autocomplete suggestions for a given `query` in a given
 
 ### PARAMS:
 
-*  **`id`** value must be an integer.
+*  **`id`** value must be an integer greater than zero.
 
 *  **`query`** value must be a non-blank string.
 
@@ -109,7 +109,7 @@ Get a list of all `Fields` in `Database`.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/database/:id/idfields`
 
@@ -117,7 +117,7 @@ Get a list of all primary key `Fields` for `Database`.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`include_editable_data_model`**
 
@@ -133,11 +133,13 @@ Get metadata about a `Database`, including all of its `Tables` and `Fields`. Ret
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`include_hidden`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_hidden`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`include_editable_data_model`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
+
+*  **`remove_inactive`** nullable value must be a valid boolean string ('true' or 'false').
 
 ## `GET /api/database/:id/schema/`
 
@@ -225,10 +227,6 @@ Returns a list of Tables for the saved questions virtual database.
 
 Returns a list of all the schemas found for the saved questions virtual database.
 
-## `GET /api/database/db-ids-with-deprecated-drivers`
-
-Return a list of database IDs using currently deprecated drivers.
-
 ## `POST /api/database/`
 
 Add a new `Database`.
@@ -241,17 +239,17 @@ You must be a superuser to do this.
 
 *  **`engine`** value must be a valid database engine.
 
-*  **`details`** value must be a map.
+*  **`details`** Value must be a map.
 
-*  **`is_full_sync`** value may be nil, or if non-nil, value must be a boolean.
+*  **`is_full_sync`** nullable boolean
 
-*  **`is_on_demand`** value may be nil, or if non-nil, value must be a boolean.
+*  **`is_on_demand`** nullable boolean
 
-*  **`schedules`** value may be nil, or if non-nil, value must be a valid map of schedule maps for a DB.
+*  **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap
 
-*  **`auto_run_queries`** value may be nil, or if non-nil, value must be a boolean.
+*  **`auto_run_queries`** nullable boolean
 
-*  **`cache_ttl`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`cache_ttl`** nullable value must be an integer greater than zero.
 
 ## `POST /api/database/:id/discard_values`
 
@@ -259,7 +257,7 @@ Discards all saved field values for this `Database`.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/database/:id/dismiss_spinner`
 
@@ -268,7 +266,7 @@ Manually set the initial sync status of the `Database` and corresponding
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/database/:id/persist`
 
@@ -276,7 +274,7 @@ Attempt to enable model persistence for a database. If already enabled returns a
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/database/:id/rescan_values`
 
@@ -300,7 +298,7 @@ Attempt to disable model persistence for a database. If already not enabled, jus
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/database/sample_database`
 
@@ -318,7 +316,7 @@ You must be a superuser to do this.
 
 *  **`engine`** value must be a valid database engine.
 
-*  **`details`** value must be a map.
+*  **`details`** map
 
 ## `PUT /api/database/:id`
 
@@ -326,31 +324,31 @@ Update a `Database`.
 
 ### PARAMS:
 
-*  **`engine`** value may be nil, or if non-nil, value must be a valid database engine.
+*  **`engine`** nullable value must be a valid database engine.
 
-*  **`schedules`** value may be nil, or if non-nil, value must be a valid map of schedule maps for a DB.
+*  **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap
 
-*  **`refingerprint`** value may be nil, or if non-nil, value must be a boolean.
+*  **`refingerprint`** nullable boolean
 
-*  **`points_of_interest`** value may be nil, or if non-nil, value must be a string.
+*  **`points_of_interest`** nullable string
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`auto_run_queries`** value may be nil, or if non-nil, value must be a boolean.
+*  **`auto_run_queries`** nullable boolean
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`settings`** value may be nil, or if non-nil, value must be a map.
+*  **`settings`** nullable Value must be a map.
 
-*  **`caveats`** value may be nil, or if non-nil, value must be a string.
+*  **`caveats`** nullable string
 
 *  **`is_full_sync`** 
 
-*  **`cache_ttl`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`cache_ttl`** nullable value must be an integer greater than zero.
 
-*  **`details`** value may be nil, or if non-nil, value must be a map.
+*  **`details`** nullable Value must be a map.
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`is_on_demand`**
 
diff --git a/docs/api/dataset.md b/docs/api/dataset.md
index dbfafe7abd6a47f5d5330166af5d085e8fa5ed41..682b7e505e5bd1ec4fc4ed1d41472b6427beea07 100644
--- a/docs/api/dataset.md
+++ b/docs/api/dataset.md
@@ -14,7 +14,7 @@ Execute a query and retrieve the results in the usual format. The query will not
 
 ### PARAMS:
 
-*  **`database`** value may be nil, or if non-nil, value must be an integer.
+*  **`database`** nullable integer
 
 *  **`query`**
 
@@ -58,7 +58,7 @@ Return parameter values for cards or dashboards that are being edited. Expects a
 
 ### PARAMS:
 
-*  **`query`** string
+*  **`query`** value must be a non-blank string.
 
 *  **`parameter`** parameter must be a map with :id and :type keys
 
diff --git a/docs/api/ee/audit-app-user.md b/docs/api/ee/audit-app-user.md
index 5f2cdd86175fff456d8e63c4ce53efe53fcbd191..100eef9466265908a9a4500eed2526558686a60c 100644
--- a/docs/api/ee/audit-app-user.md
+++ b/docs/api/ee/audit-app-user.md
@@ -15,7 +15,7 @@ Delete all Alert and DashboardSubscription subscriptions for a User (i.e., so th
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ---
 
diff --git a/docs/api/ee/content-management-review.md b/docs/api/ee/content-management-review.md
deleted file mode 100644
index 09c1d1466b10fa078a3a7b6684d500a37c0794fa..0000000000000000000000000000000000000000
--- a/docs/api/ee/content-management-review.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: "Content management review"
-summary: |
-  API endpoints for Content management review.
----
-
-# Content management review
-
-API endpoints for Content management review.
-
-## `POST /api/moderation-review/review/`
-
-Create a new `ModerationReview`.
-
-You must be a superuser to do this.
-
-### PARAMS:
-
-*  **`text`** value may be nil, or if non-nil, value must be a string.
-
-*  **`moderated_item_id`** value must be an integer greater than zero.
-
-*  **`moderated_item_type`** value must be one of: `:card`, `:dashboard`, `card`, `dashboard`.
-
-*  **`status`** value must be one of: ``, `verified`.
-
----
-
-[<< Back to API index](../../api-documentation.md)
\ No newline at end of file
diff --git a/docs/api/ee/content-verification-review.md b/docs/api/ee/content-verification-review.md
new file mode 100644
index 0000000000000000000000000000000000000000..3395377534bd5010d33720d17a83000022b0ac84
--- /dev/null
+++ b/docs/api/ee/content-verification-review.md
@@ -0,0 +1,29 @@
+---
+title: "Content verification review"
+summary: |
+  API endpoints for Content verification review.
+---
+
+# Content verification review
+
+API endpoints for Content verification review.
+
+## `POST /api/moderation-review/review/`
+
+Create a new `ModerationReview`.
+
+You must be a superuser to do this.
+
+### PARAMS:
+
+*  **`text`** nullable string
+
+*  **`moderated_item_id`** value must be an integer greater than zero.
+
+*  **`moderated_item_type`** enum of card, :card
+
+*  **`status`** nullable nullable enum of verified
+
+---
+
+[<< Back to API index](../../api-documentation.md)
\ No newline at end of file
diff --git a/docs/api/ee/sandbox-gtap.md b/docs/api/ee/sandbox-gtap.md
index 107da9b5bd7094a235b8d385c5aab5507f19127c..44d64001eaf3574442d88b60083409da118123fd 100644
--- a/docs/api/ee/sandbox-gtap.md
+++ b/docs/api/ee/sandbox-gtap.md
@@ -42,7 +42,7 @@ Create a new GTAP.
 
 *  **`table_id`** value must be an integer greater than zero.
 
-*  **`card_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`card_id`** nullable value must be an integer greater than zero.
 
 *  **`group_id`** value must be an integer greater than zero.
 
@@ -67,9 +67,9 @@ Update a GTAP entry. The only things you're allowed to update for a GTAP are the
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`card_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`card_id`** nullable value must be an integer greater than zero.
 
 ---
 
diff --git a/docs/api/ee/sandbox-table.md b/docs/api/ee/sandbox-table.md
index 4a6ed20954c7c9aab45cec778fcc5d1927618632..5b01bdb5456874bdb47099dd26f4f61b885c05f9 100644
--- a/docs/api/ee/sandbox-table.md
+++ b/docs/api/ee/sandbox-table.md
@@ -10,7 +10,7 @@ API endpoints for Sandbox table.
 
 ## `GET /api/table/:id/query_metadata`
 
-This endpoint essentially acts as a wrapper for the OSS version of this route. When a user has segmented permissions
+This endpoint essentially acts as a wrapper for the OSS version of this route. When a user has sandboxed permissions
   that only gives them access to a subset of columns for a given table, those inaccessable columns should also be
   excluded from what is show in the query builder. When the user has full permissions (or no permissions) this route
   doesn't add/change anything from the OSS version. See the docs on the OSS version of the endpoint for more
@@ -18,13 +18,13 @@ This endpoint essentially acts as a wrapper for the OSS version of this route. W
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`include_sensitive_fields`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_sensitive_fields`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`include_hidden_fields`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_hidden_fields`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`include_editable_data_model`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
 
 ---
 
diff --git a/docs/api/ee/serialization-serialize.md b/docs/api/ee/serialization-serialize.md
deleted file mode 100644
index 3633cfce6c38e6187949fa49b447e608c9fc8076..0000000000000000000000000000000000000000
--- a/docs/api/ee/serialization-serialize.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: "Serialization serialize"
-summary: |
-  /api/ee/serialization/serialize endpoints.
----
-
-# Serialization serialize
-
-/api/ee/serialization/serialize endpoints.
-
-## `POST /api/ee/serialization/serialize/data-model`
-
-This endpoint should serialize: the data model, settings.yaml, and all the selected Collections
-
-  The data model should only change if the user triggers a manual sync or scan (since the scheduler is turned off)
-
-  The user will need to add somewhere (probably in the admin panel):
-
-  - A path (maybe we can assume it will always dump to the same path as the Metabase jar, but we probably want to let
-    them define the path)
-
-  - The collections that they want to serialize (using selective serialization).
-
-### PARAMS:
-
-*  **`collection_ids`** Non-empty, distinct array of Collection IDs
-
-*  **`path`** Valid directory to serialize results to
-
----
-
-[<< Back to API index](../../api-documentation.md)
\ No newline at end of file
diff --git a/docs/api/field.md b/docs/api/field.md
index cb46a027921fb9b6474d3738fa445feee84c9c15..5c1e501d10774817d4d47c60ca83e24b3a2b8010 100644
--- a/docs/api/field.md
+++ b/docs/api/field.md
@@ -14,7 +14,7 @@ Remove the dimension associated to field at ID.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/field/:id`
 
@@ -22,9 +22,9 @@ Get `Field` with ID.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`include_editable_data_model`**
+*  **`include_editable_data_model`** value must be a valid boolean string ('true' or 'false').
 
 ## `GET /api/field/:id/related`
 
@@ -32,7 +32,7 @@ Return related entities.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/field/:id/remapping/:remapped-id`
 
@@ -40,11 +40,11 @@ Fetch remapped Field values.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`remapped-id`** 
+*  **`remapped-id`** value must be an integer greater than zero.
 
-*  **`value`**
+*  **`value`** value must be a non-blank string.
 
 ## `GET /api/field/:id/search/:search-id`
 
@@ -53,9 +53,9 @@ Search for values of a Field with `search-id` that start with `value`. See docst
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`search-id`** 
+*  **`search-id`** value must be an integer greater than zero.
 
 *  **`value`** value must be a non-blank string.
 
@@ -65,11 +65,11 @@ Get the count and distinct count of `Field` with ID.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/field/:id/values`
 
-If a Field's value of `has_field_values` is `:list`, return a list of all the distinct values of the Field, and (if
+If a Field's value of `has_field_values` is `:list`, return a list of all the distinct values of the Field (or remapped Field), and (if
   defined by a User) a map of human-readable remapped values.
 
 ### PARAMS:
@@ -91,13 +91,13 @@ Sets the dimension for the given field at ID.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`type`** value must be one of: `external`, `internal`.
+*  **`dimension-type`** enum of internal, external
 
-*  **`name`** value must be a non-blank string.
+*  **`dimension-name`** value must be a non-blank string.
 
-*  **`human_readable_field_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`human_readable_field_id`** nullable value must be an integer greater than zero.
 
 ## `POST /api/field/:id/discard_values`
 
@@ -106,7 +106,7 @@ Discard the FieldValues belonging to this Field. Only applies to fields that hav
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/field/:id/rescan_values`
 
@@ -115,7 +115,7 @@ Manually trigger an update for the FieldValues for this Field. Only applies to F
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/field/:id/values`
 
@@ -124,9 +124,9 @@ Update the fields values and human-readable values for a `Field` whose semantic
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`value-pairs`** value must be an array. Each value must be an array.
+*  **`value-pairs`** sequence of vector with exactly 1 items of type: anything, or vector with exactly 2 items of type: anything, value must be a non-blank string.
 
 ## `PUT /api/field/:id`
 
@@ -134,31 +134,31 @@ Update `Field` with ID.
 
 ### PARAMS:
 
-*  **`visibility_type`** value may be nil, or if non-nil, value must be one of: `details-only`, `hidden`, `normal`, `retired`, `sensitive`.
+*  **`visibility_type`** nullable enum of retired, sensitive, normal, hidden, details-only
 
-*  **`display_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`display_name`** nullable value must be a non-blank string.
 
-*  **`points_of_interest`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`points_of_interest`** nullable value must be a non-blank string.
 
-*  **`description`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`description`** nullable value must be a non-blank string.
 
-*  **`semantic_type`** value may be nil, or if non-nil, value must be a valid field semantic or relation type (keyword or string).
+*  **`semantic_type`** nullable value must be a valid field semantic or relation type (keyword or string).
 
-*  **`coercion_strategy`** value may be nil, or if non-nil, value must be a valid coercion strategy (keyword or string).
+*  **`coercion_strategy`** nullable value must be a valid coercion strategy (keyword or string).
 
-*  **`has_field_values`** value may be nil, or if non-nil, value must be one of: `auto-list`, `list`, `none`, `search`.
+*  **`has_field_values`** nullable enum of auto-list, search, list, none
 
-*  **`settings`** value may be nil, or if non-nil, value must be a map.
+*  **`settings`** nullable Value must be a map.
 
-*  **`caveats`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`caveats`** nullable value must be a non-blank string.
 
-*  **`fk_target_field_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`fk_target_field_id`** nullable value must be an integer greater than zero.
 
-*  **`nfc_path`** value may be nil, or if non-nil, value must be an array. Each value must be a non-blank string.
+*  **`nfc_path`** nullable sequence of value must be a non-blank string.
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`json_unfolding`** value may be nil, or if non-nil, value must be a boolean.
+*  **`json_unfolding`** nullable boolean
 
 ---
 
diff --git a/docs/api/google.md b/docs/api/google.md
index d7d8216d99bd9b890dc614ffcb2704872d550bf6..94cb4f4427f90cb78ab02be15c4057656bd62191 100644
--- a/docs/api/google.md
+++ b/docs/api/google.md
@@ -16,11 +16,11 @@ You must be a superuser to do this.
 
 ### PARAMS:
 
-*  **`google-auth-client-id`** value may be nil, or if non-nil, value must be a string.
+*  **`google-auth-client-id`** nullable string
 
-*  **`google-auth-enabled`** value may be nil, or if non-nil, value must be a boolean.
+*  **`google-auth-enabled`** nullable boolean
 
-*  **`google-auth-auto-create-accounts-domain`** value may be nil, or if non-nil, value must be a string.
+*  **`google-auth-auto-create-accounts-domain`** nullable string
 
 ---
 
diff --git a/docs/api/ldap.md b/docs/api/ldap.md
index 93bf9c0b8df7bee4ebdbc8f1b35203da2c67591a..56f93a764e6bb840a636ef80cf14e1c780409a86 100644
--- a/docs/api/ldap.md
+++ b/docs/api/ldap.md
@@ -16,7 +16,7 @@ You must be a superuser to do this.
 
 ### PARAMS:
 
-*  **`settings`** value must be a map.
+*  **`settings`** map
 
 ---
 
diff --git a/docs/api/metric.md b/docs/api/metric.md
index f1efc7886bfddf077565410e08d492c35c4b15db..0aa0e799307e41a7312a43172cbaa85ffb7d27fc 100644
--- a/docs/api/metric.md
+++ b/docs/api/metric.md
@@ -14,7 +14,7 @@ Archive a Metric. (DEPRECATED -- Just pass updated value of `:archived` to the `
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`revision_message`** value must be a non-blank string.
 
@@ -36,7 +36,7 @@ Return related entities.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/metric/:id/revisions`
 
@@ -44,7 +44,7 @@ Fetch `Revisions` for `Metric` with ID.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/metric/`
 
@@ -54,11 +54,11 @@ Create a new `Metric`.
 
 *  **`name`** value must be a non-blank string.
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
 *  **`table_id`** value must be an integer greater than zero.
 
-*  **`definition`** value must be a map.
+*  **`definition`** map
 
 ## `POST /api/metric/:id/revert`
 
@@ -66,7 +66,7 @@ Revert a `Metric` to a prior `Revision`.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`revision_id`** value must be an integer greater than zero.
 
@@ -76,25 +76,25 @@ Update a `Metric` with ID.
 
 ### PARAMS:
 
-*  **`points_of_interest`** value may be nil, or if non-nil, value must be a string.
+*  **`points_of_interest`** nullable string
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
-*  **`definition`** value may be nil, or if non-nil, value must be a map.
+*  **`definition`** nullable map
 
 *  **`revision_message`** value must be a non-blank string.
 
-*  **`show_in_getting_started`** value may be nil, or if non-nil, value must be a boolean.
+*  **`show_in_getting_started`** nullable boolean
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`caveats`** value may be nil, or if non-nil, value must be a string.
+*  **`caveats`** nullable string
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`how_is_this_calculated`** value may be nil, or if non-nil, value must be a string.
+*  **`how_is_this_calculated`** nullable string
 
 ## `PUT /api/metric/:id/important_fields`
 
@@ -105,9 +105,9 @@ You must be a superuser to do this.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`important_field_ids`** value must be an array. Each value must be an integer greater than zero.
+*  **`important_field_ids`** sequence of value must be an integer greater than zero.
 
 ---
 
diff --git a/docs/api/native-query-snippet.md b/docs/api/native-query-snippet.md
index 2673366092f679614bbe5f8494290aba04b63e12..01fb21fb20b62a00a5f74344d09a538c3bd1e021 100644
--- a/docs/api/native-query-snippet.md
+++ b/docs/api/native-query-snippet.md
@@ -14,7 +14,7 @@ Fetch all snippets.
 
 ### PARAMS:
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
 ## `GET /api/native-query-snippet/:id`
 
@@ -22,7 +22,7 @@ Fetch native query snippet with ID.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/native-query-snippet/`
 
@@ -30,13 +30,13 @@ Create a new `NativeQuerySnippet`.
 
 ### PARAMS:
 
-*  **`content`** value must be a string.
+*  **`content`** string
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
 *  **`name`** snippet names cannot include } or start with spaces
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
 ## `PUT /api/native-query-snippet/:id`
 
@@ -44,17 +44,17 @@ Update an existing `NativeQuerySnippet`.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
-*  **`content`** value may be nil, or if non-nil, value must be a string.
+*  **`content`** nullable string
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`name`** value may be nil, or if non-nil, snippet names cannot include } or start with spaces
+*  **`name`** nullable snippet names cannot include } or start with spaces
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
 ---
 
diff --git a/docs/api/permissions.md b/docs/api/permissions.md
index b681b226a88fdad7bc18f7eb7b395c1e4168812c..32974ef50e80dfaa78a329036e4b7794c0789d6f 100644
--- a/docs/api/permissions.md
+++ b/docs/api/permissions.md
@@ -14,7 +14,7 @@ Delete a specific `PermissionsGroup`.
 
 ### PARAMS:
 
-*  **`group-id`**
+*  **`group-id`** value must be an integer greater than zero.
 
 ## `DELETE /api/permissions/membership/:id`
 
@@ -55,7 +55,7 @@ Fetch the details for a certain permissions group.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/permissions/membership`
 
@@ -131,7 +131,7 @@ Update the name of a `PermissionsGroup`.
 
 ### PARAMS:
 
-*  **`group-id`** 
+*  **`group-id`** value must be an integer greater than zero.
 
 *  **`name`** value must be a non-blank string.
 
diff --git a/docs/api/persist.md b/docs/api/persist.md
index 7878a5c6f158f01f5fea2bea42f203d88ecded05..35ff22d63f8eb825b607081dc7574a6deefb3fa3 100644
--- a/docs/api/persist.md
+++ b/docs/api/persist.md
@@ -18,7 +18,7 @@ Fetch a particular [[PersistedInfo]] by id.
 
 ### PARAMS:
 
-*  **`persisted-info-id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`persisted-info-id`** nullable value must be an integer greater than zero.
 
 ## `GET /api/persist/card/:card-id`
 
@@ -26,7 +26,7 @@ Fetch a particular [[PersistedInfo]] by card-id.
 
 ### PARAMS:
 
-*  **`card-id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`card-id`** nullable value must be an integer greater than zero.
 
 ## `POST /api/persist/disable`
 
diff --git a/docs/api/premium-features.md b/docs/api/premium-features.md
index 42bae160de9066e32828699dc9c26f13bb7342d0..ec4a43e3d97c9522ec713d7e02d656c81a3b24a6 100644
--- a/docs/api/premium-features.md
+++ b/docs/api/premium-features.md
@@ -15,4 +15,4 @@ Fetch info about the current Premium-Features premium features token including w
 
 ---
 
-[<< Back to API index](../api-documentation.md)
+[<< Back to API index](../api-documentation.md)
\ No newline at end of file
diff --git a/docs/api/preview-embed.md b/docs/api/preview-embed.md
index 1d590be23b656a874f374f07c6950f065d59362d..857e90047cdf4255f82dc3305c4f860034190dd4 100644
--- a/docs/api/preview-embed.md
+++ b/docs/api/preview-embed.md
@@ -30,7 +30,7 @@ Fetch a Card you're considering embedding by passing a JWT `token`.
 
 ### PARAMS:
 
-*  **`token`**
+*  **`token`** value must be a non-blank string.
 
 ## `GET /api/preview-embed/card/:token/query`
 
@@ -38,7 +38,7 @@ Fetch the query results for a Card you're considering embedding by passing a JWT
 
 ### PARAMS:
 
-*  **`token`** 
+*  **`token`** value must be a non-blank string.
 
 *  **`&`** 
 
@@ -50,7 +50,7 @@ Fetch a Dashboard you're considering embedding by passing a JWT `token`. .
 
 ### PARAMS:
 
-*  **`token`**
+*  **`token`** value must be a non-blank string.
 
 ## `GET /api/preview-embed/dashboard/:token/dashcard/:dashcard-id/card/:card-id`
 
@@ -58,11 +58,11 @@ Fetch the results of running a Card belonging to a Dashboard you're considering
 
 ### PARAMS:
 
-*  **`token`** 
+*  **`token`** value must be a non-blank string.
 
-*  **`dashcard-id`** 
+*  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`card-id`** 
+*  **`card-id`** value must be an integer greater than zero.
 
 *  **`&`** 
 
@@ -74,7 +74,7 @@ Fetch the query results for a Card you're considering embedding by passing a JWT
 
 ### PARAMS:
 
-*  **`token`** 
+*  **`token`** value must be a non-blank string.
 
 *  **`&`** 
 
@@ -86,11 +86,11 @@ Fetch the results of running a Card belonging to a Dashboard you're considering
 
 ### PARAMS:
 
-*  **`token`** 
+*  **`token`** value must be a non-blank string.
 
-*  **`dashcard-id`** 
+*  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`card-id`** 
+*  **`card-id`** value must be an integer greater than zero.
 
 *  **`&`** 
 
diff --git a/docs/api/public.md b/docs/api/public.md
index 59c389b738adb24c44c42acc239344a28ba9f59c..95b6ae40717e305158feaf508e19a9bddb340da3 100644
--- a/docs/api/public.md
+++ b/docs/api/public.md
@@ -23,7 +23,7 @@ Fetch a publicly-accessible Card an return query results as well as `:card` info
 
 ### PARAMS:
 
-*  **`uuid`**
+*  **`uuid`** value must be a valid UUID.
 
 ## `GET /api/public/card/:uuid/field/:field-id/remapping/:remapped-id`
 
@@ -32,11 +32,11 @@ Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`field-id`** 
+*  **`field-id`** value must be an integer greater than zero.
 
-*  **`remapped-id`** 
+*  **`remapped-id`** value must be an integer greater than zero.
 
 *  **`value`** value must be a non-blank string.
 
@@ -46,15 +46,15 @@ Search for values of a Field that is referenced by a public Card.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`field-id`** 
+*  **`field-id`** value must be an integer greater than zero.
 
-*  **`search-field-id`** 
+*  **`search-field-id`** value must be an integer greater than zero.
 
 *  **`value`** value must be a non-blank string.
 
-*  **`limit`** value may be nil, or if non-nil, value must be a valid integer greater than zero.
+*  **`limit`** nullable value must be an integer greater than zero.
 
 ## `GET /api/public/card/:uuid/field/:field-id/values`
 
@@ -62,9 +62,9 @@ Fetch FieldValues for a Field that is referenced by a public Card.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`field-id`**
+*  **`field-id`** value must be an integer greater than zero.
 
 ## `GET /api/public/card/:uuid/params/:param-key/search/:query`
 
@@ -72,11 +72,11 @@ Fetch values for a parameter on a public card containing `query`.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`param-key`** 
+*  **`param-key`** value must be a non-blank string.
 
-*  **`query`**
+*  **`query`** value must be a non-blank string.
 
 ## `GET /api/public/card/:uuid/params/:param-key/values`
 
@@ -84,9 +84,9 @@ Fetch values for a parameter on a public card.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`param-key`**
+*  **`param-key`** value must be a non-blank string.
 
 ## `GET /api/public/card/:uuid/query`
 
@@ -95,22 +95,22 @@ Fetch a publicly-accessible Card an return query results as well as `:card` info
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a valid JSON string.
+*  **`parameters`** nullable value must be a valid JSON string.
 
 ## `GET /api/public/card/:uuid/query/:export-format`
 
 Fetch a publicly-accessible Card and return query results in the specified format. Does not require auth
-   credentials. Public sharing must be enabled.
+  credentials. Public sharing must be enabled.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`export-format`** value must be one of: `api`, `csv`, `json`, `xlsx`.
+*  **`export-format`** enum of csv, api, xlsx, json
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a valid JSON string.
+*  **`parameters`** nullable value must be a valid JSON string.
 
 ## `GET /api/public/dashboard/:uuid`
 
@@ -118,7 +118,7 @@ Fetch a publicly-accessible Dashboard. Does not require auth credentials. Public
 
 ### PARAMS:
 
-*  **`uuid`**
+*  **`uuid`** value must be a valid UUID.
 
 ## `GET /api/public/dashboard/:uuid/dashcard/:dashcard-id/card/:card-id`
 
@@ -127,13 +127,13 @@ Fetch the results for a Card in a publicly-accessible Dashboard. Does not requir
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`card-id`** 
+*  **`card-id`** value must be an integer greater than zero.
 
-*  **`dashcard-id`** 
+*  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a valid JSON string.
+*  **`parameters`** nullable value must be a valid JSON string.
 
 ## `GET /api/public/dashboard/:uuid/dashcard/:dashcard-id/execute`
 
@@ -141,7 +141,7 @@ Fetches the values for filling in execution parameters. Pass PK parameters and v
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
 *  **`dashcard-id`** value must be an integer greater than zero.
 
@@ -154,11 +154,11 @@ Fetch remapped Field values. This is the same as `GET /api/field/:id/remapping/:
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`field-id`** 
+*  **`field-id`** value must be an integer greater than zero.
 
-*  **`remapped-id`** 
+*  **`remapped-id`** value must be an integer greater than zero.
 
 *  **`value`** value must be a non-blank string.
 
@@ -168,15 +168,15 @@ Search for values of a Field that is referenced by a Card in a public Dashboard.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`field-id`** 
+*  **`field-id`** value must be an integer greater than zero.
 
-*  **`search-field-id`** 
+*  **`search-field-id`** value must be an integer greater than zero.
 
 *  **`value`** value must be a non-blank string.
 
-*  **`limit`** value may be nil, or if non-nil, value must be a valid integer greater than zero.
+*  **`limit`** nullable value must be an integer greater than zero.
 
 ## `GET /api/public/dashboard/:uuid/field/:field-id/values`
 
@@ -184,9 +184,9 @@ Fetch FieldValues for a Field that is referenced by a Card in a public Dashboard
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`field-id`**
+*  **`field-id`** value must be an integer greater than zero.
 
 ## `GET /api/public/dashboard/:uuid/params/:param-key/search/:query`
 
@@ -194,13 +194,13 @@ Fetch filter values for dashboard parameter `param-key`, containing specified `q
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`param-key`** 
+*  **`param-key`** value must be a non-blank string.
 
-*  **`query`** 
+*  **`query`** value must be a non-blank string.
 
-*  **`query-params`**
+*  **`constraint-param-key->value`**
 
 ## `GET /api/public/dashboard/:uuid/params/:param-key/values`
 
@@ -208,11 +208,11 @@ Fetch filter values for dashboard parameter `param-key`.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`param-key`** 
+*  **`param-key`** value must be a non-blank string.
 
-*  **`query-params`**
+*  **`constraint-param-key->value`**
 
 ## `GET /api/public/oembed`
 
@@ -222,11 +222,11 @@ oEmbed endpoint used to retreive embed code and metadata for a (public) Metabase
 
 *  **`url`** value must be a non-blank string.
 
-*  **`format`** value may be nil, or if non-nil, value must be one of: `json`.
+*  **`format`** nullable enum of json
 
-*  **`maxheight`** value may be nil, or if non-nil, value must be a valid integer.
+*  **`maxheight`** nullable value must be a valid integer.
 
-*  **`maxwidth`** value may be nil, or if non-nil, value must be a valid integer.
+*  **`maxwidth`** nullable value must be a valid integer.
 
 ## `GET /api/public/pivot/card/:uuid/query`
 
@@ -235,24 +235,24 @@ Fetch a publicly-accessible Card an return query results as well as `:card` info
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a valid JSON string.
+*  **`parameters`** nullable value must be a valid JSON string.
 
 ## `GET /api/public/pivot/dashboard/:uuid/dashcard/:dashcard-id/card/:card-id`
 
 Fetch the results for a Card in a publicly-accessible Dashboard. Does not require auth credentials. Public
-   sharing must be enabled.
+  sharing must be enabled.
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
-*  **`card-id`** 
+*  **`card-id`** value must be an integer greater than zero.
 
-*  **`dashcard-id`** 
+*  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a valid JSON string.
+*  **`parameters`** nullable value must be a valid JSON string.
 
 ## `POST /api/public/action/:uuid/execute`
 
@@ -276,18 +276,11 @@ Execute the associated Action in the context of a `Dashboard` and `DashboardCard
 
 ### PARAMS:
 
-*  **`uuid`** 
+*  **`uuid`** value must be a valid UUID.
 
 *  **`dashcard-id`** value must be an integer greater than zero.
 
-*  **`parameters`** value may be nil, or if non-nil, value must be a map with schema: (
-  value must be a map with schema: (
-    p? : 
-    pred-name : 
-  ) : value must be a map with schema: (
-    _ : 
-  )
-)
+*  **`parameters`** nullable map from <keyword> to <anything>
 
 *  **`_body`**
 
diff --git a/docs/api/pulse.md b/docs/api/pulse.md
index e8d27c20c6a8c4b7c8e0b3a3cda251398edf7324..4a236db95bd220d12cfa5cf01e6d4fb557f0f7a7 100644
--- a/docs/api/pulse.md
+++ b/docs/api/pulse.md
@@ -14,7 +14,7 @@ For users to unsubscribe themselves from a pulse subscription.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/pulse/`
 
@@ -31,11 +31,11 @@ Fetch all dashboard subscriptions. By default, returns only subscriptions for wh
 
 ### PARAMS:
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`dashboard_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`dashboard_id`** nullable value must be an integer greater than zero.
 
-*  **`creator_or_recipient`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`creator_or_recipient`** nullable value must be a valid boolean string ('true' or 'false').
 
 ## `GET /api/pulse/:id`
 
@@ -44,7 +44,7 @@ Fetch `Pulse` with ID. If the user is a recipient of the Pulse but does not have
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/pulse/form_input`
 
@@ -56,7 +56,7 @@ Get HTML rendering of a Card with `id`.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/pulse/preview_card_info/:id`
 
@@ -64,7 +64,7 @@ Get JSON object containing HTML rendering of a Card with `id` and other informat
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/pulse/preview_card_png/:id`
 
@@ -72,7 +72,7 @@ Get PNG rendering of a Card with `id`.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/pulse/`
 
@@ -82,19 +82,19 @@ Create a new `Pulse`.
 
 *  **`name`** value must be a non-blank string.
 
-*  **`cards`** value must be an array. Each value must satisfy one of the following requirements: 1) value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)` 2) value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`. The array cannot be empty.
+*  **`cards`** one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
 
-*  **`channels`** value must be an array. Each value must be a map. The array cannot be empty.
+*  **`channels`** one or more map
 
-*  **`skip_if_empty`** value may be nil, or if non-nil, value must be a boolean.
+*  **`skip_if_empty`** nullable boolean
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
-*  **`collection_position`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_position`** nullable value must be an integer greater than zero.
 
-*  **`dashboard_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`dashboard_id`** nullable value must be an integer greater than zero.
 
-*  **`parameters`** value must be an array. Each value must be a map.
+*  **`parameters`** nullable sequence of map
 
 ## `POST /api/pulse/test`
 
@@ -104,17 +104,17 @@ Test send an unsaved pulse.
 
 *  **`name`** value must be a non-blank string.
 
-*  **`cards`** value must be an array. Each value must satisfy one of the following requirements: 1) value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)` 2) value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`. The array cannot be empty.
+*  **`cards`** one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
 
-*  **`channels`** value must be an array. Each value must be a map. The array cannot be empty.
+*  **`channels`** one or more map
 
-*  **`skip_if_empty`** value may be nil, or if non-nil, value must be a boolean.
+*  **`skip_if_empty`** nullable boolean
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
-*  **`collection_position`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_position`** nullable value must be an integer greater than zero.
 
-*  **`dashboard_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`dashboard_id`** nullable value must be an integer greater than zero.
 
 ## `PUT /api/pulse/:id`
 
@@ -122,21 +122,21 @@ Update a Pulse with `id`.
 
 ### PARAMS:
 
-*  **`skip_if_empty`** value may be nil, or if non-nil, value must be a boolean.
+*  **`skip_if_empty`** nullable boolean
 
-*  **`parameters`** value must be an array. Each value must be a map.
+*  **`parameters`** nullable sequence of Value must be a map.
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
-*  **`channels`** value may be nil, or if non-nil, value must be an array. Each value must be a map. The array cannot be empty.
+*  **`channels`** nullable one or more map
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`cards`** value may be nil, or if non-nil, value must be an array. Each value must satisfy one of the following requirements: 1) value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)` 2) value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`. The array cannot be empty.
+*  **`cards`** nullable one or more value must be a map with the following keys `(collection_id, description, display, id, include_csv, include_xls, name, dashboard_id, parameter_mappings)`, or value must be a map with the keys `id`, `include_csv`, `include_xls`, and `dashboard_card_id`.
 
 *  **`pulse-updates`**
 
diff --git a/docs/api/revision.md b/docs/api/revision.md
index 6ce5fc36c8993acb7a1552740fdcb411b9ac4749..2fdd8ba8bbac13a7bd4bd61ea13940e025da57cc 100644
--- a/docs/api/revision.md
+++ b/docs/api/revision.md
@@ -14,9 +14,9 @@ Get revisions of an object.
 
 ### PARAMS:
 
-*  **`entity`** value must be one of: `card`, `dashboard`.
+*  **`entity`** enum of card, dashboard
 
-*  **`id`** value must be an integer.
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/revision/revert`
 
@@ -24,11 +24,11 @@ Revert an object to a prior revision.
 
 ### PARAMS:
 
-*  **`entity`** value must be one of: `card`, `dashboard`.
+*  **`entity`** enum of card, dashboard
 
-*  **`id`** value must be an integer.
+*  **`id`** value must be an integer greater than zero.
 
-*  **`revision_id`** value must be an integer.
+*  **`revision_id`** value must be an integer greater than zero.
 
 ---
 
diff --git a/docs/api/search.md b/docs/api/search.md
index 82b790e3cb7da39681df563ae72ea8a143472a24..61c9f8bc9960cb21d8b7bbf95026b0e21ec521a5 100644
--- a/docs/api/search.md
+++ b/docs/api/search.md
@@ -10,24 +10,52 @@ API endpoints for Search.
 
 ## `GET /api/search/`
 
-Search within a bunch of models for the substring `q`.
-  For the list of models, check [[metabase.search.config/all-models]].
-
-  To search in archived portions of models, pass in `archived=true`.
-  To search for tables, cards, and models of a certain DB, pass in a DB id value
-  to `table_db_id`.
-  To specify a list of models, pass in an array to `models`.
-  .
+Search for items in Metabase.
+  For the list of supported models, check [[metabase.search.config/all-models]].
+
+  Filters:
+  - `archived`: set to true to search archived items only, default is false
+  - `table_db_id`: search for tables, cards, and models of a certain DB
+  - `models`: only search for items of specific models. If not provided, search for all models
+  - `filters_items_in_personal_collection`: only search for items in personal collections
+  - `created_at`: search for items created at a specific timestamp
+  - `created_by`: search for items created by a specific user
+  - `last_edited_at`: search for items last edited at a specific timestamp
+  - `last_edited_by`: search for items last edited by a specific user
+  - `search_native_query`: set to true to search the content of native queries
+  - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)
+
+  Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:
+  - The `created-by` filter supports dashboards, models, actions, and cards.
+  - The `verified` filter supports models and cards.
+
+  A search query that has both filters applied will only return models and cards.
 
 ### PARAMS:
 
-*  **`q`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`filter_items_in_personal_collection`** nullable enum of only, exclude
+
+*  **`table_db_id`** nullable value must be an integer greater than zero.
+
+*  **`created_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
+
+*  **`verified`** nullable true
+
+*  **`created_at`** nullable value must be a non-blank string.
+
+*  **`archived`** nullable boolean
+
+*  **`q`** nullable value must be a non-blank string.
+
+*  **`search_native_query`** nullable true
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`models`** nullable enum of dashboard, table, dataset, segment, collection, database, action, indexed-entity, metric, card, or sequence of enum of dashboard, table, dataset, segment, collection, database, action, indexed-entity, metric, card
 
-*  **`table_db_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`last_edited_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
 
-*  **`models`** value may be nil, or if non-nil, value must satisfy one of the following requirements: 1) value must be an array. Each value must be a non-blank string. 2) value must be a non-blank string.
+*  **`last_edited_at`** nullable value must be a non-blank string.
+
+*  **`context`** nullable enum of search-bar, search-app
 
 ## `GET /api/search/models`
 
@@ -35,9 +63,23 @@ Get the set of models that a search query will return.
 
 ### PARAMS:
 
+*  **`filter_items_in_personal_collection`** 
+
+*  **`created_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
+
+*  **`verified`** nullable true
+
+*  **`created_at`** nullable value must be a non-blank string.
+
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
+
 *  **`q`** 
 
-*  **`archived-string`** 
+*  **`search_native_query`** nullable true
+
+*  **`last_edited_by`** nullable value must be an integer greater than zero., or sequence of value must be an integer greater than zero.
+
+*  **`last_edited_at`** nullable value must be an integer greater than zero.
 
 *  **`table-db-id`** nullable value must be an integer greater than zero.
 
diff --git a/docs/api/segment.md b/docs/api/segment.md
index 2355f7d8e7cd280e335cc501e008ce70e2662b23..64011008dc89a2a7e1cd689f22206d0ef69f29a7 100644
--- a/docs/api/segment.md
+++ b/docs/api/segment.md
@@ -14,7 +14,7 @@ Archive a Segment. (DEPRECATED -- Just pass updated value of `:archived` to the
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`revision_message`** value must be a non-blank string.
 
@@ -36,7 +36,7 @@ Return related entities.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/segment/:id/revisions`
 
@@ -44,7 +44,7 @@ Fetch `Revisions` for `Segment` with ID.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/segment/`
 
@@ -54,11 +54,11 @@ Create a new `Segment`.
 
 *  **`name`** value must be a non-blank string.
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
 *  **`table_id`** value must be an integer greater than zero.
 
-*  **`definition`** value must be a map.
+*  **`definition`** Value must be a map.
 
 ## `POST /api/segment/:id/revert`
 
@@ -66,7 +66,7 @@ Revert a `Segement` to a prior `Revision`.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`revision_id`** value must be an integer greater than zero.
 
@@ -76,23 +76,23 @@ Update a `Segment` with ID.
 
 ### PARAMS:
 
-*  **`points_of_interest`** value may be nil, or if non-nil, value must be a string.
+*  **`points_of_interest`** nullable string
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
-*  **`definition`** value may be nil, or if non-nil, value must be a map.
+*  **`definition`** nullable map
 
 *  **`revision_message`** value must be a non-blank string.
 
-*  **`show_in_getting_started`** value may be nil, or if non-nil, value must be a boolean.
+*  **`show_in_getting_started`** nullable boolean
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`caveats`** value may be nil, or if non-nil, value must be a string.
+*  **`caveats`** nullable string
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ---
 
diff --git a/docs/api/session.md b/docs/api/session.md
index 4dd54eaf5510d283dfc334757591adb3ba7388ee..7b287d3919538629e1b2f805c8823185b7d1acb4 100644
--- a/docs/api/session.md
+++ b/docs/api/session.md
@@ -22,7 +22,7 @@ Check is a password reset token is valid and isn't expired.
 
 ### PARAMS:
 
-*  **`token`** value must be a string.
+*  **`token`** value must be a non-blank string.
 
 ## `GET /api/session/properties`
 
diff --git a/docs/api/setup.md b/docs/api/setup.md
index c5a06caa117fa255c8160b99acc2259613ab12e0..9454a5175c042233f2a2b5396fa4c33fecfa8fa7 100644
--- a/docs/api/setup.md
+++ b/docs/api/setup.md
@@ -31,29 +31,29 @@ Special endpoint for creating the first user during setup. This endpoint both cr
 
 *  **`engine`** 
 
-*  **`schedules`** value may be nil, or if non-nil, value must be a valid map of schedule maps for a DB.
+*  **`schedules`** nullable :metabase.sync.schedules/ExpandedSchedulesMap
 
-*  **`allow_tracking`** value may be nil, or if non-nil, value must satisfy one of the following requirements: 1) value must be a boolean. 2) value must be a valid boolean string ('true' or 'false').
+*  **`allow_tracking`** nullable boolean, or value must be a valid boolean string ('true' or 'false').
 
-*  **`invited_last_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`invited_last_name`** nullable value must be a non-blank string.
 
-*  **`site_locale`** value may be nil, or if non-nil, String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
+*  **`site_locale`** nullable String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
 
 *  **`email`** value must be a valid email address.
 
-*  **`first_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`first_name`** nullable value must be a non-blank string.
 
 *  **`request`** 
 
-*  **`auto_run_queries`** value may be nil, or if non-nil, value must be a boolean.
+*  **`auto_run_queries`** nullable boolean
 
 *  **`password`** password is too common.
 
 *  **`name`** 
 
-*  **`invited_email`** value may be nil, or if non-nil, value must be a valid email address.
+*  **`invited_email`** nullable value must be a valid email address.
 
-*  **`invited_first_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`invited_first_name`** nullable value must be a non-blank string.
 
 *  **`site_name`** value must be a non-blank string.
 
@@ -63,7 +63,7 @@ Special endpoint for creating the first user during setup. This endpoint both cr
 
 *  **`database`** 
 
-*  **`last_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`last_name`** nullable value must be a non-blank string.
 
 ## `POST /api/setup/validate`
 
diff --git a/docs/api/slack.md b/docs/api/slack.md
index 89baf3de3a8965c79d9726a778728b181b96974d..25c530ed778d88228461b8fbba2e5ba6dc9edb1e 100644
--- a/docs/api/slack.md
+++ b/docs/api/slack.md
@@ -22,9 +22,9 @@ Update Slack related settings. You must be a superuser to do this. Also updates
 
 ### PARAMS:
 
-*  **`slack-app-token`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`slack-app-token`** nullable value must be a non-blank string.
 
-*  **`slack-files-channel`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`slack-files-channel`** nullable value must be a non-blank string.
 
 ---
 
diff --git a/docs/api/table.md b/docs/api/table.md
index 83d83168b84758a1d1b46a7ad9eeea574c1729cb..282827beeed05260f0a87fccbd7fbdd864659bbc 100644
--- a/docs/api/table.md
+++ b/docs/api/table.md
@@ -45,13 +45,13 @@ Get metadata about a `Table` useful for running queries.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`include_sensitive_fields`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_sensitive_fields`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`include_hidden_fields`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_hidden_fields`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`include_editable_data_model`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_editable_data_model`** nullable value must be a valid boolean string ('true' or 'false').
 
 ## `GET /api/table/:id/related`
 
@@ -66,13 +66,17 @@ Return related entities.
 Return FK info for the 'virtual' table for a Card. This is always empty, so this endpoint
    serves mainly as a placeholder to avoid having to change anything on the frontend.
 
+### PARAMS:
+
+*  **`id`** value must be an integer greater than zero.
+
 ## `GET /api/table/card__:id/query_metadata`
 
 Return metadata for the 'virtual' table for a Card.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/table/:id/discard_values`
 
@@ -98,21 +102,21 @@ Update all `Table` in `ids`.
 
 ### PARAMS:
 
-*  **`ids`** value must be an array. Each value must be an integer greater than zero. The array cannot be empty.
+*  **`ids`** sequence of value must be an integer greater than zero.
 
-*  **`display_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`display_name`** nullable value must be a non-blank string.
 
-*  **`entity_type`** value may be nil, or if non-nil, value must be a valid entity type (keyword or string).
+*  **`entity_type`** nullable value must be a valid entity type (keyword or string).
 
-*  **`visibility_type`** value may be nil, or if non-nil, value must be one of: `cruft`, `hidden`, `technical`.
+*  **`visibility_type`** nullable enum of technical, hidden, cruft
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`caveats`** value may be nil, or if non-nil, value must be a string.
+*  **`caveats`** nullable string
 
-*  **`points_of_interest`** value may be nil, or if non-nil, value must be a string.
+*  **`points_of_interest`** nullable string
 
-*  **`show_in_getting_started`** value may be nil, or if non-nil, value must be a boolean.
+*  **`show_in_getting_started`** nullable boolean
 
 ## `PUT /api/table/:id`
 
@@ -120,23 +124,23 @@ Update `Table` with ID.
 
 ### PARAMS:
 
-*  **`visibility_type`** value may be nil, or if non-nil, value must be one of: `cruft`, `hidden`, `technical`.
+*  **`visibility_type`** nullable enum of technical, hidden, cruft
 
-*  **`field_order`** value may be nil, or if non-nil, value must be one of: `alphabetical`, `custom`, `database`, `smart`.
+*  **`field_order`** nullable enum of alphabetical, custom, database, smart
 
-*  **`display_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`display_name`** nullable value must be a non-blank string.
 
-*  **`points_of_interest`** value may be nil, or if non-nil, value must be a string.
+*  **`points_of_interest`** nullable string
 
-*  **`entity_type`** value may be nil, or if non-nil, value must be a valid entity type (keyword or string).
+*  **`entity_type`** nullable value must be a valid entity type (keyword or string).
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`show_in_getting_started`** value may be nil, or if non-nil, value must be a boolean.
+*  **`show_in_getting_started`** nullable boolean
 
-*  **`caveats`** value may be nil, or if non-nil, value must be a string.
+*  **`caveats`** nullable string
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `PUT /api/table/:id/fields/order`
 
diff --git a/docs/api/tiles.md b/docs/api/tiles.md
index ba8159bc553515a53bae863e3064582adca70f93..cc298343b0510b67ecb12af18d3c4bd33c283fd6 100644
--- a/docs/api/tiles.md
+++ b/docs/api/tiles.md
@@ -17,15 +17,15 @@ This endpoints provides an image with the appropriate pins rendered given a MBQL
 
 ### PARAMS:
 
-*  **`zoom`** value must be a valid integer.
+*  **`zoom`** value must be an integer.
 
-*  **`x`** value must be a valid integer.
+*  **`x`** value must be an integer.
 
-*  **`y`** value must be a valid integer.
+*  **`y`** value must be an integer.
 
-*  **`lat-field`** value must be a string.
+*  **`lat-field`** string
 
-*  **`lon-field`** value must be a string.
+*  **`lon-field`** string
 
 *  **`query`** value must be a valid JSON string.
 
diff --git a/docs/api/timeline-event.md b/docs/api/timeline-event.md
index 0be0005ab35729bc7a134c5501c5db8c605735ba..202bdf5da74d956b89a5e92e8f627e981fa52bc9 100644
--- a/docs/api/timeline-event.md
+++ b/docs/api/timeline-event.md
@@ -14,7 +14,7 @@ Delete a [[TimelineEvent]].
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/timeline-event/:id`
 
@@ -22,7 +22,7 @@ Fetch the [[TimelineEvent]] with `id`.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `POST /api/timeline-event/`
 
@@ -32,23 +32,23 @@ Create a new [[TimelineEvent]].
 
 *  **`timestamp`** value must be a valid date string
 
-*  **`question_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`question_id`** nullable value must be an integer greater than zero.
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
-*  **`timezone`** value must be a string.
+*  **`timezone`** string
 
-*  **`time_matters`** value may be nil, or if non-nil, value must be a boolean.
+*  **`time_matters`** nullable boolean
 
 *  **`name`** value must be a non-blank string.
 
 *  **`timeline_id`** value must be an integer greater than zero.
 
-*  **`source`** value may be nil, or if non-nil, value must be one of: `collections`, `question`.
+*  **`source`** nullable enum of collections, question
 
-*  **`icon`** value may be nil, or if non-nil, value must be one of: `cake`, `bell`, `cloud`, `mail`, `star`, `warning`.
+*  **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
 
 ## `PUT /api/timeline-event/:id`
 
@@ -56,23 +56,23 @@ Update a [[TimelineEvent]].
 
 ### PARAMS:
 
-*  **`timestamp`** value may be nil, or if non-nil, value must be a valid date string
+*  **`timestamp`** nullable value must be a valid date string
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
-*  **`timezone`** value may be nil, or if non-nil, value must be a string.
+*  **`timezone`** nullable string
 
-*  **`time_matters`** value may be nil, or if non-nil, value must be a boolean.
+*  **`time_matters`** nullable boolean
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`timeline_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`timeline_id`** nullable value must be an integer greater than zero.
 
-*  **`icon`** value may be nil, or if non-nil, value must be one of: `cake`, `bell`, `cloud`, `mail`, `star`, `warning`.
+*  **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`timeline-event-updates`**
 
diff --git a/docs/api/timeline.md b/docs/api/timeline.md
index f5ef8be544604341307ffd89534b0a8011c55b4e..85164cab14354d411d554e499a217a0786327bb1 100644
--- a/docs/api/timeline.md
+++ b/docs/api/timeline.md
@@ -14,7 +14,7 @@ Delete a [[Timeline]]. Will cascade delete its events as well.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/timeline/`
 
@@ -22,9 +22,9 @@ Fetch a list of [[Timelines]]. Can include `archived=true` to return archived ti
 
 ### PARAMS:
 
-*  **`include`** value may be nil, or if non-nil, value must be one of: `events`.
+*  **`include`** nullable enum of events
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
 ## `GET /api/timeline/:id`
 
@@ -33,15 +33,15 @@ Fetch the [[Timeline]] with `id`. Include `include=events` to unarchived events
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`include`** value may be nil, or if non-nil, value must be one of: `events`.
+*  **`include`** nullable enum of events
 
-*  **`archived`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`archived`** nullable value must be a valid boolean string ('true' or 'false').
 
-*  **`start`** value may be nil, or if non-nil, value must be a valid date string
+*  **`start`** nullable value must be a valid date string
 
-*  **`end`** value may be nil, or if non-nil, value must be a valid date string
+*  **`end`** nullable value must be a valid date string
 
 ## `POST /api/timeline/`
 
@@ -51,15 +51,15 @@ Create a new [[Timeline]].
 
 *  **`name`** value must be a non-blank string.
 
-*  **`default`** value may be nil, or if non-nil, value must be a boolean.
+*  **`default`** nullable boolean
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`icon`** value may be nil, or if non-nil, value must be one of: `cake`, `bell`, `cloud`, `mail`, `star`, `warning`.
+*  **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
 ## `PUT /api/timeline/:id`
 
@@ -68,19 +68,19 @@ Update the [[Timeline]] with `id`. Returns the timeline without events. Archivin
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`name`** nullable value must be a non-blank string.
 
-*  **`default`** value may be nil, or if non-nil, value must be a boolean.
+*  **`default`** nullable boolean
 
-*  **`description`** value may be nil, or if non-nil, value must be a string.
+*  **`description`** nullable string
 
-*  **`icon`** value may be nil, or if non-nil, value must be one of: `cake`, `bell`, `cloud`, `mail`, `star`, `warning`.
+*  **`icon`** nullable enum of star, cake, mail, warning, bell, cloud
 
-*  **`collection_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`collection_id`** nullable value must be an integer greater than zero.
 
-*  **`archived`** value may be nil, or if non-nil, value must be a boolean.
+*  **`archived`** nullable boolean
 
 *  **`timeline-updates`**
 
diff --git a/docs/api/transform.md b/docs/api/transform.md
index 9b88972c2ec58035c4db037afb7b3206efa8c5af..e9b8214a4ee3e0cd3a45f1f6099253258f308811 100644
--- a/docs/api/transform.md
+++ b/docs/api/transform.md
@@ -14,11 +14,11 @@ Look up a database schema transform.
 
 ### PARAMS:
 
-*  **`db-id`** 
+*  **`db-id`** value must be an integer greater than zero.
 
-*  **`schema`** 
+*  **`schema`** value must be a non-blank string.
 
-*  **`transform-name`**
+*  **`transform-name`** value must be a non-blank string.
 
 ---
 
diff --git a/docs/api/user.md b/docs/api/user.md
index 83ebaf893ab319f23c4a21f2f13d8ea304d18daa..ca135b70c66dee2b401db563139c5e1ab5af4a57 100644
--- a/docs/api/user.md
+++ b/docs/api/user.md
@@ -16,11 +16,12 @@ You must be a superuser to do this.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/user/`
 
-Fetch a list of `Users`. By default returns every active user but only active users.
+Fetch a list of `Users` for admins or group managers.
+  By default returns only active users for admins and only active users within groups that the group manager is managing for group managers.
 
    - If `status` is `deactivated`, include deactivated users only.
    - If `status` is `all`, include all users (active and inactive).
@@ -37,13 +38,13 @@ Fetch a list of `Users`. By default returns every active user but only active us
 
 ### PARAMS:
 
-*  **`status`** value may be nil, or if non-nil, value must be a string.
+*  **`status`** nullable string
 
-*  **`query`** value may be nil, or if non-nil, value must be a string.
+*  **`query`** nullable string
 
-*  **`group_id`** value may be nil, or if non-nil, value must be an integer greater than zero.
+*  **`group_id`** nullable value must be an integer greater than zero.
 
-*  **`include_deactivated`** value may be nil, or if non-nil, value must be a valid boolean string ('true' or 'false').
+*  **`include_deactivated`** nullable value must be a valid boolean string ('true' or 'false').
 
 ## `GET /api/user/:id`
 
@@ -51,7 +52,7 @@ Fetch a `User`. You must be fetching yourself *or* be a superuser *or* a Group M
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ## `GET /api/user/current`
 
@@ -73,18 +74,15 @@ You must be a superuser to do this.
 
 ### PARAMS:
 
-*  **`first_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`first_name`** nullable value must be a non-blank string.
 
-*  **`last_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`last_name`** nullable value must be a non-blank string.
 
 *  **`email`** value must be a valid email address.
 
-*  **`user_group_memberships`** value may be nil, or if non-nil, value must be an array. Each value must be a map with schema: (
-  is_group_manager (optional) : value must be a boolean.
-  id : value must be an integer greater than zero.
-)
+*  **`user_group_memberships`** nullable sequence of map where {:id -> <value must be an integer greater than zero.>, :is_group_manager (optional) -> <boolean>}
 
-*  **`login_attributes`** value may be nil, or if non-nil, login attribute keys must be a keyword or string
+*  **`login_attributes`** nullable login attribute keys must be a keyword or string
 
 ## `POST /api/user/:id/send_invite`
 
@@ -104,26 +102,23 @@ Update an existing, active `User`.
 
 ### PARAMS:
 
-*  **`email`** value may be nil, or if non-nil, value must be a valid email address.
+*  **`email`** nullable value must be a valid email address.
 
-*  **`first_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`first_name`** nullable value must be a non-blank string.
 
-*  **`is_group_manager`** value may be nil, or if non-nil, value must be a boolean.
+*  **`is_group_manager`** nullable boolean
 
-*  **`locale`** value may be nil, or if non-nil, String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
+*  **`locale`** nullable String must be a valid two-letter ISO language or language-country code e.g. en or en_US.
 
-*  **`user_group_memberships`** value may be nil, or if non-nil, value must be an array. Each value must be a map with schema: (
-  is_group_manager (optional) : value must be a boolean.
-  id : value must be an integer greater than zero.
-)
+*  **`user_group_memberships`** nullable sequence of map where {:id -> <value must be an integer greater than zero.>, :is_group_manager (optional) -> <boolean>}
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
-*  **`is_superuser`** value may be nil, or if non-nil, value must be a boolean.
+*  **`is_superuser`** nullable boolean
 
-*  **`login_attributes`** value may be nil, or if non-nil, login attribute keys must be a keyword or string
+*  **`login_attributes`** nullable login attribute keys must be a keyword or string
 
-*  **`last_name`** value may be nil, or if non-nil, value must be a non-blank string.
+*  **`last_name`** nullable value must be a non-blank string.
 
 ## `PUT /api/user/:id/modal/:modal`
 
@@ -131,7 +126,7 @@ Indicate that a user has been informed about the vast intricacies of 'the' Query
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`modal`**
 
@@ -141,7 +136,7 @@ Update a user's password.
 
 ### PARAMS:
 
-*  **`id`** 
+*  **`id`** value must be an integer greater than zero.
 
 *  **`password`** password is too common.
 
@@ -157,7 +152,7 @@ You must be a superuser to do this.
 
 ### PARAMS:
 
-*  **`id`**
+*  **`id`** value must be an integer greater than zero.
 
 ---
 
diff --git a/src/metabase/cmd/resources/api-intro.md b/src/metabase/cmd/resources/api-intro.md
index 271166590e466ef8d596b566674f04f3d6268493..ca18414411d7ebba372dba09ce5129ef1015a4ca 100644
--- a/src/metabase/cmd/resources/api-intro.md
+++ b/src/metabase/cmd/resources/api-intro.md
@@ -12,8 +12,8 @@ clojure -M:ee:run api-documentation
 
 ## About the Metabase API
 
-- **The API is subject to change.** The API is tightly coupled with the front end and is subject to change between releases. The endpoints likely won’t change that much (existing API endpoints are changed infrequently, and removed rarely), but if you write code to use the API, you might have to update it in the future.
-- **The API isn't versioned.** Meaning: it can change version to version, so don’t expect to stay on a particular version of Metabase in order to use a “stable” API.
+- **The API is subject to change.** We rarely change API endpoints, and almost never remove them, but if you write code that relies on the API, there's a chance you might have to update your code in the future.
+- **The API isn't versioned.** So don’t expect to stay on a particular version of Metabase in order to use a “stable” API.
 
 ## API tutorial