From 4de1461ab1cecef033323bc46ad22fd3dea8fdfd Mon Sep 17 00:00:00 2001
From: Jeff Bruemmer <jeff.bruemmer@gmail.com>
Date: Tue, 21 Nov 2023 12:08:49 -0500
Subject: [PATCH] update api docs (#35994)

---
 docs/api-documentation.md                  |   7 +-
 docs/api/action.md                         |  10 ++
 docs/api/alert.md                          |  35 +++---
 docs/api/automagic-dashboards.md           |  41 ++++---
 docs/api/bookmark.md                       |   5 +-
 docs/api/card.md                           |  67 +++++------
 docs/api/collection.md                     |  48 ++++----
 docs/api/dashboard.md                      | 125 +++++++++------------
 docs/api/database.md                       |  76 ++++++-------
 docs/api/dataset.md                        |   4 +-
 docs/api/ee/audit-app-user.md              |   2 +-
 docs/api/ee/content-management-review.md   |  29 -----
 docs/api/ee/content-verification-review.md |  29 +++++
 docs/api/ee/sandbox-gtap.md                |   6 +-
 docs/api/ee/sandbox-table.md               |  10 +-
 docs/api/ee/serialization-serialize.md     |  32 ------
 docs/api/field.md                          |  64 +++++------
 docs/api/google.md                         |   6 +-
 docs/api/ldap.md                           |   2 +-
 docs/api/metric.md                         |  34 +++---
 docs/api/native-query-snippet.md           |  22 ++--
 docs/api/permissions.md                    |   6 +-
 docs/api/persist.md                        |   4 +-
 docs/api/premium-features.md               |   2 +-
 docs/api/preview-embed.md                  |  20 ++--
 docs/api/public.md                         | 117 +++++++++----------
 docs/api/pulse.md                          |  58 +++++-----
 docs/api/revision.md                       |  10 +-
 docs/api/search.md                         |  68 ++++++++---
 docs/api/segment.md                        |  28 ++---
 docs/api/session.md                        |   2 +-
 docs/api/setup.md                          |  18 +--
 docs/api/slack.md                          |   4 +-
 docs/api/table.md                          |  48 ++++----
 docs/api/tiles.md                          |  10 +-
 docs/api/timeline-event.md                 |  36 +++---
 docs/api/timeline.md                       |  40 +++----
 docs/api/transform.md                      |   6 +-
 docs/api/user.md                           |  53 ++++-----
 src/metabase/cmd/resources/api-intro.md    |   4 +-
 40 files changed, 593 insertions(+), 595 deletions(-)
 delete mode 100644 docs/api/ee/content-management-review.md
 create mode 100644 docs/api/ee/content-verification-review.md
 delete mode 100644 docs/api/ee/serialization-serialize.md

diff --git a/docs/api-documentation.md b/docs/api-documentation.md
index ef96f538267..6ff8953dbce 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 944b095238a..92dcabadbca 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 a9a1c2f46c0..429cb37e943 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 4eb826e240c..7ad89d4a8f6 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 f4ccfd26e30..943396c48ed 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 064966acd47..b626dad8046 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 3ef5db93595..f0871e33f43 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 897b879dd10..85cba5cdeea 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 d13a34e0af3..ac671782482 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 dbfafe7abd6..682b7e505e5 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 5f2cdd86175..100eef94662 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 09c1d1466b1..00000000000
--- 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 00000000000..3395377534b
--- /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 107da9b5bd7..44d64001eaf 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 4a6ed20954c..5b01bdb5456 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 3633cfce6c3..00000000000
--- 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 cb46a027921..5c1e501d107 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 d7d8216d99b..94cb4f4427f 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 93bf9c0b8df..56f93a764e6 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 f1efc7886bf..0aa0e799307 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 2673366092f..01fb21fb20b 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 b681b226a88..32974ef50e8 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 7878a5c6f15..35ff22d63f8 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 42bae160de9..ec4a43e3d97 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 1d590be23b6..857e90047cd 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 59c389b738a..95b6ae40717 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 e8d27c20c6a..4a236db95bd 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 6ce5fc36c89..2fdd8ba8bba 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 82b790e3cb7..61c9f8bc996 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 2355f7d8e7c..64011008dc8 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 4dd54eaf551..7b287d39195 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 c5a06caa117..9454a5175c0 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 89baf3de3a8..25c530ed778 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 83d83168b84..282827beeed 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 ba8159bc553..cc298343b05 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 0be0005ab35..202bdf5da74 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 f5ef8be5446..85164cab143 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 9b88972c2ec..e9b8214a4ee 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 83ebaf893ab..ca135b70c66 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 271166590e4..ca18414411d 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
 
-- 
GitLab