diff --git a/docs.json b/docs.json
index 7cd784b3..4417e6c5 100644
--- a/docs.json
+++ b/docs.json
@@ -485,9 +485,33 @@
             ]
           },
           {
-            "group": "User endpoints",
+            "group": "Manage resources",
+            "pages": [
+              "restapi/manage-resources/overview",
+              "restapi/manage-resources/manage-datasets",
+              "restapi/manage-resources/manage-monitors",
+              "restapi/manage-resources/manage-notifiers",
+              "restapi/manage-resources/manage-users"
+            ]
+          },
+          {
+            "group": "Annotation endpoints",
             "pages": [
-              "restapi/endpoints/getCurrentUser"
+              "restapi/endpoints/getAnnotations",
+              "restapi/endpoints/getAnnotation",
+              "restapi/endpoints/createAnnotation",
+              "restapi/endpoints/updateAnnotation",
+              "restapi/endpoints/deleteAnnotation"
+            ]
+          },
+          {
+            "group": "API token endpoints",
+            "pages": [
+              "restapi/endpoints/getTokens",
+              "restapi/endpoints/getToken",
+              "restapi/endpoints/createToken",
+              "restapi/endpoints/regenerateToken",
+              "restapi/endpoints/deleteToken"
             ]
           },
           {
@@ -505,23 +529,34 @@
             ]
           },
           {
-            "group": "Annotation endpoints",
+            "group": "Monitor endpoints",
             "pages": [
-              "restapi/endpoints/getAnnotations",
-              "restapi/endpoints/getAnnotation",
-              "restapi/endpoints/createAnnotation",
-              "restapi/endpoints/updateAnnotation",
-              "restapi/endpoints/deleteAnnotation"
+              "restapi/endpoints/getMonitors",
+              "restapi/endpoints/getMonitor",
+              "restapi/endpoints/createMonitor",
+              "restapi/endpoints/updateMonitor",
+              "restapi/endpoints/deleteMonitor"
             ]
           },
           {
-            "group": "API token endpoints",
+            "group": "Notifier endpoints",
             "pages": [
-              "restapi/endpoints/getTokens",
-              "restapi/endpoints/getToken",
-              "restapi/endpoints/createToken",
-              "restapi/endpoints/regenerateToken",
-              "restapi/endpoints/deleteToken"
+              "restapi/endpoints/getNotifiers",
+              "restapi/endpoints/getNotifier",
+              "restapi/endpoints/createNotifier",
+              "restapi/endpoints/updateNotifier",
+              "restapi/endpoints/deleteNotifier"
+            ]
+          },
+          {
+            "group": "User endpoints",
+            "pages": [
+              "restapi/endpoints/getCurrentUser",
+              "restapi/endpoints/getUsers",
+              "restapi/endpoints/getUser",
+              "restapi/endpoints/createUser",
+              "restapi/endpoints/updateUser",
+              "restapi/endpoints/deleteUser"
             ]
           }
         ]
diff --git a/restapi/endpoints/createDataset.mdx b/restapi/endpoints/createDataset.mdx
index 0c10b321..12c166fd 100644
--- a/restapi/endpoints/createDataset.mdx
+++ b/restapi/endpoints/createDataset.mdx
@@ -1,4 +1,4 @@
 ---
 title: Create dataset
-openapi: "v1 post /datasets"
+openapi: "v2 post /datasets"
 ---
\ No newline at end of file
diff --git a/restapi/endpoints/createMonitor.mdx b/restapi/endpoints/createMonitor.mdx
new file mode 100644
index 00000000..02a94517
--- /dev/null
+++ b/restapi/endpoints/createMonitor.mdx
@@ -0,0 +1,4 @@
+---
+title: Create monitor
+openapi: "v2 post /monitors"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/createNotifier.mdx b/restapi/endpoints/createNotifier.mdx
new file mode 100644
index 00000000..8ba1293d
--- /dev/null
+++ b/restapi/endpoints/createNotifier.mdx
@@ -0,0 +1,4 @@
+---
+title: Create notifier
+openapi: "v2 post /notifiers"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/createUser.mdx b/restapi/endpoints/createUser.mdx
new file mode 100644
index 00000000..33f5bc99
--- /dev/null
+++ b/restapi/endpoints/createUser.mdx
@@ -0,0 +1,4 @@
+---
+title: Create user
+openapi: "v2 post /users"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/deleteDataset.mdx b/restapi/endpoints/deleteDataset.mdx
index b89b9f76..28971cfb 100644
--- a/restapi/endpoints/deleteDataset.mdx
+++ b/restapi/endpoints/deleteDataset.mdx
@@ -1,4 +1,4 @@
 ---
 title: Delete dataset
-openapi: "v1 delete /datasets/{dataset_name}"
+openapi: "v2 delete /datasets/{id}"
 ---
\ No newline at end of file
diff --git a/restapi/endpoints/deleteMonitor.mdx b/restapi/endpoints/deleteMonitor.mdx
new file mode 100644
index 00000000..62e727b2
--- /dev/null
+++ b/restapi/endpoints/deleteMonitor.mdx
@@ -0,0 +1,4 @@
+---
+title: Delete monitor
+openapi: "v2 delete /monitors/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/deleteNotifier.mdx b/restapi/endpoints/deleteNotifier.mdx
new file mode 100644
index 00000000..6de26062
--- /dev/null
+++ b/restapi/endpoints/deleteNotifier.mdx
@@ -0,0 +1,4 @@
+---
+title: Delete notifier
+openapi: "v2 delete /notifiers/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/deleteUser.mdx b/restapi/endpoints/deleteUser.mdx
new file mode 100644
index 00000000..b6825a7c
--- /dev/null
+++ b/restapi/endpoints/deleteUser.mdx
@@ -0,0 +1,4 @@
+---
+title: Delete user
+openapi: "v2 delete /users/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/getCurrentUser.mdx b/restapi/endpoints/getCurrentUser.mdx
index a2609929..08a1e80e 100644
--- a/restapi/endpoints/getCurrentUser.mdx
+++ b/restapi/endpoints/getCurrentUser.mdx
@@ -1,4 +1,4 @@
 ---
 title: Retrieve current user
-openapi: "v1 get /user"
+openapi: "v2 get /user"
 ---
\ No newline at end of file
diff --git a/restapi/endpoints/getDataset.mdx b/restapi/endpoints/getDataset.mdx
index 01bda2cb..dc65ba53 100644
--- a/restapi/endpoints/getDataset.mdx
+++ b/restapi/endpoints/getDataset.mdx
@@ -1,4 +1,4 @@
 ---
 title: Retrieve dataset
-openapi: "v1 get /datasets/{dataset_name}"
+openapi: "v2 get /datasets/{id}"
 ---
\ No newline at end of file
diff --git a/restapi/endpoints/getDatasets.mdx b/restapi/endpoints/getDatasets.mdx
index 26909955..96dbee29 100644
--- a/restapi/endpoints/getDatasets.mdx
+++ b/restapi/endpoints/getDatasets.mdx
@@ -1,4 +1,4 @@
 ---
 title: List all datasets
-openapi: "v1 get /datasets"
+openapi: "v2 get /datasets"
 ---
\ No newline at end of file
diff --git a/restapi/endpoints/getMonitor.mdx b/restapi/endpoints/getMonitor.mdx
new file mode 100644
index 00000000..b9ac0848
--- /dev/null
+++ b/restapi/endpoints/getMonitor.mdx
@@ -0,0 +1,4 @@
+---
+title: Retrieve monitor
+openapi: "v2 get /monitors/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/getMonitors.mdx b/restapi/endpoints/getMonitors.mdx
new file mode 100644
index 00000000..e289fa96
--- /dev/null
+++ b/restapi/endpoints/getMonitors.mdx
@@ -0,0 +1,4 @@
+---
+title: List all monitors
+openapi: "v2 get /monitors"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/getNotifier.mdx b/restapi/endpoints/getNotifier.mdx
new file mode 100644
index 00000000..a939cc4a
--- /dev/null
+++ b/restapi/endpoints/getNotifier.mdx
@@ -0,0 +1,4 @@
+---
+title: Retrieve notifier
+openapi: "v2 get /notifiers/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/getNotifiers.mdx b/restapi/endpoints/getNotifiers.mdx
new file mode 100644
index 00000000..9ee7becc
--- /dev/null
+++ b/restapi/endpoints/getNotifiers.mdx
@@ -0,0 +1,4 @@
+---
+title: List all notifiers
+openapi: "v2 get /notifiers"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/getUser.mdx b/restapi/endpoints/getUser.mdx
new file mode 100644
index 00000000..59c60bef
--- /dev/null
+++ b/restapi/endpoints/getUser.mdx
@@ -0,0 +1,4 @@
+---
+title: Retrieve user
+openapi: "v2 get /users/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/getUsers.mdx b/restapi/endpoints/getUsers.mdx
new file mode 100644
index 00000000..b049f00b
--- /dev/null
+++ b/restapi/endpoints/getUsers.mdx
@@ -0,0 +1,4 @@
+---
+title: List all users
+openapi: "v2 get /users"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/trimDataset.mdx b/restapi/endpoints/trimDataset.mdx
index 5b31f797..ce2fa7ca 100644
--- a/restapi/endpoints/trimDataset.mdx
+++ b/restapi/endpoints/trimDataset.mdx
@@ -1,4 +1,4 @@
 ---
 title: Trim dataset
-openapi: "v1 post /datasets/{dataset_name}/trim"
+openapi: "v2 post /datasets/{id}/trim"
 ---
\ No newline at end of file
diff --git a/restapi/endpoints/updateDataset.mdx b/restapi/endpoints/updateDataset.mdx
index 189de943..246b8cff 100644
--- a/restapi/endpoints/updateDataset.mdx
+++ b/restapi/endpoints/updateDataset.mdx
@@ -1,4 +1,4 @@
 ---
 title: Update dataset
-openapi: "v1 put /datasets/{dataset_name}"
+openapi: "v2 put /datasets/{id}"
 ---
\ No newline at end of file
diff --git a/restapi/endpoints/updateMonitor.mdx b/restapi/endpoints/updateMonitor.mdx
new file mode 100644
index 00000000..96927a1b
--- /dev/null
+++ b/restapi/endpoints/updateMonitor.mdx
@@ -0,0 +1,4 @@
+---
+title: Update monitor
+openapi: "v2 put /monitors/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/updateNotifier.mdx b/restapi/endpoints/updateNotifier.mdx
new file mode 100644
index 00000000..f3e09ca3
--- /dev/null
+++ b/restapi/endpoints/updateNotifier.mdx
@@ -0,0 +1,4 @@
+---
+title: Update notifier
+openapi: "v2 put /notifiers/{id}"
+---
\ No newline at end of file
diff --git a/restapi/endpoints/updateUser.mdx b/restapi/endpoints/updateUser.mdx
new file mode 100644
index 00000000..0ca09c7a
--- /dev/null
+++ b/restapi/endpoints/updateUser.mdx
@@ -0,0 +1,10 @@
+---
+title: Update user
+openapi: "v2 put /users/{id}"
+---
+
+<Warning>
+Using this endpoint, you can change the name of your own user. Authorize the request with a [personal access token (PAT)](/reference/tokens).
+
+You cannot change the names of other users, you cannot change properties other than your name, and you cannot use an API token to authorize the request.
+</Warning>
\ No newline at end of file
diff --git a/restapi/manage-resources/manage-annotations.mdx b/restapi/manage-resources/manage-annotations.mdx
new file mode 100644
index 00000000..7c7afd75
--- /dev/null
+++ b/restapi/manage-resources/manage-annotations.mdx
@@ -0,0 +1,145 @@
+---
+title: Manage datasets via API
+sidebarTitle: "Datasets"
+description: "Learn how to manage Axiom datasets via API."
+tags: ['axiom documentation', 'documentation', 'axiom', 'axiom api', 'rest api', 'rest', 'authorization', 'headers', 'datasets', 'users', 'monitors', 'notifiers', 'response']
+---
+
+import Prerequisites from "/snippets/minimal-prerequisites.mdx"
+
+This page explains how to manage datasets programmatically via the API.
+
+TODO
+
+<Prerequisites />
+{/* list separator */}
+- [Create an API token in Axiom](/reference/tokens) with permissions to create, read, update, and delete datasets.
+- In the code samples below, replace `API_TOKEN` with the Axiom API token you have generated. For added security, store the API token in an environment variable.
+
+## Create datasets
+
+To create a dataset, send a POST request to the `datasets` endpoint. In the body of the request, specify the name and the description of the dataset. For example:
+
+```bash
+curl -X 'POST' 'https://api.axiom.co/v2/datasets' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "description": "This is a test dataset.",
+    "name": "test_dataset"
+  }'
+```
+
+The example response contains the dataset ID that you can later use to access the dataset programmatically.
+
+```json
+{
+  "created": "2024-04-20T02:35:14.137Z",
+  "description": "This is a test dataset.",
+  "id": "test_dataset",
+  "name": "test_dataset",
+  "who": ""
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/createDataset).
+
+## Get information about datasets
+
+### Get information about all datasets
+
+To get information about all the datasets in your Axiom organization, send a GET request to the `datasets` endpoint. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/datasets' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+The example response is a list of dataset objects. Each object contains a unique dataset ID that you can later use to access the dataset programmatically.
+
+```json
+[
+    {
+    "created": "2024-04-20T02:35:14.137Z",
+    "description": "This is a test dataset.",
+    "id": "test_dataset1",
+    "name": "test_dataset1",
+    "who": ""
+    },
+    {
+    "created": "2024-04-20T02:35:24.137Z",
+    "description": "This is another test dataset.",
+    "id": "test_dataset2",
+    "name": "test_dataset2",
+    "who": ""
+    }
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getDatasets).
+
+### Get information about specific dataset
+
+To get information about a specific dataset, send a GET request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+Example response:
+
+```json
+[
+    {
+    "created": "2024-04-20T02:35:14.137Z",
+    "description": "This is a test dataset.",
+    "id": "test_dataset",
+    "name": "test_dataset",
+    "who": ""
+    },
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getDataset).
+
+## Update datasets
+
+To update a dataset, send a PUT request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. In the body of the request, specify the properties you want to update. For example:
+
+```bash
+curl -X 'PUT' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "description": "This is a production dataset."
+  }'
+```
+
+Example response:
+
+```json
+{
+  "created": "2024-04-20T02:35:14.137Z",
+  "description": "This is a production dataset.",
+  "id": "test_dataset",
+  "name": "test_dataset",
+  "who": ""
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/updateDataset).
+
+## Delete datasets
+
+To delete a dataset, send a DELETE request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. For example:
+
+```bash
+curl -X 'DELETE' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+For more information, see the [API reference](/restapi/endpoints/deleteDataset).
\ No newline at end of file
diff --git a/restapi/manage-resources/manage-api-tokens.mdx b/restapi/manage-resources/manage-api-tokens.mdx
new file mode 100644
index 00000000..7c7afd75
--- /dev/null
+++ b/restapi/manage-resources/manage-api-tokens.mdx
@@ -0,0 +1,145 @@
+---
+title: Manage datasets via API
+sidebarTitle: "Datasets"
+description: "Learn how to manage Axiom datasets via API."
+tags: ['axiom documentation', 'documentation', 'axiom', 'axiom api', 'rest api', 'rest', 'authorization', 'headers', 'datasets', 'users', 'monitors', 'notifiers', 'response']
+---
+
+import Prerequisites from "/snippets/minimal-prerequisites.mdx"
+
+This page explains how to manage datasets programmatically via the API.
+
+TODO
+
+<Prerequisites />
+{/* list separator */}
+- [Create an API token in Axiom](/reference/tokens) with permissions to create, read, update, and delete datasets.
+- In the code samples below, replace `API_TOKEN` with the Axiom API token you have generated. For added security, store the API token in an environment variable.
+
+## Create datasets
+
+To create a dataset, send a POST request to the `datasets` endpoint. In the body of the request, specify the name and the description of the dataset. For example:
+
+```bash
+curl -X 'POST' 'https://api.axiom.co/v2/datasets' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "description": "This is a test dataset.",
+    "name": "test_dataset"
+  }'
+```
+
+The example response contains the dataset ID that you can later use to access the dataset programmatically.
+
+```json
+{
+  "created": "2024-04-20T02:35:14.137Z",
+  "description": "This is a test dataset.",
+  "id": "test_dataset",
+  "name": "test_dataset",
+  "who": ""
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/createDataset).
+
+## Get information about datasets
+
+### Get information about all datasets
+
+To get information about all the datasets in your Axiom organization, send a GET request to the `datasets` endpoint. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/datasets' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+The example response is a list of dataset objects. Each object contains a unique dataset ID that you can later use to access the dataset programmatically.
+
+```json
+[
+    {
+    "created": "2024-04-20T02:35:14.137Z",
+    "description": "This is a test dataset.",
+    "id": "test_dataset1",
+    "name": "test_dataset1",
+    "who": ""
+    },
+    {
+    "created": "2024-04-20T02:35:24.137Z",
+    "description": "This is another test dataset.",
+    "id": "test_dataset2",
+    "name": "test_dataset2",
+    "who": ""
+    }
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getDatasets).
+
+### Get information about specific dataset
+
+To get information about a specific dataset, send a GET request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+Example response:
+
+```json
+[
+    {
+    "created": "2024-04-20T02:35:14.137Z",
+    "description": "This is a test dataset.",
+    "id": "test_dataset",
+    "name": "test_dataset",
+    "who": ""
+    },
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getDataset).
+
+## Update datasets
+
+To update a dataset, send a PUT request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. In the body of the request, specify the properties you want to update. For example:
+
+```bash
+curl -X 'PUT' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "description": "This is a production dataset."
+  }'
+```
+
+Example response:
+
+```json
+{
+  "created": "2024-04-20T02:35:14.137Z",
+  "description": "This is a production dataset.",
+  "id": "test_dataset",
+  "name": "test_dataset",
+  "who": ""
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/updateDataset).
+
+## Delete datasets
+
+To delete a dataset, send a DELETE request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. For example:
+
+```bash
+curl -X 'DELETE' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+For more information, see the [API reference](/restapi/endpoints/deleteDataset).
\ No newline at end of file
diff --git a/restapi/manage-resources/manage-datasets.mdx b/restapi/manage-resources/manage-datasets.mdx
new file mode 100644
index 00000000..35a02b23
--- /dev/null
+++ b/restapi/manage-resources/manage-datasets.mdx
@@ -0,0 +1,143 @@
+---
+title: Manage datasets via API
+sidebarTitle: "Datasets"
+description: "Learn how to manage Axiom datasets via API."
+tags: ['axiom documentation', 'documentation', 'axiom', 'axiom api', 'rest api', 'rest', 'authorization', 'headers', 'datasets', 'users', 'monitors', 'notifiers', 'response']
+---
+
+import Prerequisites from "/snippets/minimal-prerequisites.mdx"
+
+This page explains how to manage datasets programmatically via the API.
+
+<Prerequisites />
+{/* list separator */}
+- [Create an API token in Axiom](/reference/tokens) with permissions to create, read, update, and delete datasets.
+- In the code samples below, replace `API_TOKEN` with the Axiom API token you have generated. For added security, store the API token in an environment variable.
+
+## Create datasets
+
+To create a dataset, send a POST request to the `datasets` endpoint. In the body of the request, specify the name and the description of the dataset. For example:
+
+```bash
+curl -X 'POST' 'https://api.axiom.co/v2/datasets' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "description": "This is a test dataset.",
+    "name": "test_dataset"
+  }'
+```
+
+The example response contains the dataset ID that you can later use to access the dataset programmatically.
+
+```json
+{
+  "created": "2024-04-20T02:35:14.137Z",
+  "description": "This is a test dataset.",
+  "id": "test_dataset",
+  "name": "test_dataset",
+  "who": ""
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/createDataset).
+
+## Get information about datasets
+
+### Get information about all datasets
+
+To get information about all the datasets in your Axiom organization, send a GET request to the `datasets` endpoint. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/datasets' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+The example response is a list of dataset objects. Each object contains a unique dataset ID that you can later use to access the dataset programmatically.
+
+```json
+[
+    {
+    "created": "2024-04-20T02:35:14.137Z",
+    "description": "This is a test dataset.",
+    "id": "test_dataset1",
+    "name": "test_dataset1",
+    "who": ""
+    },
+    {
+    "created": "2024-04-20T02:35:24.137Z",
+    "description": "This is another test dataset.",
+    "id": "test_dataset2",
+    "name": "test_dataset2",
+    "who": ""
+    }
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getDatasets).
+
+### Get information about specific dataset
+
+To get information about a specific dataset, send a GET request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+Example response:
+
+```json
+[
+    {
+    "created": "2024-04-20T02:35:14.137Z",
+    "description": "This is a test dataset.",
+    "id": "test_dataset",
+    "name": "test_dataset",
+    "who": ""
+    },
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getDataset).
+
+## Update datasets
+
+To update a dataset, send a PUT request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. In the body of the request, specify the properties you want to update. For example:
+
+```bash
+curl -X 'PUT' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "description": "This is a production dataset."
+  }'
+```
+
+Example response:
+
+```json
+{
+  "created": "2024-04-20T02:35:14.137Z",
+  "description": "This is a production dataset.",
+  "id": "test_dataset",
+  "name": "test_dataset",
+  "who": ""
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/updateDataset).
+
+## Delete datasets
+
+To delete a dataset, send a DELETE request to the `datasets/ID` endpoint where `ID` is the unique ID of the dataset. For example:
+
+```bash
+curl -X 'DELETE' 'https://api.axiom.co/v2/datasets/test_dataset' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+For more information, see the [API reference](/restapi/endpoints/deleteDataset).
\ No newline at end of file
diff --git a/restapi/manage-resources/manage-monitors.mdx b/restapi/manage-resources/manage-monitors.mdx
new file mode 100644
index 00000000..c3d82d4f
--- /dev/null
+++ b/restapi/manage-resources/manage-monitors.mdx
@@ -0,0 +1,225 @@
+---
+title: Manage monitors via API
+sidebarTitle: "Monitors"
+description: "Learn how to manage Axiom monitors via API."
+tags: ['axiom documentation', 'documentation', 'axiom', 'axiom api', 'rest api', 'rest', 'authorization', 'headers', 'datasets', 'users', 'monitors', 'notifiers', 'response']
+---
+
+import Prerequisites from "/snippets/minimal-prerequisites.mdx"
+
+This page explains how to manage monitors programmatically via the API.
+
+<Prerequisites />
+{/* list separator */}
+- [Create an API token in Axiom](/reference/tokens) with permissions to create, read, update, and delete monitors.
+- In the code samples below, replace `API_TOKEN` with the Axiom API token you have generated. For added security, store the API token in an environment variable.
+
+## Create threshold monitors
+
+To create a threshold monitor, send a POST request to the `monitors` endpoint. In the body of the request, specify the following:
+- `name` of your monitor.
+- `aplQuery` is the APL query that the monitor periodically runs to aggregate data. Axiom alerts you when the results from your query cross the threshold.
+- `threshold` is the value to compare the results of the query to. This can be any numeric value.
+- `operator` is the rule to apply when comparing the results to the threshold. The possible values are `Below`, `BelowOrEqual`, `Above`, and `AboveOrEqual`.
+- `intervalMinutes` is how often the monitor runs. This is a positive integer number of minutes.
+- `rangeMinutes` is the time range for your query. This is a positive integer number of minutes. The end time is the time the monitor runs.
+- `alertOnNoData` triggers the monitor when your query doesn’t return any data. Your query returns no data if no events match your filters and an aggregation used in the query is undefined. For example, you take the average of a field not present in any matching events.
+
+The following fields are optional:
+- `description` explains what your monitor does.
+- `notifierIds` is a list of notifier IDs. The related notifiers define how you want to receive notifications for this monitor. For more information, see [Manage notifiers](/restapi/manage-resources/manage-notifiers).
+- You can group by attributes when defining your query. By default, your monitor enters the alert state if any of the values returned for the group-by attributes cross the threshold, and remains in the alert state until none of the values returned cross the threshold. To trigger the monitor separately for each group that crosses the threshold, set `notifyByGroup` to true. At most one trigger notification is sent per monitor run. This option only has an effect if the monitor’s query groups by a non-time field.
+
+For example:
+
+```bash
+curl -X 'POST' 'https://api.axiom.co/v2/monitors' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "name": "test_monitor",
+    "description": "This is a test monitor.",
+    "aplQuery": "test_dataset | summarize count() by bin_auto(_time)",
+    "threshold": 1,
+    "operator": "Above",
+    "intervalMinutes": 5,
+    "rangeMinutes": 5,
+    "notifierIds": ["test_notifier"],
+    "alertOnNoData": false
+  }'
+```
+
+The example response contains the monitor ID that you can later use to access the monitor programmatically.
+
+```json
+{
+  "aplQuery": "test_dataset | summarize count() by bin_auto(_time)",
+  "createdAt": "2024-09-04T13:56:22.222Z",
+  "description": "This is a test monitor.",
+  "id": "abc123",
+  "intervalMinutes": 5,
+  "name": "test_monitor",
+  "notifierIds": ["test_notifier"],
+  "operator": "Above",
+  "rangeMinutes": 5,
+  "threshold": 1,
+  "triggerFromNRuns": 1,
+  "type": "Threshold"
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/createMonitor).
+
+## Get information about monitors
+
+### Get information about all monitors
+
+To get information about all the monitors in your Axiom organization, send a GET request to the `monitors` endpoint. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/monitors' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+The example response is a list of monitor objects. Each object contains a unique monitor ID that you can later use to access the monitor programmatically.
+
+```json
+[
+  {
+    "aplQuery": "test_dataset | summarize count() by bin_auto(_time)",
+    "createdAt": "2024-09-04T13:56:22.222Z",
+    "description": "This is a test monitor.",
+    "id": "abc123",
+    "intervalMinutes": 5,
+    "name": "test_monitor1",
+    "notifierIds": ["test_notifier"],
+    "operator": "Above",
+    "rangeMinutes": 5,
+    "threshold": 1,
+    "triggerFromNRuns": 1,
+    "type": "Threshold"
+  },
+  {
+    "aplQuery": "test_dataset | summarize count() by bin_auto(_time)",
+    "createdAt": "2024-09-04T13:56:22.222Z",
+    "description": "This is another test monitor.",
+    "id": "abc321",
+    "intervalMinutes": 5,
+    "name": "test_monitor2",
+    "notifierIds": ["test_notifier"],
+    "operator": "Above",
+    "rangeMinutes": 5,
+    "threshold": 1,
+    "triggerFromNRuns": 1,
+    "type": "Threshold"
+  }
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getMonitors).
+
+### Get information about specific monitor
+
+To get information about a specific monitor, send a GET request to the `monitors/ID` endpoint where `ID` is the unique ID of the monitor. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/monitors/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+Example response:
+
+```json
+{
+  "aplQuery": "test_dataset | summarize count() by bin_auto(_time)",
+  "createdAt": "2024-09-04T13:56:22.222Z",
+  "description": "This is a test monitor.",
+  "id": "abc123",
+  "intervalMinutes": 5,
+  "name": "test_monitor",
+  "notifierIds": ["test_notifier"],
+  "operator": "Above",
+  "rangeMinutes": 5,
+  "threshold": 1,
+  "triggerFromNRuns": 1,
+  "type": "Threshold"
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/getMonitor).
+
+{/*
+### Get information about monitor history
+
+To get information about the history of a specific monitor, send a GET request to the `monitors/ID/history` endpoint where `ID` is the unique ID of the monitor. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/monitors/abc123/history' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+Example response:
+
+```json
+
+```
+
+For more information, see the [API reference](/restapi/endpoints/getMonitor).
+*/}
+
+## Update monitors
+
+To update a monitor, send a PUT request to the `monitors/ID` endpoint where `ID` is the unique ID of the monitor. In the body of the request, specify the properties you want to update. For example:
+
+```bash
+curl -X 'PUT' 'https://api.axiom.co/v2/monitors/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "name": "test_monitor",
+    "description": "This is a production monitor.",
+    "aplQuery": "test_dataset | summarize count() by bin_auto(_time)",
+    "threshold": 1,
+    "operator": "Above",
+    "intervalMinutes": 5,
+    "rangeMinutes": 5,
+    "notifierIds": ["test_notifier"],
+    "alertOnNoData": false
+  }'
+```
+
+Example response:
+
+```json
+{
+  "aplQuery": "test_dataset | summarize count() by bin_auto(_time)",
+  "createdAt": "2024-09-04T13:56:22.222Z",
+  "description": "This is a production monitor.",
+  "id": "abc123",
+  "intervalMinutes": 5,
+  "name": "test_monitor",
+  "notifierIds": ["test_notifier"],
+  "operator": "Above",
+  "rangeMinutes": 5,
+  "threshold": 1,
+  "triggerFromNRuns": 1,
+  "type": "Threshold"
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/updateMonitor).
+
+## Delete monitors
+
+To delete a monitor, send a DELETE request to the `monitors/ID` endpoint where `ID` is the unique ID of the monitor. For example:
+
+```bash
+curl -X 'DELETE' 'https://api.axiom.co/v2/monitors/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+For more information, see the [API reference](/restapi/endpoints/deleteMonitor).
\ No newline at end of file
diff --git a/restapi/manage-resources/manage-notifiers.mdx b/restapi/manage-resources/manage-notifiers.mdx
new file mode 100644
index 00000000..c617fcb5
--- /dev/null
+++ b/restapi/manage-resources/manage-notifiers.mdx
@@ -0,0 +1,194 @@
+---
+title: Manage notifiers via API
+sidebarTitle: "Notifiers"
+description: "Learn how to manage Axiom notifiers via API."
+tags: ['axiom documentation', 'documentation', 'axiom', 'axiom api', 'rest api', 'rest', 'authorization', 'headers', 'datasets', 'users', 'monitors', 'notifiers', 'response']
+---
+
+import Prerequisites from "/snippets/minimal-prerequisites.mdx"
+
+This page explains how to manage notifiers programmatically via the API.
+
+<Prerequisites />
+{/* list separator */}
+- [Create an API token in Axiom](/reference/tokens) with permissions to create, read, update, and delete datasets.
+- In the code samples below, replace `API_TOKEN` with the Axiom API token you have generated. For added security, store the API token in an environment variable.
+
+## Create notifiers
+
+To create a notifier, send a POST request to the `notifiers` endpoint. In the body of the request, specify the following:
+- `name` of the notifier.
+- The `properties` field takes an object that defines the attributes of the notifier. The required attributes depend on the type of notifier you create. For example, to create an email notifier, specify the list of emails to be notified.
+
+For example:
+
+```bash
+curl -X 'POST' 'https://api.axiom.co/v2/notifiers' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "name": "test_notifier",
+    "properties": {
+      "email": {
+        "emails": [
+          "example1@abc.com",
+          "example2@abc.com"
+        ]
+      }
+    }
+  }'
+```
+
+The example response contains the notifier ID that you can later use to access the notifier programmatically.
+
+```json
+{
+  "createdAt":"2024-09-04T11:42:50.225Z",
+  "disabledUntil": "0001-01-01T00:00:00Z",
+  "id": "abc123",
+  "name": "test_notifier",
+  "properties": {
+    "email": {
+      "emails": [
+        "example1@abc.com",
+        "example2@abc.com"
+      ]
+    }
+  }
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/createNotifier).
+
+## Get information about notifiers
+
+### Get information about all notifiers
+
+To get information about all the notifiers in your Axiom organization, send a GET request to the `notifiers` endpoint. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/notifiers' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+The example response is a list of notifier objects. Each object contains a unique notifier ID that you can later use to access the notifier programmatically.
+
+```json
+[
+  {
+    "createdAt":"2024-09-04T11:42:50.225Z",
+    "disabledUntil": "0001-01-01T00:00:00Z",
+    "id": "abc123",
+    "name": "test_notifier1",
+    "properties": {
+      "email": {
+        "emails": [
+          "example1@abc.com",
+          "example2@abc.com"
+        ]
+      }
+    }
+  },
+  {
+    "createdAt":"2024-09-04T11:42:50.225Z",
+    "disabledUntil": "0001-01-01T00:00:00Z",
+    "id": "abc321",
+    "name": "test_notifier2",
+    "properties": {
+      "email": {
+        "emails": [
+          "example3@abc.com",
+          "example4@abc.com"
+        ]
+      }
+    }
+  }
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getNotifiers).
+
+### Get information about specific notifier
+
+To get information about a specific notifier, send a GET request to the `notifiers/ID` endpoint where `ID` is the unique ID of the notifier. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/notifiers/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+Example response:
+
+```json
+{
+  "createdAt":"2024-09-04T11:42:50.225Z",
+  "disabledUntil": "0001-01-01T00:00:00Z",
+  "id": "abc123",
+  "name": "test_notifier",
+  "properties": {
+    "email": {
+      "emails": [
+        "example1@abc.com",
+        "example2@abc.com"
+      ]
+    }
+  }
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/getNotifier).
+
+## Update notifiers
+
+To update a notifier, send a PUT request to the `notifiers/ID` endpoint where `ID` is the unique ID of the notifier. In the body of the request, specify the properties you want to update. Include the `name` field even if you don’t want to change it. For example:
+
+```bash
+curl -X 'PUT' 'https://api.axiom.co/v2/notifiers/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "name": "test_notifier",
+    "properties": {
+      "email": {
+        "emails": [
+          "example3@abc.com",
+          "example4@abc.com"
+        ]
+      }
+    }
+  }'
+```
+
+Example response:
+
+```json
+{
+  "disabledUntil": "0001-01-01T00:00:00Z",
+  "id": "abc123",
+  "name": "test_notifier",
+  "properties": {
+    "email": {
+      "emails": [
+        "example3@abc.com",
+        "example4@abc.com"
+      ]
+    }
+  }
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/updateNotifier).
+
+## Delete notifiers
+
+To delete a notifier, send a DELETE request to the `notifiers/ID` endpoint where `ID` is the unique ID of the notifier. For example:
+
+```bash
+curl -X 'DELETE' 'https://api.axiom.co/v2/notifiers/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+For more information, see the [API reference](/restapi/endpoints/deleteNotifier).
\ No newline at end of file
diff --git a/restapi/manage-resources/manage-users.mdx b/restapi/manage-resources/manage-users.mdx
new file mode 100644
index 00000000..a4bf8b0e
--- /dev/null
+++ b/restapi/manage-resources/manage-users.mdx
@@ -0,0 +1,165 @@
+---
+title: Manage users via API
+sidebarTitle: "Users"
+description: "Learn how to manage Axiom users via API."
+tags: ['axiom documentation', 'documentation', 'axiom', 'axiom api', 'rest api', 'rest', 'authorization', 'headers', 'datasets', 'users', 'monitors', 'notifiers', 'response']
+---
+
+import Prerequisites from "/snippets/minimal-prerequisites.mdx"
+
+This page explains how to manage users programmatically via the API.
+
+<Prerequisites />
+{/* list separator */}
+- [Create an API token in Axiom](/reference/tokens) with permissions to create, read, update, and delete users.
+- In the code samples below, replace `API_TOKEN` with the Axiom API token you have generated. For added security, store the API token in an environment variable.
+
+## Create users
+
+To create a user, send a POST request to the `users` endpoint. In the body of the request, specify the following:
+- `name`
+- `email`
+- `role`
+
+For example:
+
+```bash
+curl -X 'POST' 'https://api.axiom.co/v2/users' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN' \
+-d '{
+    "name": "test_user",
+    "email": "example@abc.com",
+    "role": "admin"
+  }'
+```
+
+The example response contains the user ID that you can later use to access the user programmatically.
+
+```json
+{
+  "email": "example@abc.com",
+  "id": "abc123",
+  "name": "test_user",
+  "role": {
+    "id": "admin",
+    "name": "admin"
+  }
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/createUser).
+
+## Get information about users
+
+### Get information about all users
+
+To get information about all the users in your Axiom organization, send a GET request to the `users` endpoint. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/users' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+The example response is a list of user objects. Each object contains a unique user ID that you can later use to access the user programmatically.
+
+```json
+[
+  {
+    "email": "example1@abc.com",
+    "id": "abc123",
+    "name": "test_user1",
+    "role": {
+      "id": "admin",
+      "name": "admin"
+    }
+  },
+  {
+    "email": "example2@abc.com",
+    "id": "abc321",
+    "name": "test_user2",
+    "role": {
+      "id": "admin",
+      "name": "admin"
+    }
+  }
+]
+```
+
+For more information, see the [API reference](/restapi/endpoints/getUsers).
+
+### Get information about specific user
+
+To get information about a specific user, send a GET request to the `users/ID` endpoint where `ID` is the unique ID of the user. For example:
+
+```bash
+curl -X 'GET' 'https://api.axiom.co/v2/users/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+Example response:
+
+```json
+{
+  "email": "example@abc.com",
+  "id": "abc123",
+  "name": "test_user",
+  "role": {
+    "id": "admin",
+    "name": "admin"
+  }
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/getUser).
+
+## Update users
+
+To update the name of your own user, send a PUT request to the `users/ID` endpoint where `ID` is the unique ID of your user.
+
+<Warning>
+Using this endpoint, you can change the name of your own user. Authorize the request with a [personal access token (PAT)](/reference/tokens).
+
+You cannot change the names of other users, you cannot change properties other than your name, and you cannot use an API token to authorize the request.
+</Warning>
+
+In the body of the request, specify the new name in the `name` field. For example:
+
+```bash
+curl -X 'PUT' 'https://api.axiom.co/v2/users/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer PERSONAL_ACCESS_TOKEN' \
+-d '{
+    "name": "test_user2"
+  }'
+```
+
+Example response:
+
+```json
+{
+  "email": "example@abc.com",
+  "id": "abc123",
+  "name": "test_user2",
+  "role": {
+    "id": "admin",
+    "name": "admin"
+  }
+}
+```
+
+For more information, see the [API reference](/restapi/endpoints/updateUser).
+
+## Delete users
+
+To delete a user, send a DELETE request to the `users/ID` endpoint where `ID` is the unique ID of the user. For example:
+
+```bash
+curl -X 'DELETE' 'https://api.axiom.co/v2/users/abc123' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer API_TOKEN'
+```
+
+For more information, see the [API reference](/restapi/endpoints/deleteUser).
\ No newline at end of file
diff --git a/restapi/manage-resources/overview.mdx b/restapi/manage-resources/overview.mdx
new file mode 100644
index 00000000..d74f100a
--- /dev/null
+++ b/restapi/manage-resources/overview.mdx
@@ -0,0 +1,14 @@
+---
+title: "Manage Axiom resources via API"
+description: "Learn how to manage Axiom resources via API."
+sidebarTitle: Overview
+tags: ['axiom documentation', 'documentation', 'axiom', 'axiom api', 'rest api', 'rest', 'authorization', 'headers', 'datasets', 'users', 'monitors', 'notifiers', 'response']
+---
+
+This section explains how to manage Axiom resources programmatically via the API.
+
+You can create, read, update, and delete the following resources using the API:
+- [Datasets](/restapi/manage-resources/manage-datasets)
+- [Monitors](/restapi/manage-resources/manage-monitors)
+- [Notifiers](/restapi/manage-resources/manage-notifiers)
+- [Users](/restapi/manage-resources/manage-users)
\ No newline at end of file
diff --git a/restapi/versions/v2.json b/restapi/versions/v2.json
index ecba7e58..50d0741a 100644
--- a/restapi/versions/v2.json
+++ b/restapi/versions/v2.json
@@ -217,54 +217,79 @@
         }
       }
     },
-    "/tokens": {
+    "/datasets": {
       "get": {
-        "security": [
-          {
-            "Auth": [
-              "apiTokens|read"
-            ]
-          }
-        ],
-        "description": "Get API tokens",
+        "description": "Get list of datasets",
         "tags": [
-          "tokens"
+          "Datasets"
         ],
-        "operationId": "getAPITokens",
+        "summary": "Get list of datasets",
+        "operationId": "getDatasets",
         "responses": {
           "200": {
-            "description": "Token",
+            "description": "Success",
             "content": {
               "application/json": {
                 "schema": {
                   "type": "array",
                   "items": {
-                    "$ref": "#/components/schemas/APIToken"
-                  }
+                    "$ref": "#/components/schemas/Dataset"
+                  },
+                  "example": [
+                    {
+                      "created": "2020-01-01T00:00:00Z",
+                      "description": "This is an example dataset",
+                      "id": "example-dataset",
+                      "name": "example-dataset",
+                      "who": "John Doe"
+                    },
+                    {
+                      "created": "2020-02-01T00:00:00Z",
+                      "description": "This is an example dataset",
+                      "id": "example-dataset-2",
+                      "name": "example-dataset-2",
+                      "who": "Foo Bar"
+                    }
+                  ]
                 }
               }
             }
+          },
+          "403": {
+            "$ref": "#/components/responses/ForbiddenError"
           }
-        }
+        },
+        "x-axiom-preview": true
       },
       "post": {
         "security": [
           {
             "Auth": [
-              "apiTokens|create"
+              "datasets|create"
             ]
           }
         ],
-        "description": "Create API token",
+        "description": "Create dataset",
         "tags": [
-          "tokens"
+          "Datasets"
+        ],
+        "summary": "Create dataset",
+        "operationId": "createDataset",
+        "parameters": [
+          {
+            "description": "Referrer slug",
+            "name": "referrer",
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
+          }
         ],
-        "operationId": "createAPIToken",
         "requestBody": {
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/CreateAPIToken"
+                "$ref": "#/components/schemas/CreateDataset"
               }
             }
           },
@@ -272,33 +297,74 @@
         },
         "responses": {
           "200": {
-            "description": "CreateApiTokenResponse",
+            "description": "Created",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/CreateAPITokenResponse"
+                  "$ref": "#/components/schemas/Dataset"
                 }
               }
             }
+          },
+          "403": {
+            "$ref": "#/components/responses/ForbiddenError"
           }
         },
-        "x-axiom-not-suspended": true
+        "x-axiom-preview": true
       }
     },
-    "/tokens/{id}": {
+    "/datasets/{id}": {
       "get": {
+        "description": "Get dataset by ID",
+        "tags": [
+          "Datasets"
+        ],
+        "summary": "Get dataset by ID",
+        "operationId": "getDataset",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Dataset"
+                }
+              }
+            }
+          },
+          "403": {
+            "$ref": "#/components/responses/ForbiddenError"
+          },
+          "404": {
+            "$ref": "#/components/responses/NotFoundError"
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "put": {
         "security": [
           {
             "Auth": [
-              "apiTokens|read"
+              "datasets|update"
             ]
           }
         ],
-        "description": "Get API token by ID",
+        "description": "Update dataset",
         "tags": [
-          "tokens"
+          "Datasets"
         ],
-        "operationId": "getAPIToken",
+        "summary": "Update dataset",
+        "operationId": "updateDataset",
         "parameters": [
           {
             "name": "id",
@@ -309,32 +375,47 @@
             }
           }
         ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UpdateDataset"
+              }
+            }
+          },
+          "required": true
+        },
         "responses": {
           "200": {
-            "description": "Token",
+            "description": "Dataset",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/APIToken"
+                  "$ref": "#/components/schemas/Dataset"
                 }
               }
             }
+          },
+          "403": {
+            "$ref": "#/components/responses/ForbiddenError"
           }
-        }
+        },
+        "x-axiom-preview": true
       },
       "delete": {
         "security": [
           {
             "Auth": [
-              "apiTokens|delete"
+              "datasets|delete"
             ]
           }
         ],
-        "description": "Delete API token",
+        "description": "Delete dataset",
         "tags": [
-          "tokens"
+          "Datasets"
         ],
-        "operationId": "deleteAPIToken",
+        "summary": "Delete dataset",
+        "operationId": "deleteDataset",
         "parameters": [
           {
             "name": "id",
@@ -348,24 +429,29 @@
         "responses": {
           "204": {
             "description": "(empty)"
+          },
+          "403": {
+            "$ref": "#/components/responses/ForbiddenError"
           }
-        }
+        },
+        "x-axiom-preview": true
       }
     },
-    "/tokens/{id}/regenerate": {
+    "/datasets/{id}/trim": {
       "post": {
         "security": [
           {
             "Auth": [
-              "apiTokens|update"
+              "trim|update"
             ]
           }
         ],
-        "description": "Regenerate API token",
+        "description": "Trim dataset",
         "tags": [
-          "tokens"
+          "datasets"
         ],
-        "operationId": "regenerateAPIToken",
+        "summary": "Trim dataset by duration",
+        "operationId": "trimDataset",
         "parameters": [
           {
             "name": "id",
@@ -380,242 +466,3289 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/RegenerateAPIToken"
+                "$ref": "#/components/schemas/TrimOptions"
               }
             }
+          },
+          "required": true
+        },
+        "responses": {
+          "204": {
+            "description": "TrimResult"
+          },
+          "403": {
+            "$ref": "#/components/responses/ForbiddenError"
+          },
+          "404": {
+            "$ref": "#/components/responses/NotFoundError"
           }
         },
+        "x-axiom-preview": true
+      }
+    },
+    "/datasets/{id}/vacuum": {
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "vacuum|update"
+            ]
+          }
+        ],
+        "tags": [
+          "datasets"
+        ],
+        "operationId": "vacuumDataset",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
         "responses": {
           "200": {
-            "description": "CreateAPITokenResponse",
-            "content": {
-              "application/json": {
+            "description": "VacuumResult"
+          },
+          "429": {
+            "description": "TooManyVacuumRequests",
+            "headers": {
+              "Retry-After": {
+                "description": "The GMT date/time at which the current rate limit window resets.\n",
                 "schema": {
-                  "$ref": "#/components/schemas/CreateAPITokenResponse"
+                  "type": "string"
                 }
               }
             }
           }
-        },
-        "x-axiom-not-suspended": true
-      }
-    }
-  },
-  "components": {
-    "parameters": {
-      "Limit": {
-        "name": "limit",
-        "in": "query",
-        "schema": {
-          "type": "integer",
-          "format": "int64",
-          "minimum": 1,
-          "maximum": 1000,
-          "default": 100
-        }
-      },
-      "Offset": {
-        "name": "offset",
-        "in": "query",
-        "schema": {
-          "type": "integer",
-          "format": "int64",
-          "minimum": 0,
-          "default": 0
-        }
-      },
-      "id": {
-        "description": "Unique ID of the annotation",
-        "name": "id",
-        "in": "path",
-        "required": true,
-        "schema": {
-          "type": "string",
-          "pattern": "^ann_"
         }
       }
     },
-    "responses": {
-      "ForbiddenError": {
-        "description": "Forbidden",
-        "content": {
-          "application/json": {
+    "/datasets/{id}/fields": {
+      "get": {
+        "tags": [
+          "datasets"
+        ],
+        "operationId": "getFieldsForDataset",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
             "schema": {
-              "type": "object",
-              "properties": {
-                "code": {
-                  "type": "string"
-                },
-                "message": {
-                  "type": "string"
-                }
-              },
-              "example": {
-                "code": 401,
-                "message": "Unauthorized"
-              }
+              "type": "string"
             }
           }
-        }
-      },
-      "NotFoundError": {
-        "description": "Not found",
-        "content": {
-          "application/json": {
-            "schema": {
-              "type": "object",
-              "properties": {
-                "code": {
-                  "type": "string"
-                },
-                "message": {
-                  "type": "string"
+        ],
+        "responses": {
+          "200": {
+            "description": "List of fields in the dataset",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/DatasetField"
+                  }
                 }
-              },
-              "example": {
-                "code": 404,
-                "message": "Not found"
               }
             }
+          },
+          "403": {
+            "$ref": "#/components/responses/ForbiddenError"
           }
         }
       }
     },
-    "requestBodies": {
-      "Monitor": {
-        "content": {
-          "application/json": {
+    "/datasets/{id}/fields/{fieldId}": {
+      "get": {
+        "tags": [
+          "datasets"
+        ],
+        "operationId": "getFieldForDataset",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
             "schema": {
-              "$ref": "#/components/schemas/Monitor"
+              "type": "string"
             }
-          }
-        },
-        "required": true
-      },
-      "Notifier": {
-        "content": {
-          "application/json": {
+          },
+          {
+            "name": "fieldId",
+            "in": "path",
+            "required": true,
             "schema": {
-              "$ref": "#/components/schemas/Notifier"
+              "type": "string"
             }
           }
-        },
-        "required": true
-      }
-    },
-    "securitySchemes": {
-      "Auth": {
-        "type": "oauth2",
-        "flows": {
-          "authorizationCode": {
-            "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth",
-            "tokenUrl": "https://www.googleapis.com/oauth2/v4/token",
-            "scopes": {}
-          }
-        }
-      },
-      "Shared": {
-        "type": "apiKey",
-        "name": "tk",
-        "in": "query"
+        ],
+        "responses": {
+          "200": {
+            "description": "DatasetField",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/DatasetField"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "datasets|update"
+            ]
+          }
+        ],
+        "tags": [
+          "datasets"
+        ],
+        "operationId": "updateFieldForDataset",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "fieldId",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/DatasetField"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "DatasetField",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/DatasetField"
+                }
+              }
+            }
+          }
+        }
       }
     },
-    "schemas": {
-      "APIToken": {
+    "/monitors": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "monitors|read"
+            ]
+          }
+        ],
+        "description": "Lists all configured monitors. Returns an array of monitor configurations including their IDs and current status.",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "getMonitors",
+        "responses": {
+          "200": {
+            "description": "Monitor",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/MonitorWithId"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "monitors|create"
+            ]
+          }
+        ],
+        "description": "Create monitor",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "createMonitor",
+        "requestBody": {
+          "$ref": "#/components/requestBodies/Monitor"
+        },
+        "responses": {
+          "200": {
+            "description": "Monitor",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/MonitorWithId"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      }
+    },
+    "/monitors/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "monitors|read"
+            ]
+          }
+        ],
+        "description": "Retrieves detailed configuration for a specific monitor by its unique identifier",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "getMonitor",
+        "parameters": [
+          {
+            "description": "Unique identifier of the monitor (format: mon_*)",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Monitor",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/MonitorWithId"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "monitors|update"
+            ]
+          }
+        ],
+        "description": "Update monitor",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "updateMonitor",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "$ref": "#/components/requestBodies/Monitor"
+        },
+        "responses": {
+          "200": {
+            "description": "Monitor",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/MonitorWithId"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "monitors|delete"
+            ]
+          }
+        ],
+        "description": "Delete monitor",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "deleteMonitor",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "Success"
+          }
+        },
+        "x-axiom-preview": true
+      }
+    },
+    "/monitors/{id}/history": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "monitors|read"
+            ]
+          }
+        ],
+        "description": "Get monitor history",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "getMonitorHistory",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "description": "Start time (ISO 8601 format) for filtering alert history.",
+            "name": "startTime",
+            "in": "query",
+            "required": true,
+            "schema": {
+              "type": "string",
+              "format": "date-time"
+            }
+          },
+          {
+            "description": "End time (ISO 8601 format) for filtering alert history.",
+            "name": "endTime",
+            "in": "query",
+            "required": true,
+            "schema": {
+              "type": "string",
+              "format": "date-time"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "AlertHistory",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/AlertHistory"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      }
+    },
+    "/notifiers": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "notifiers|read"
+            ]
+          }
+        ],
+        "description": "Lists all configured notifiers. Returns an array of notification configurations including their IDs and current status.",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "getNotifiers",
+        "responses": {
+          "200": {
+            "description": "Successfully retrieved list of notifiers",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/NotifierWithId"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "notifiers|create"
+            ]
+          }
+        ],
+        "description": "Creates a new notifier configuration for sending alerts through various channels (Slack, Email, etc)",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "createNotifier",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/Notifier"
+              }
+            }
+          },
+          "description": "Notifier configuration details",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "Notifier",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/NotifierWithId"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      }
+    },
+    "/notifiers/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "notifiers|read"
+            ]
+          }
+        ],
+        "description": "Retrieves detailed configuration for a specific notifier by its unique identifier",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "getNotifier",
+        "parameters": [
+          {
+            "description": "Unique identifier of the notifier (format: notify_*)",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Notifier",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/NotifierWithId"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "notifiers|update"
+            ]
+          }
+        ],
+        "description": "Update notifier",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "updateNotifier",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/Notifier"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "Notifier",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/NotifierWithId"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "notifiers|delete"
+            ]
+          }
+        ],
+        "description": "Delete notifier",
+        "tags": [
+          "Monitors"
+        ],
+        "operationId": "deleteNotifier",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "(empty)"
+          }
+        },
+        "x-axiom-preview": true
+      }
+    },
+    "/orgs": {
+      "get": {
+        "security": [
+          {
+            "Auth": []
+          }
+        ],
+        "tags": [
+          "orgs"
+        ],
+        "operationId": "getOrgs",
+        "responses": {
+          "200": {
+            "description": "Org",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/Org"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-no-org-required": true
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": []
+          }
+        ],
+        "tags": [
+          "orgs"
+        ],
+        "operationId": "createOrg",
+        "requestBody": {
+          "$ref": "#/components/requestBodies/PostOrg"
+        },
+        "responses": {
+          "200": {
+            "description": "Org",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Org"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-no-org-required": true
+      }
+    },
+    "/orgs/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": []
+          }
+        ],
+        "tags": [
+          "orgs"
+        ],
+        "operationId": "getOrg",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Org",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Org"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": []
+          }
+        ],
+        "tags": [
+          "orgs"
+        ],
+        "operationId": "updateOrg",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "$ref": "#/components/requestBodies/PostOrg"
+        },
+        "responses": {
+          "200": {
+            "description": "Org",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Org"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/rbac/roles": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|read"
+            ]
+          }
+        ],
+        "description": "Retrieves all roles in the organization with their associated permissions and members.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "List all roles",
+        "operationId": "listRoles",
+        "responses": {
+          "200": {
+            "description": "A list of roles was successfully retrieved",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/RoleWithID"
+                  }
+                }
+              }
+            }
+          }
+        }
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|create"
+            ]
+          }
+        ],
+        "description": "Creates a new role in the organization with the specified permissions and member assignments.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Create role",
+        "operationId": "createRole",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/Role"
+              }
+            }
+          },
+          "description": "The role configuration containing name, description, members, and capability settings",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "The role was successfully created",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/RoleWithID"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/rbac/roles/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|read"
+            ]
+          }
+        ],
+        "description": "Retrieves detailed information about a specific role by its unique identifier.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Get role by ID",
+        "operationId": "getRoleById",
+        "parameters": [
+          {
+            "description": "Unique identifier of the role to retrieve",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The role was successfully retrieved",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/RoleWithID"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|create"
+            ]
+          }
+        ],
+        "description": "Updates an existing role's configuration including its permissions and member assignments.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Update role",
+        "operationId": "updateRole",
+        "parameters": [
+          {
+            "description": "Unique identifier of the role to update",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/Role"
+              }
+            }
+          },
+          "description": "The updated role configuration",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "The role was successfully updated",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/RoleWithID"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|create"
+            ]
+          }
+        ],
+        "description": "Permanently removes a role from the organization.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Delete role",
+        "operationId": "deleteRole",
+        "parameters": [
+          {
+            "description": "Unique identifier of the role to delete",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "The role was successfully deleted"
+          }
+        }
+      }
+    },
+    "/rbac/groups": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|read"
+            ]
+          }
+        ],
+        "description": "Retrieves all groups in the organization.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "List all groups",
+        "operationId": "listGroups",
+        "responses": {
+          "200": {
+            "description": "A list of groups was successfully retrieved",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/GroupWithID"
+                  }
+                }
+              }
+            }
+          }
+        }
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|create"
+            ]
+          }
+        ],
+        "description": "Creates a new group in the organization.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Create group",
+        "operationId": "createGroup",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/Group"
+              }
+            }
+          },
+          "description": "The group configuration",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "The group was successfully created",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/GroupWithID"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/rbac/groups/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|read"
+            ]
+          }
+        ],
+        "description": "Retrieves detailed information about a specific group by its unique identifier.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Get group by ID",
+        "operationId": "getGroupById",
+        "parameters": [
+          {
+            "description": "Unique identifier of the group to retrieve",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The group was successfully retrieved",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/GroupWithID"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|create"
+            ]
+          }
+        ],
+        "description": "Updates an existing group's configuration.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Update group",
+        "operationId": "updateGroup",
+        "parameters": [
+          {
+            "description": "Unique identifier of the group to update",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/Group"
+              }
+            }
+          },
+          "description": "The updated group configuration",
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "The group was successfully updated",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/GroupWithID"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "rbac|create"
+            ]
+          }
+        ],
+        "description": "Permanently removes a group from the organization.",
+        "tags": [
+          "rbac"
+        ],
+        "summary": "Delete group",
+        "operationId": "deleteGroup",
+        "parameters": [
+          {
+            "description": "Unique identifier of the group to delete",
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "The group was successfully deleted"
+          }
+        }
+      }
+    },
+    "/apl-starred-queries": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "starredQueries|read"
+            ]
+          }
+        ],
+        "tags": [
+          "starred"
+        ],
+        "operationId": "getStarredQueries",
+        "parameters": [
+          {
+            "$ref": "#/components/parameters/Limit"
+          },
+          {
+            "$ref": "#/components/parameters/Offset"
+          },
+          {
+            "name": "dataset",
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "description": "'all', 'team', or userID",
+            "name": "who",
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "qs",
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "StarredQueryWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/StarredQueryWithId"
+                  }
+                }
+              }
+            }
+          }
+        }
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "starredQueries|create"
+            ]
+          }
+        ],
+        "tags": [
+          "starred"
+        ],
+        "operationId": "createStarred",
+        "requestBody": {
+          "$ref": "#/components/requestBodies/StarredQuery"
+        },
+        "responses": {
+          "200": {
+            "description": "StarredQueryWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/StarredQueryWithId"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/apl-starred-queries/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "starredQueries|read"
+            ]
+          }
+        ],
+        "tags": [
+          "starred"
+        ],
+        "operationId": "getStarred",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "StarredQueryWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/StarredQueryWithId"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "starredQueries|update"
+            ]
+          }
+        ],
+        "tags": [
+          "starred"
+        ],
+        "operationId": "updateStarred",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "$ref": "#/components/requestBodies/StarredQuery"
+        },
+        "responses": {
+          "200": {
+            "description": "StarredQueryWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/StarredQueryWithId"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "starredQueries|delete"
+            ]
+          }
+        ],
+        "tags": [
+          "starred"
+        ],
+        "operationId": "deleteStarred",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "(empty)"
+          }
+        }
+      }
+    },
+    "/tokens": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "apiTokens|read"
+            ]
+          }
+        ],
+        "description": "Get API tokens",
+        "tags": [
+          "tokens"
+        ],
+        "operationId": "getAPITokens",
+        "responses": {
+          "200": {
+            "description": "Token",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/APIToken"
+                  }
+                }
+              }
+            }
+          }
+        }
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "apiTokens|create"
+            ]
+          }
+        ],
+        "description": "Create API token",
+        "tags": [
+          "tokens"
+        ],
+        "operationId": "createAPIToken",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateAPIToken"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "CreateApiTokenResponse",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/CreateAPITokenResponse"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-not-suspended": true
+      }
+    },
+    "/tokens/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "apiTokens|read"
+            ]
+          }
+        ],
+        "description": "Get API token by ID",
+        "tags": [
+          "tokens"
+        ],
+        "operationId": "getAPIToken",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Token",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/APIToken"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "apiTokens|delete"
+            ]
+          }
+        ],
+        "description": "Delete API token",
+        "tags": [
+          "tokens"
+        ],
+        "operationId": "deleteAPIToken",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "(empty)"
+          }
+        }
+      }
+    },
+    "/tokens/{id}/regenerate": {
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "apiTokens|update"
+            ]
+          }
+        ],
+        "description": "Regenerate API token",
+        "tags": [
+          "tokens"
+        ],
+        "operationId": "regenerateAPIToken",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/RegenerateAPIToken"
+              }
+            }
+          }
+        },
+        "responses": {
+          "200": {
+            "description": "CreateAPITokenResponse",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/CreateAPITokenResponse"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-not-suspended": true
+      }
+    },
+    "/user": {
+      "get": {
+        "description": "Get current user",
+        "tags": [
+          "Users"
+        ],
+        "operationId": "getCurrentUser",
+        "responses": {
+          "200": {
+            "description": "User",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/User"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-no-org-required": true,
+        "x-axiom-preview": true
+      },
+      "post": {
+        "description": "Update current user",
+        "tags": [
+          "Users"
+        ],
+        "operationId": "updateCurrentUser",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UpdateCurrentUserRequest"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "User",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/User"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-no-org-required": true,
+        "x-axiom-preview": true
+      }
+    },
+    "/users": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "users|read"
+            ]
+          }
+        ],
+        "description": "Get users",
+        "tags": [
+          "Users"
+        ],
+        "operationId": "getUsers",
+        "responses": {
+          "200": {
+            "description": "User",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/User"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "users|create"
+            ]
+          }
+        ],
+        "description": "Create user",
+        "tags": [
+          "Users"
+        ],
+        "operationId": "createUser",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateUserRequest"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "User",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/User"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-no-org-required": true,
+        "x-axiom-not-suspended": true,
+        "x-axiom-preview": true
+      }
+    },
+    "/users/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "users|read"
+            ]
+          }
+        ],
+        "description": "Get user by ID",
+        "tags": [
+          "Users"
+        ],
+        "operationId": "getUser",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "User",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/User"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "users|delete"
+            ]
+          }
+        ],
+        "description": "Remove user from org",
+        "tags": [
+          "Users"
+        ],
+        "operationId": "removeUserFromOrg",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "(empty)"
+          }
+        },
+        "x-axiom-preview": true
+      }
+    },
+    "/users/{id}/role": {
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "users|update"
+            ]
+          }
+        ],
+        "description": "Update user role",
+        "tags": [
+          "Users"
+        ],
+        "operationId": "updateUserRole",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UpdateUserRoleRequest"
+              }
+            }
+          },
+          "required": true
+        },
+        "responses": {
+          "200": {
+            "description": "User",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/User"
+                }
+              }
+            }
+          }
+        },
+        "x-axiom-preview": true
+      }
+    },
+    "/vfields": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "virtualFields|read"
+            ]
+          }
+        ],
+        "tags": [
+          "vfields"
+        ],
+        "operationId": "getVirtualFields",
+        "parameters": [
+          {
+            "name": "dataset",
+            "in": "query",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "VirtualFieldWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/VirtualFieldWithId"
+                  }
+                }
+              }
+            }
+          }
+        }
+      },
+      "post": {
+        "security": [
+          {
+            "Auth": [
+              "virtualFields|create"
+            ]
+          }
+        ],
+        "tags": [
+          "vfields"
+        ],
+        "operationId": "createVirtualField",
+        "requestBody": {
+          "$ref": "#/components/requestBodies/VirtualField"
+        },
+        "responses": {
+          "200": {
+            "description": "VirtualFieldWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/VirtualFieldWithId"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/vfields/{id}": {
+      "get": {
+        "security": [
+          {
+            "Auth": [
+              "virtualFields|read"
+            ]
+          }
+        ],
+        "tags": [
+          "vfields"
+        ],
+        "operationId": "getVirtualField",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "VirtualFieldWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/VirtualFieldWithId"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put": {
+        "security": [
+          {
+            "Auth": [
+              "virtualFields|update"
+            ]
+          }
+        ],
+        "tags": [
+          "vfields"
+        ],
+        "operationId": "updateVirtualField",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "$ref": "#/components/requestBodies/VirtualField"
+        },
+        "responses": {
+          "200": {
+            "description": "VirtualFieldWithId",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/VirtualFieldWithId"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete": {
+        "security": [
+          {
+            "Auth": [
+              "virtualFields|delete"
+            ]
+          }
+        ],
+        "tags": [
+          "vfields"
+        ],
+        "operationId": "deleteVirtualField",
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "(empty)"
+          }
+        }
+      }
+    }
+  },
+  "components": {
+    "parameters": {
+      "Limit": {
+        "name": "limit",
+        "in": "query",
+        "schema": {
+          "type": "integer",
+          "format": "int64",
+          "minimum": 1,
+          "maximum": 1000,
+          "default": 100
+        }
+      },
+      "Offset": {
+        "name": "offset",
+        "in": "query",
+        "schema": {
+          "type": "integer",
+          "format": "int64",
+          "minimum": 0,
+          "default": 0
+        }
+      },
+      "id": {
+        "description": "Unique ID of the annotation",
+        "name": "id",
+        "in": "path",
+        "required": true,
+        "schema": {
+          "type": "string",
+          "pattern": "^ann_"
+        }
+      }
+    },
+    "responses": {
+      "ForbiddenError": {
+        "description": "Forbidden",
+        "content": {
+          "application/json": {
+            "schema": {
+              "type": "object",
+              "properties": {
+                "code": {
+                  "type": "string"
+                },
+                "message": {
+                  "type": "string"
+                }
+              },
+              "example": {
+                "code": 403,
+                "message": "Forbidden"
+              }
+            }
+          }
+        }
+      },
+      "NotFoundError": {
+        "description": "Not found",
+        "content": {
+          "application/json": {
+            "schema": {
+              "type": "object",
+              "properties": {
+                "code": {
+                  "type": "string"
+                },
+                "message": {
+                  "type": "string"
+                }
+              },
+              "example": {
+                "code": 404,
+                "message": "Not found"
+              }
+            }
+          }
+        }
+      }
+    },
+    "requestBodies": {
+      "Repo": {
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/Repo"
+            }
+          }
+        },
+        "required": true
+      },
+      "PostOrg": {
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/PostOrg"
+            }
+          }
+        },
+        "required": true
+      },
+      "StarredQuery": {
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/StarredQuery"
+            }
+          }
+        },
+        "required": true
+      },
+      "Monitor": {
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/Monitor"
+            }
+          }
+        },
+        "required": true
+      },
+      "VirtualField": {
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/VirtualField"
+            }
+          }
+        },
+        "required": true
+      }
+    },
+    "securitySchemes": {
+      "Auth": {
+        "type": "oauth2",
+        "flows": {
+          "authorizationCode": {
+            "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth",
+            "tokenUrl": "https://www.googleapis.com/oauth2/v4/token",
+            "scopes": {}
+          }
+        }
+      },
+      "Shared": {
+        "type": "apiKey",
+        "name": "tk",
+        "in": "query"
+      }
+    },
+    "schemas": {
+      "APIToken": {
+        "type": "object",
+        "required": [
+          "id",
+          "name",
+          "datasetCapabilities",
+          "orgCapabilities"
+        ],
+        "properties": {
+          "datasetCapabilities": {
+            "$ref": "#/components/schemas/datasetCapabilities"
+          },
+          "description": {
+            "description": "Description of the token",
+            "type": "string"
+          },
+          "expiresAt": {
+            "description": "Expiration date of the token (ISO 8601 format)",
+            "type": "string",
+            "format": "date-time",
+            "readOnly": true,
+            "nullable": true
+          },
+          "id": {
+            "description": "ID of the token",
+            "type": "string"
+          },
+          "name": {
+            "description": "Name of the token",
+            "type": "string"
+          },
+          "orgCapabilities": {
+            "$ref": "#/components/schemas/orgCapabilities"
+          },
+          "samlAuthenticated": {
+            "type": "boolean"
+          },
+          "viewCapabilities": {
+            "$ref": "#/components/schemas/viewCapabilities"
+          }
+        }
+      },
+      "APLRequestWithOptions": {
+        "type": "object",
+        "required": [
+          "apl"
+        ],
+        "properties": {
+          "apl": {
+            "type": "string"
+          },
+          "cursor": {
+            "type": "string"
+          },
+          "defaultLimit": {
+            "type": "integer",
+            "format": "int64"
+          },
+          "defaultOrder": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/APLRequestWithOptionsDefaultOrder"
+            }
+          },
+          "endTime": {
+            "type": "string"
+          },
+          "includeCursor": {
+            "type": "boolean"
+          },
+          "includeCursorField": {
+            "type": "boolean"
+          },
+          "libraries": {
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "queryOptions": {
+            "$ref": "#/components/schemas/QueryOptions"
+          },
+          "startTime": {
+            "type": "string"
+          },
+          "variables": {
+            "type": "object"
+          }
+        }
+      },
+      "APLRequestWithOptionsDefaultOrder": {
+        "type": "object",
+        "properties": {
+          "desc": {
+            "type": "boolean"
+          },
+          "field": {
+            "type": "string"
+          }
+        }
+      },
+      "AggInfo": {
+        "description": "AggInfo captures information about an aggregation",
+        "type": "object",
+        "properties": {
+          "args": {
+            "description": "Args specifies any non-field arguments for the aggregation. Fx. [10] for topk(players, 10).",
+            "type": "array",
+            "items": {}
+          },
+          "fields": {
+            "description": "Fields specifies the names of the fields this aggregation is computed on.\nFx [\"players\"] for topk(players, 10)",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "name": {
+            "description": "Name is the system name of the aggregation, which is the string form of aggregation.Type.\nIf the aggregation is aliased, the alias is stored in the parent FieldInfo",
+            "type": "string"
+          }
+        }
+      },
+      "AlertHistory": {
+        "description": "Historical record of an alert's state changes.\nTracks when alerts are opened and closed, allowing for incident timeline analysis.\n",
+        "type": "object",
+        "required": [
+          "name",
+          "checkId",
+          "timestamp",
+          "state"
+        ],
+        "properties": {
+          "checkId": {
+            "description": "Unique identifier of the check that triggered the alert",
+            "type": "string",
+            "example": "chk_abc123"
+          },
+          "name": {
+            "description": "The name of the alert",
+            "type": "string",
+            "example": "High CPU Usage Alert"
+          },
+          "state": {
+            "description": "Current state of the alert",
+            "type": "string",
+            "enum": [
+              "open",
+              "closed"
+            ],
+            "example": "open"
+          },
+          "timestamp": {
+            "description": "ISO 8601 timestamp when the alert state changed",
+            "type": "string",
+            "format": "date-time",
+            "example": "2024-03-20T15:30:00Z"
+          }
+        }
+      },
+      "Annotation": {
+        "type": "object",
+        "required": [
+          "id",
+          "time",
+          "datasets",
+          "type"
+        ],
+        "properties": {
+          "datasets": {
+            "description": "array<string> of dataset names for which the annotation appears on charts",
+            "type": "array",
+            "minItems": 1,
+            "items": {
+              "type": "string",
+              "minLength": 1
+            }
+          },
+          "description": {
+            "description": "Explanation of the event the annotation marks on the charts",
+            "type": "string",
+            "maxLength": 512
+          },
+          "endTime": {
+            "description": "End time of the annotation",
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
+          },
+          "id": {
+            "$ref": "#/components/schemas/AnnotationID"
+          },
+          "time": {
+            "description": "Time the annotation marks on the charts. If you don't include this field, Axiom assigns the time of the API request to the annotation.",
+            "type": "string",
+            "format": "date-time"
+          },
+          "title": {
+            "description": "Summary of the annotation that appears on the charts",
+            "type": "string",
+            "maxLength": 256
+          },
+          "type": {
+            "description": "Type of the event marked by the annotation. Use only alphanumeric characters or hyphens. For example, \"production-deployment\".",
+            "type": "string",
+            "maxLength": 256,
+            "pattern": "^[a-z0-9-]+$"
+          },
+          "url": {
+            "description": "URL relevant for the event marked by the annotation. For example, link to GitHub pull request.",
+            "type": "string",
+            "maxLength": 512
+          }
+        },
+        "example": {
+          "datasets": [
+            "my-dataset"
+          ],
+          "description": "Deploy new feature to the sales form",
+          "endTime": "2024-02-06T11:39:28.382Z",
+          "id": "ann_123",
+          "time": "2024-02-06T10:39:28.382Z",
+          "title": "Production deployment",
+          "type": "deploy",
+          "url": "https://example.com"
+        }
+      },
+      "AnnotationID": {
+        "type": "string",
+        "x-go-type": {
+          "import": {
+            "package": "github.com/axiomhq/axiom/pkg/core/ids"
+          },
+          "type": "AnnotationID"
+        }
+      },
+      "AplDeletionRequest": {
+        "type": "object",
+        "required": [
+          "apl",
+          "commit"
+        ],
+        "properties": {
+          "Modules": {
+            "description": "Key-value pairs of module names and module sources. Axiom will make modules available for this query later.",
+            "type": "object",
+            "additionalProperties": {
+              "type": "string"
+            }
+          },
+          "apl": {
+            "type": "string"
+          },
+          "commit": {
+            "type": "boolean"
+          },
+          "endTime": {
+            "type": "string"
+          },
+          "startTime": {
+            "description": "start and end time for the query, these must be specified as RFC3339 strings\nor using relative time expressions (e.g. now-1h, now-1d, now-1w, etc)",
+            "type": "string"
+          },
+          "variables": {
+            "description": "Variables is an optional set of additional variables that are inserted into the APL",
+            "type": "object",
+            "additionalProperties": {}
+          }
+        }
+      },
+      "AplDeletionResponse": {
+        "type": "object",
+        "required": [
+          "rowsMatched",
+          "rowsDeleted"
+        ],
+        "properties": {
+          "blocksMatched": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "dryRun": {
+            "type": "boolean"
+          },
+          "firstMatchedEvent": {
+            "description": "these are timestamps",
+            "type": "string"
+          },
+          "lastMatchedEvent": {
+            "type": "string"
+          },
+          "rowsDeleted": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "rowsMatched": {
+            "type": "integer",
+            "format": "uint64"
+          }
+        }
+      },
+      "AplModuleDefinition": {
+        "type": "object",
+        "properties": {
+          "constant": {
+            "$ref": "#/components/schemas/Constant"
+          },
+          "description": {
+            "description": "The description of the apl module definition.",
+            "type": "string"
+          },
+          "id": {
+            "description": "The unique identifier for the object.",
+            "type": "string"
+          },
+          "lookup": {
+            "$ref": "#/components/schemas/Lookup"
+          },
+          "name": {
+            "description": "The name of the apl module definition.",
+            "type": "string"
+          },
+          "namespace": {
+            "description": "The namespace of the APL module definition.",
+            "type": "string"
+          },
+          "type": {
+            "description": "The type of the object.",
+            "type": "string",
+            "enum": [
+              "REGEX",
+              "CONSTANT",
+              "LOOKUP"
+            ]
+          }
+        }
+      },
+      "AplQueryError": {
+        "type": "object",
+        "properties": {
+          "code": {
+            "description": "Status is the http status code associated with this error",
+            "type": "integer"
+          },
+          "detail": {
+            "$ref": "#/components/schemas/AplQueryErrorDetail"
+          },
+          "message": {
+            "description": "a formatted user-facing error message",
+            "type": "string"
+          }
+        }
+      },
+      "AplQueryErrorDetail": {
+        "type": "object",
+        "properties": {
+          "column": {
+            "description": "Column is the column associated with this compile type error",
+            "type": "integer",
+            "format": "int64"
+          },
+          "compileErrorCode": {
+            "description": "CompileErrorCode is a special error code that is only available for Compile Errors\nIt is an integer value that can be used to identify the error",
+            "type": "integer",
+            "format": "int64",
+            "enum": [
+              1,
+              2,
+              16,
+              17,
+              32,
+              33,
+              34
+            ]
+          },
+          "errorType": {
+            "description": "Error Type is an integer value indicating the kind of error",
+            "type": "integer",
+            "format": "int64",
+            "enum": [
+              1,
+              2,
+              3,
+              4
+            ]
+          },
+          "line": {
+            "description": "Line is the line associated with this compile type error",
+            "type": "integer",
+            "format": "int64"
+          },
+          "message": {
+            "description": "Message is the raw error message without any formatting",
+            "type": "string"
+          }
+        }
+      },
+      "AplRequest": {
+        "type": "object",
+        "required": [
+          "apl"
+        ],
+        "properties": {
+          "apl": {
+            "type": "string"
+          },
+          "variables": {
+            "type": "object",
+            "additionalProperties": {}
+          }
+        }
+      },
+      "AplResult": {
+        "type": "object",
+        "required": [
+          "status",
+          "tables"
+        ],
+        "properties": {
+          "status": {
+            "$ref": "#/components/schemas/Status"
+          },
+          "tables": {
+            "description": "Tables hold the result data for a query",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Table"
+            }
+          }
+        }
+      },
+      "BucketInfo": {
+        "description": "The standard mode of operation for Kirby is to create buckets on the _time column,",
+        "type": "object",
+        "title": "BucketInfo captures information about how a grouped query is sorted into buckets.",
+        "properties": {
+          "field": {
+            "description": "Field specifies the field used to create buckets on. Normally this would be _time.",
+            "type": "string"
+          },
+          "size": {
+            "description": "An integer or float representing the fixed bucket size.\nWhen the bucket field is _time this value is in nanoseconds."
+          }
+        }
+      },
+      "Constant": {
+        "type": "object",
+        "properties": {
+          "value": {
+            "description": "Constant value of any type"
+          }
+        }
+      },
+      "CreateAPIToken": {
+        "type": "object",
+        "required": [
+          "name"
+        ],
+        "properties": {
+          "datasetCapabilities": {
+            "$ref": "#/components/schemas/datasetCapabilities"
+          },
+          "description": {
+            "description": "Description of the token",
+            "type": "string"
+          },
+          "expiresAt": {
+            "description": "Expiration date of the token (ISO 8601 format)",
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
+          },
+          "name": {
+            "description": "Name of the token",
+            "type": "string"
+          },
+          "orgCapabilities": {
+            "$ref": "#/components/schemas/orgCapabilities"
+          },
+          "viewCapabilities": {
+            "$ref": "#/components/schemas/viewCapabilities"
+          }
+        }
+      },
+      "CreateAPITokenResponse": {
+        "type": "object",
+        "allOf": [
+          {
+            "$ref": "#/components/schemas/APIToken"
+          },
+          {
+            "type": "object",
+            "properties": {
+              "token": {
+                "type": "string",
+                "x-go-name": "Value"
+              }
+            }
+          }
+        ]
+      },
+      "CreateDataset": {
+        "type": "object",
+        "required": [
+          "name"
+        ],
+        "properties": {
+          "description": {
+            "description": "Dataset description",
+            "type": "string",
+            "default": ""
+          },
+          "name": {
+            "description": "Dataset unique name",
+            "type": "string"
+          },
+          "retentionDays": {
+            "description": "Number of days to retain data in the dataset",
+            "type": "integer"
+          },
+          "useRetentionPeriod": {
+            "description": "Whether to use the retention period",
+            "type": "boolean"
+          }
+        },
+        "example": {
+          "description": "string",
+          "name": "string",
+          "retentionDays": 30
+        }
+      },
+      "CreateUserRequest": {
+        "description": "Object representing a new user creation request",
+        "type": "object",
+        "required": [
+          "name",
+          "email",
+          "role"
+        ],
+        "properties": {
+          "email": {
+            "description": "Email address of the new user",
+            "type": "string",
+            "example": "jane.doe@example.com"
+          },
+          "name": {
+            "description": "Full name of the new user",
+            "type": "string",
+            "example": "Jane Doe"
+          },
+          "role": {
+            "description": "Role to assign to the new user",
+            "type": "string",
+            "example": "member"
+          }
+        }
+      },
+      "CustomNotifierConfig": {
+        "description": "Configuration for custom webhook notifications with flexible headers and body template.\nSupports variable substitution in the body template using {{.Variable}} syntax.\n",
+        "type": "object",
+        "required": [
+          "url",
+          "body"
+        ],
+        "properties": {
+          "body": {
+            "description": "Template for the webhook body, supports variable substitution",
+            "type": "string",
+            "example": "{\"alert\": \"{{.AlertName}}\", \"severity\": \"{{.Severity}}\", \"message\": \"{{.Message}}\"}"
+          },
+          "headers": {
+            "description": "HTTP headers to include in the request",
+            "type": "object",
+            "additionalProperties": {
+              "type": "string"
+            },
+            "example": {
+              "Content-Type": "application/json",
+              "X-API-Version": "1.0"
+            }
+          },
+          "secretHeaders": {
+            "description": "Sensitive HTTP headers (tokens, keys) that should be masked in logs",
+            "type": "object",
+            "additionalProperties": {
+              "type": "string"
+            },
+            "example": {
+              "Authorization": "Bearer {{token}}"
+            }
+          },
+          "url": {
+            "description": "Custom webhook endpoint URL",
+            "type": "string",
+            "example": "https://api.custom-service.com/alerts"
+          }
+        }
+      },
+      "DashboardID": {
+        "type": "string",
+        "x-go-type": {
+          "import": {
+            "package": "github.com/axiomhq/axiom/pkg/core/ids"
+          },
+          "type": "DashboardID"
+        }
+      },
+      "Dataset": {
         "type": "object",
         "required": [
           "id",
           "name",
-          "datasetCapabilities",
-          "orgCapabilities"
+          "description",
+          "created",
+          "who"
         ],
         "properties": {
-          "datasetCapabilities": {
-            "$ref": "#/components/schemas/datasetCapabilities"
+          "canWrite": {
+            "description": "Whether this dataset has write access",
+            "type": "boolean"
+          },
+          "created": {
+            "description": "The RFC3339-formatted time when the dataset was created.",
+            "type": "string",
+            "format": "date-time"
           },
           "description": {
-            "description": "Description of the token",
+            "description": "Dataset description",
+            "type": "string"
+          },
+          "id": {
+            "description": "Dataset ID",
+            "type": "string"
+          },
+          "name": {
+            "description": "Unique dataset name",
+            "type": "string"
+          },
+          "retentionDays": {
+            "description": "Number of days to retain data in the dataset",
+            "type": "integer"
+          },
+          "sharedByOrg": {
+            "description": "ID of the org that shared this resource, if it's shared",
+            "type": "string"
+          },
+          "useRetentionPeriod": {
+            "description": "Whether to use the retention period",
+            "type": "boolean"
+          },
+          "who": {
+            "description": "Name of the dataset creator",
+            "type": "string"
+          }
+        },
+        "example": {
+          "created": "2022-07-20T02:35:14.137Z",
+          "description": "string",
+          "id": "string",
+          "name": "string",
+          "who": "string"
+        }
+      },
+      "DatasetField": {
+        "type": "object",
+        "required": [
+          "name",
+          "type"
+        ],
+        "properties": {
+          "description": {
+            "description": "Description of the field",
+            "type": "string"
+          },
+          "hidden": {
+            "description": "Whether the field is hidden",
+            "type": "boolean"
+          },
+          "name": {
+            "description": "Name of the field",
+            "type": "string"
+          },
+          "type": {
+            "description": "Type of the field",
+            "type": "string"
+          },
+          "unit": {
+            "description": "Unit of the field",
+            "type": "string"
+          }
+        }
+      },
+      "DiscordConfig": {
+        "description": "Configuration for Discord notifications using bot token",
+        "properties": {
+          "discordChannel": {
+            "description": "Discord channel ID to send notifications",
+            "type": "string",
+            "example": "123456789012345678"
+          },
+          "discordToken": {
+            "description": "Discord bot token for authentication",
+            "type": "string",
+            "example": "Bot 123456789012345678"
+          }
+        }
+      },
+      "DiscordWebhookConfig": {
+        "description": "Configuration for Discord notifications using webhooks",
+        "properties": {
+          "discordWebhookUrl": {
+            "description": "Discord webhook URL",
+            "type": "string",
+            "example": "https://discord.com/api/webhooks/123456789012345678/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+          }
+        }
+      },
+      "EmailConfig": {
+        "description": "Configuration for email notifications",
+        "properties": {
+          "emails": {
+            "description": "List of email addresses to receive notifications",
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "example": [
+              "oncall@example.com",
+              "alerts@example.com"
+            ]
+          }
+        }
+      },
+      "ExternalPlan": {
+        "type": "object",
+        "required": [
+          "state"
+        ],
+        "properties": {
+          "endingBefore": {
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
+          },
+          "nextBillingDate": {
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
+          },
+          "planID": {
+            "type": "string"
+          },
+          "planInstanceID": {
+            "type": "string"
+          },
+          "startingOn": {
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
+          },
+          "state": {
+            "type": "string",
+            "enum": [
+              "active",
+              "inTrial",
+              "incubation",
+              "sunset",
+              "migration",
+              "empty"
+            ]
+          },
+          "trialEndingBefore": {
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
+          },
+          "trialed": {
+            "type": "boolean"
+          }
+        }
+      },
+      "FieldInfo": {
+        "type": "object",
+        "title": "FieldInfo captures information about a field used in the tabular result format. See Table.",
+        "properties": {
+          "agg": {
+            "$ref": "#/components/schemas/AggInfo"
+          },
+          "name": {
+            "type": "string"
+          },
+          "type": {
+            "type": "string"
+          }
+        }
+      },
+      "Group": {
+        "description": "Defines a group of users for organizational purposes",
+        "type": "object",
+        "required": [
+          "name"
+        ],
+        "properties": {
+          "description": {
+            "description": "Detailed description of the group's purpose and scope",
+            "type": "string"
+          },
+          "isManaged": {
+            "description": "Whether the group is managed by Axiom",
+            "type": "boolean",
+            "readOnly": true
+          },
+          "members": {
+            "description": "List of user IDs that are assigned to this group",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "name": {
+            "description": "Unique name identifier for the group",
+            "type": "string"
+          },
+          "roles": {
+            "description": "List of role IDs that are assigned to this group",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          }
+        }
+      },
+      "GroupInfo": {
+        "type": "object",
+        "title": "GroupInfo captures information about a grouping clause in the tabular result format. See Table.",
+        "properties": {
+          "name": {
             "type": "string"
+          }
+        }
+      },
+      "GroupWithID": {
+        "description": "Extends the base Group type to include a unique identifier",
+        "allOf": [
+          {
+            "$ref": "#/components/schemas/Group"
+          },
+          {
+            "type": "object",
+            "required": [
+              "id"
+            ],
+            "properties": {
+              "id": {
+                "description": "Unique identifier for the group",
+                "type": "string"
+              }
+            }
+          }
+        ]
+      },
+      "License": {
+        "type": "object",
+        "required": [
+          "id",
+          "tier",
+          "issuer",
+          "issuedTo",
+          "issuedAt",
+          "validFrom",
+          "monthlyIngestGb",
+          "monthlyQueryGbHours",
+          "apiRateLimitPerSecond",
+          "maxUsers",
+          "maxDatasets",
+          "maxMonitors",
+          "maxFields",
+          "maxEndpoints",
+          "maxQueryWindowSeconds",
+          "maxAuditWindowSeconds",
+          "withAuths",
+          "features"
+        ],
+        "properties": {
+          "apiRateLimitPerSecond": {
+            "type": "integer",
+            "format": "uint64"
           },
           "expiresAt": {
-            "description": "Expiration date of the token (ISO 8601 format)",
             "type": "string",
             "format": "date-time",
-            "readOnly": true,
             "nullable": true
           },
-          "id": {
-            "description": "ID of the token",
-            "type": "string"
+          "features": {
+            "type": "object",
+            "additionalProperties": {
+              "type": "boolean"
+            }
+          },
+          "id": {
+            "type": "string"
+          },
+          "issuedAt": {
+            "type": "string",
+            "format": "date-time"
+          },
+          "issuedTo": {
+            "type": "string"
+          },
+          "issuer": {
+            "type": "string"
+          },
+          "maxAuditWindowSeconds": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "maxDatasets": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "maxEndpoints": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "maxFields": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "maxMonitors": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "maxQueryWindowSeconds": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "maxUsers": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "monthlyIngestGb": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "monthlyQueryGbHours": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "storageAllowanceGB": {
+            "type": "integer",
+            "format": "uint64"
+          },
+          "tier": {
+            "type": "string",
+            "enum": [
+              "personal",
+              "basicDirect",
+              "teamMonthlyDirect",
+              "teamMonthlyAws",
+              "axiomCloud",
+              "teamPlus",
+              "enterprise",
+              "comped"
+            ]
           },
-          "name": {
-            "description": "Name of the token",
-            "type": "string"
+          "validFrom": {
+            "type": "string",
+            "format": "date-time"
           },
-          "orgCapabilities": {
-            "$ref": "#/components/schemas/orgCapabilities"
+          "withAuths": {
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           }
         }
       },
-      "AggInfo": {
-        "description": "AggInfo captures information about an aggregation",
+      "Lookup": {
         "type": "object",
         "properties": {
-          "args": {
-            "description": "Args specifies any non-field arguments for the aggregation. Fx. [10] for topk(players, 10).",
+          "rows": {
             "type": "array",
-            "items": {}
+            "items": {
+              "type": "array",
+              "items": {}
+            }
           },
-          "fields": {
-            "description": "Fields specifies the names of the fields this aggregation is computed on.\nFx [\"players\"] for topk(players, 10)",
+          "schema": {
             "type": "array",
             "items": {
-              "type": "string"
+              "type": "object",
+              "additionalProperties": {
+                "type": "string"
+              }
             }
+          }
+        }
+      },
+      "Message": {
+        "type": "object",
+        "required": [
+          "priority",
+          "count",
+          "message",
+          "code"
+        ],
+        "properties": {
+          "code": {
+            "type": "string"
           },
-          "name": {
-            "description": "Name is the system name of the aggregation, which is the string form of aggregation.Type.\nIf the aggregation is aliased, the alias is stored in the parent FieldInfo",
+          "count": {
+            "type": "integer",
+            "format": "int64"
+          },
+          "message": {
             "type": "string"
+          },
+          "priority": {
+            "type": "string",
+            "enum": [
+              "trace",
+              "debug",
+              "info",
+              "warn",
+              "error",
+              "fatal"
+            ]
           }
         }
       },
-      "AlertHistory": {
+      "MicrosoftTeamsConfig": {
+        "description": "Configuration for Microsoft Teams notifications",
+        "properties": {
+          "microsoftTeamsUrl": {
+            "description": "Microsoft Teams webhook URL",
+            "type": "string",
+            "example": "https://outlook.office.com/webhook/123456789/IncomingWebhook/..."
+          }
+        }
+      },
+      "Monitor": {
+        "description": "Configuration for a monitoring rule. Monitors can be configured to:\n- Check threshold values (e.g., CPU usage > 90%)\n- Match specific events in logs\n- Detect anomalies based on historical patterns\nEach monitor runs on a specified interval and can trigger notifications through configured notifiers.\n",
         "type": "object",
         "required": [
           "name",
-          "checkId",
-          "timestamp",
-          "state"
+          "type",
+          "aplQuery"
         ],
         "properties": {
-          "checkId": {
-            "description": "ID of the check that triggered the alert.",
-            "type": "string"
+          "alertOnNoData": {
+            "description": "Whether to alert when no data is received",
+            "type": "boolean",
+            "example": true
+          },
+          "aplQuery": {
+            "description": "APL (Axiom Processing Language) query string used for monitoring.\nThis query defines what data to analyze and how to process it.\n",
+            "type": "string",
+            "example": "| where severity = 'error' | count() > 100"
+          },
+          "columnName": {
+            "description": "Name of the column to monitor",
+            "type": "string",
+            "example": "cpu_usage"
+          },
+          "compareDays": {
+            "description": "Number of days to compare for anomaly detection",
+            "type": "number",
+            "format": "int64",
+            "maximum": 7,
+            "example": 7
+          },
+          "createdAt": {
+            "description": "Timestamp when the monitor was created",
+            "type": "string",
+            "format": "date-time",
+            "example": "2024-03-20T10:00:00Z"
+          },
+          "createdBy": {
+            "description": "ID of the user who created the monitor",
+            "type": "string",
+            "example": "usr_789xyz"
+          },
+          "description": {
+            "description": "Detailed description of the monitor's purpose",
+            "type": "string",
+            "example": "Monitors CPU usage and alerts when it exceeds 90%"
+          },
+          "disabled": {
+            "description": "Whether the monitor is currently disabled",
+            "type": "boolean",
+            "example": false
+          },
+          "disabledUntil": {
+            "description": "Timestamp until when the monitor should remain disabled",
+            "type": "string",
+            "format": "date-time",
+            "example": "2024-04-01T00:00:00Z",
+            "nullable": true
+          },
+          "intervalMinutes": {
+            "description": "How frequently the monitor should run, in minutes.\nMinimum value is 1 minute.\n",
+            "type": "integer",
+            "format": "int64",
+            "minimum": 1,
+            "example": 5
           },
           "name": {
-            "description": "The name of the alert.",
-            "type": "string"
+            "description": "Name of the monitor",
+            "type": "string",
+            "example": "Production CPU Monitor"
           },
-          "state": {
-            "description": "State of the alert.",
+          "notifierIds": {
+            "description": "List of notifier IDs that will receive alerts.\nNotifiers can be email, Slack, webhook endpoints, etc.\n",
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "example": [
+              "notify_slack_prod",
+              "notify_email_oncall"
+            ]
+          },
+          "notifyByGroup": {
+            "description": "Whether to group notifications",
+            "type": "boolean",
+            "example": false
+          },
+          "notifyEveryRun": {
+            "description": "Whether to send notifications on every check",
+            "type": "boolean",
+            "example": false
+          },
+          "operator": {
+            "description": "Comparison operator for threshold checks:\n- Below: Trigger when value < threshold\n- BelowOrEqual: Trigger when value <= threshold\n- Above: Trigger when value > threshold\n- AboveOrEqual: Trigger when value >= threshold\n- AboveOrBelow: Trigger when value is outside a range\n",
             "type": "string",
             "enum": [
-              "open",
-              "closed"
-            ]
+              "Below",
+              "BelowOrEqual",
+              "Above",
+              "AboveOrEqual",
+              "AboveOrBelow"
+            ],
+            "example": "Above"
           },
-          "timestamp": {
-            "description": "Timestamp of the transition into the current state.",
+          "rangeMinutes": {
+            "description": "Time window to evaluate in each check, in minutes.\nFor example, \"last 5 minutes of data\"\n",
+            "type": "integer",
+            "format": "int64",
+            "minimum": 1,
+            "example": 5
+          },
+          "resolvable": {
+            "description": "Whether the alert can be manually resolved",
+            "type": "boolean",
+            "example": true
+          },
+          "secondDelay": {
+            "description": "Delay in seconds before triggering the alert",
+            "type": "number",
+            "format": "int64",
+            "maximum": 86400,
+            "example": 300
+          },
+          "skipResolved": {
+            "description": "Whether to skip resolved alerts",
+            "type": "boolean",
+            "example": false
+          },
+          "threshold": {
+            "description": "Threshold value for triggering the alert",
+            "type": "number",
+            "format": "double",
+            "x-omitempty": false,
+            "example": 90
+          },
+          "tolerance": {
+            "description": "Tolerance percentage for anomaly detection",
+            "type": "number",
+            "maximum": 100,
+            "example": 10
+          },
+          "triggerAfterNPositiveResults": {
+            "description": "Number of positive results needed before triggering",
+            "type": "number",
+            "format": "int64",
+            "example": 2
+          },
+          "triggerFromNRuns": {
+            "description": "Number of consecutive check runs that must fail before triggering an alert.\nUse this to avoid alerting on temporary spikes.\n",
+            "type": "number",
+            "format": "int64",
+            "example": 3
+          },
+          "type": {
+            "description": "Type of monitoring check to perform:\n- Threshold: Compares a numeric value against a threshold\n- MatchEvent: Looks for specific events or patterns\n- AnomalyDetection: Identifies unusual patterns based on historical data\n",
             "type": "string",
-            "format": "date-time"
+            "enum": [
+              "Threshold",
+              "MatchEvent",
+              "AnomalyDetection"
+            ],
+            "example": "Threshold"
           }
         }
       },
-      "Annotation": {
+      "MonitorWithId": {
+        "description": "Monitor configuration with its unique identifier",
+        "allOf": [
+          {
+            "$ref": "#/components/schemas/Monitor"
+          },
+          {
+            "type": "object",
+            "required": [
+              "id"
+            ],
+            "properties": {
+              "id": {
+                "description": "Unique identifier for the monitor",
+                "type": "string",
+                "example": "mon_xyz789"
+              }
+            }
+          }
+        ]
+      },
+      "NewAnnotation": {
         "type": "object",
         "required": [
-          "id",
-          "time",
           "datasets",
           "type"
         ],
@@ -623,10 +3756,8 @@
           "datasets": {
             "description": "array<string> of dataset names for which the annotation appears on charts",
             "type": "array",
-            "minItems": 1,
             "items": {
-              "type": "string",
-              "minLength": 1
+              "type": "string"
             }
           },
           "description": {
@@ -637,11 +3768,7 @@
           "endTime": {
             "description": "End time of the annotation",
             "type": "string",
-            "format": "date-time",
-            "nullable": true
-          },
-          "id": {
-            "$ref": "#/components/schemas/AnnotationID"
+            "format": "date-time"
           },
           "time": {
             "description": "Time the annotation marks on the charts. If you don't include this field, Axiom assigns the time of the API request to the annotation.",
@@ -653,1060 +3780,1286 @@
             "type": "string",
             "maxLength": 256
           },
-          "type": {
-            "description": "Type of the event marked by the annotation. Use only alphanumeric characters or hyphens. For example, \"production-deployment\".",
-            "type": "string",
-            "maxLength": 256,
-            "pattern": "^[a-z0-9-]+$"
+          "type": {
+            "description": "Type of the event marked by the annotation. Use only alphanumeric characters or hyphens. For example, \"production-deployment\".",
+            "type": "string",
+            "maxLength": 256,
+            "pattern": "^[a-z0-9-]+$"
+          },
+          "url": {
+            "description": "URL relevant for the event marked by the annotation. For example, link to GitHub pull request.",
+            "type": "string",
+            "maxLength": 512
+          }
+        }
+      },
+      "Notifier": {
+        "description": "Configuration for a notification channel. Notifiers can be configured for various services like:\n- Slack\n- Email\n- PagerDuty\n- OpsGenie\n- Discord\n- Microsoft Teams\n- Custom Webhooks\n",
+        "type": "object",
+        "required": [
+          "name",
+          "properties"
+        ],
+        "properties": {
+          "createdAt": {
+            "description": "Timestamp when the notifier was created",
+            "type": "string",
+            "format": "date-time",
+            "readOnly": true,
+            "example": "2024-01-15T10:30:00Z"
+          },
+          "createdBy": {
+            "description": "Email or ID of the user who created the notifier",
+            "type": "string",
+            "readOnly": true,
+            "example": "alice@example.com"
+          },
+          "disabledUntil": {
+            "description": "ISO timestamp until which the notifier is disabled (null if enabled)",
+            "type": "string",
+            "example": "2024-03-20T15:00:00Z"
+          },
+          "name": {
+            "description": "Human-readable name for the notifier",
+            "type": "string",
+            "example": "Production Slack Alerts"
+          },
+          "properties": {
+            "$ref": "#/components/schemas/NotifierProperties"
+          }
+        }
+      },
+      "NotifierProperties": {
+        "description": "Configuration options for different notification channels. Only one channel should be configured per notifier.",
+        "properties": {
+          "customWebhook": {
+            "$ref": "#/components/schemas/CustomNotifierConfig"
+          },
+          "discord": {
+            "$ref": "#/components/schemas/DiscordConfig"
+          },
+          "discordWebhook": {
+            "$ref": "#/components/schemas/DiscordWebhookConfig"
+          },
+          "email": {
+            "$ref": "#/components/schemas/EmailConfig"
+          },
+          "microsoftTeams": {
+            "$ref": "#/components/schemas/MicrosoftTeamsConfig"
+          },
+          "opsgenie": {
+            "$ref": "#/components/schemas/OpsGenieConfig"
+          },
+          "pagerduty": {
+            "$ref": "#/components/schemas/PagerDutyConfig"
           },
-          "url": {
-            "description": "URL relevant for the event marked by the annotation. For example, link to GitHub pull request.",
-            "type": "string",
-            "maxLength": 512
+          "slack": {
+            "$ref": "#/components/schemas/SlackConfig"
+          },
+          "webhook": {
+            "$ref": "#/components/schemas/WebhookConfig"
           }
-        },
-        "example": {
-          "datasets": [
-            "my-dataset"
-          ],
-          "description": "Deploy new feature to the sales form",
-          "endTime": "2024-02-06T11:39:28.382Z",
-          "id": "ann_123",
-          "time": "2024-02-06T10:39:28.382Z",
-          "title": "Production deployment",
-          "type": "deploy",
-          "url": "https://example.com"
         }
       },
-      "AnnotationID": {
+      "NotifierWithId": {
+        "description": "Notifier configuration with its unique identifier",
+        "allOf": [
+          {
+            "$ref": "#/components/schemas/Notifier"
+          },
+          {
+            "properties": {
+              "id": {
+                "description": "Unique identifier for the notifier",
+                "type": "string",
+                "example": "notify_slack_prod"
+              }
+            }
+          }
+        ]
+      },
+      "OTELResponse": {
         "type": "string",
-        "x-go-type": {
-          "import": {
-            "package": "github.com/axiomhq/axiom/pkg/core/ids"
+        "format": "binary"
+      },
+      "OpsGenieConfig": {
+        "description": "Configuration for OpsGenie integration",
+        "properties": {
+          "apiKey": {
+            "description": "OpsGenie API key for authentication",
+            "type": "string",
+            "example": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
           },
-          "type": "AnnotationID"
+          "isEU": {
+            "description": "Whether to use EU region endpoints",
+            "type": "boolean",
+            "example": true
+          }
         }
       },
-      "AplDeletionRequest": {
+      "Order": {
         "type": "object",
         "required": [
-          "apl",
-          "commit"
+          "field",
+          "desc"
         ],
         "properties": {
-          "Modules": {
-            "description": "Modules is an optional set of module names => module sources that will be available to this query",
-            "type": "object",
-            "additionalProperties": {
-              "type": "string"
-            }
-          },
-          "apl": {
-            "type": "string"
-          },
-          "commit": {
+          "desc": {
             "type": "boolean"
           },
-          "endTime": {
-            "type": "string"
-          },
-          "startTime": {
-            "description": "start and end time for the query, these must be specified as RFC3339 strings\nor using relative time expressions (e.g. now-1h, now-1d, now-1w, etc)",
+          "field": {
             "type": "string"
-          },
-          "variables": {
-            "description": "Variables is an optional set of additional variables that are inserted into the APL",
-            "type": "object",
-            "additionalProperties": {}
           }
         }
       },
-      "AplDeletionResponse": {
+      "Org": {
         "type": "object",
         "required": [
-          "rowsMatched",
-          "rowsDeleted"
+          "id",
+          "name",
+          "plan",
+          "planCreated",
+          "lastUsageSync",
+          "paymentStatus",
+          "license",
+          "primaryEmail",
+          "externalPlan"
         ],
         "properties": {
-          "blocksMatched": {
-            "type": "integer",
-            "format": "uint64"
+          "externalPlan": {
+            "$ref": "#/components/schemas/ExternalPlan"
           },
-          "dryRun": {
-            "type": "boolean"
+          "firstFailedPayment": {
+            "type": "string"
           },
-          "firstMatchedEvent": {
-            "description": "these are timestamps",
+          "id": {
             "type": "string"
           },
-          "lastMatchedEvent": {
+          "lastUsageSync": {
             "type": "string"
           },
-          "rowsDeleted": {
-            "type": "integer",
-            "format": "uint64"
+          "license": {
+            "$ref": "#/components/schemas/License"
           },
-          "rowsMatched": {
-            "type": "integer",
-            "format": "uint64"
+          "metaCreated": {
+            "type": "string"
+          },
+          "metaModified": {
+            "type": "string"
+          },
+          "metaVersion": {
+            "type": "string"
+          },
+          "name": {
+            "type": "string"
+          },
+          "paymentStatus": {
+            "type": "string",
+            "enum": [
+              "na",
+              "failed",
+              "success",
+              "blocked"
+            ]
+          },
+          "plan": {
+            "type": "string",
+            "enum": [
+              "personal",
+              "basicDirect",
+              "teamMonthlyDirect",
+              "teamMonthlyAws",
+              "axiomCloud",
+              "teamPlus",
+              "enterprise",
+              "comped"
+            ]
+          },
+          "planCreated": {
+            "type": "string"
+          },
+          "primaryEmail": {
+            "type": "string"
+          },
+          "role": {
+            "type": "string"
           }
         }
       },
-      "AplQueryError": {
-        "type": "object",
+      "PagerDutyConfig": {
+        "description": "Configuration for PagerDuty integration",
         "properties": {
-          "code": {
-            "description": "Status is the http status code associated with this error",
-            "type": "integer"
-          },
-          "detail": {
-            "$ref": "#/components/schemas/AplQueryErrorDetail"
+          "routingKey": {
+            "description": "PagerDuty integration key for routing alerts",
+            "type": "string",
+            "example": "1234567890abcdef1234567890abcdef"
           },
-          "message": {
-            "description": "a formatted user-facing error message",
+          "token": {
+            "description": "PagerDuty API token for additional functionality",
+            "type": "string",
+            "example": "u+1234567890abcdef1234567890abcdef"
+          }
+        }
+      },
+      "PostOrg": {
+        "type": "object",
+        "required": [
+          "name"
+        ],
+        "properties": {
+          "name": {
             "type": "string"
           }
         }
       },
-      "AplQueryErrorDetail": {
+      "QueryOptions": {
         "type": "object",
         "properties": {
-          "column": {
-            "description": "Column is the column associated with this compile type error",
+          "disableCache": {
+            "type": "boolean"
+          },
+          "disableStats": {
+            "type": "boolean"
+          },
+          "disableTrace": {
+            "type": "boolean"
+          },
+          "maxDataPoints": {
             "type": "integer",
             "format": "int64"
           },
-          "compileErrorCode": {
-            "description": "CompileErrorCode is a special error code that is only available for Compile Errors\nIt is an integer value that can be used to identify the error",
+          "maxSeries": {
             "type": "integer",
-            "format": "int64",
-            "enum": [
-              1,
-              2,
-              16,
-              17,
-              32,
-              33,
-              34
-            ]
+            "format": "int64"
           },
-          "errorType": {
-            "description": "Error Type is an integer value indicating the kind of error",
-            "type": "integer",
-            "format": "int64",
+          "noAggregation": {
+            "type": "boolean"
+          },
+          "noFill": {
+            "type": "boolean"
+          },
+          "noInterpolation": {
+            "type": "boolean"
+          },
+          "priority": {
+            "type": "string",
             "enum": [
-              1,
-              2,
-              3,
-              4
+              "low",
+              "medium",
+              "high"
             ]
           },
-          "line": {
-            "description": "Line is the line associated with this compile type error",
-            "type": "integer",
-            "format": "int64"
-          },
-          "message": {
-            "description": "Message is the raw error message without any formatting",
+          "resolution": {
             "type": "string"
           }
         }
       },
-      "AplRequest": {
+      "RangeInfo": {
         "type": "object",
-        "required": [
-          "apl"
-        ],
+        "title": "RangeInfo specifies the window a query was restricted to.",
         "properties": {
-          "apl": {
+          "end": {
+            "description": "End is the ending time the query is limited by.\nQueries are restricted to the interval (start,end).",
+            "type": "string",
+            "format": "date-time"
+          },
+          "field": {
+            "description": "Field specifies the field name on which the query range was restricted. Normally _time",
             "type": "string"
           },
-          "variables": {
-            "type": "object",
-            "additionalProperties": {}
+          "start": {
+            "description": "Start is the starting time the query is limited by.\nQueries are restricted to the interval (start,end).",
+            "type": "string",
+            "format": "date-time"
           }
         }
       },
-      "AplResult": {
+      "RegenerateAPIToken": {
         "type": "object",
         "required": [
-          "status",
-          "tables"
+          "existingTokenExpiresAt"
         ],
         "properties": {
-          "status": {
-            "$ref": "#/components/schemas/Status"
+          "existingTokenExpiresAt": {
+            "description": "Expiration date of the existing token (ISO 8601 format)",
+            "type": "string",
+            "format": "date-time"
           },
-          "tables": {
-            "description": "Tables hold the result data for a query",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Table"
-            }
+          "newTokenExpiresAt": {
+            "description": "Expiration date of the new token (ISO 8601 format)",
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
           }
         }
       },
-      "BucketInfo": {
-        "description": "The standard mode of operation for Kirby is to create buckets on the _time column,",
+      "Repo": {
         "type": "object",
-        "title": "BucketInfo captures information about how a grouped query is sorted into buckets.",
         "properties": {
-          "field": {
-            "description": "Field specifies the field used to create buckets on. Normally this would be _time.",
+          "createdBy": {
+            "description": "UUID of the user or system that created the object.",
+            "type": "string",
+            "format": "uuid"
+          },
+          "data": {
+            "description": "Data specific to the type of repo object.",
             "type": "string"
           },
-          "size": {
-            "description": "An integer or float representing the fixed bucket size.\nWhen the bucket field is _time this value is in nanoseconds."
+          "global": {
+            "description": "Indicates whether the object is global.",
+            "type": "boolean"
+          },
+          "id": {
+            "description": "The unique identifier for the object.",
+            "type": "string"
+          },
+          "resourceId": {
+            "description": "The unique identifier for the associated resource object.",
+            "type": "string"
+          },
+          "type": {
+            "description": "The type of the object.",
+            "type": "string",
+            "enum": [
+              "PACKAGE",
+              "DATASET",
+              "MONITOR",
+              "DASHBOARD",
+              "VIRTUAL_FIELD",
+              "APL_MODULE_DEFINITION",
+              "VIEW"
+            ]
           }
         }
       },
-      "CreateAPIToken": {
+      "Role": {
+        "description": "Defines a role and its associated permissions within the system",
         "type": "object",
         "required": [
           "name"
         ],
         "properties": {
           "datasetCapabilities": {
-            "$ref": "#/components/schemas/datasetCapabilities"
+            "$ref": "#/components/schemas/roleDatasetCapabilities"
           },
           "description": {
-            "description": "Description of the token",
+            "description": "Detailed description of the role's purpose and scope",
             "type": "string"
           },
-          "expiresAt": {
-            "description": "Expiration date of the token (ISO 8601 format)",
-            "type": "string",
-            "format": "date-time",
-            "nullable": true
+          "members": {
+            "description": "List of user IDs that are assigned to this role",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
           "name": {
-            "description": "Name of the token",
+            "description": "Unique name identifier for the role",
             "type": "string"
           },
           "orgCapabilities": {
-            "$ref": "#/components/schemas/orgCapabilities"
+            "$ref": "#/components/schemas/roleOrgCapabilities"
+          },
+          "viewCapabilities": {
+            "$ref": "#/components/schemas/roleViewCapabilities"
           }
         }
       },
-      "CreateAPITokenResponse": {
-        "type": "object",
+      "RoleWithID": {
+        "description": "Extends the base Role type to include a unique identifier",
         "allOf": [
           {
-            "$ref": "#/components/schemas/APIToken"
+            "$ref": "#/components/schemas/Role"
           },
           {
             "type": "object",
+            "required": [
+              "id"
+            ],
             "properties": {
-              "token": {
-                "type": "string",
-                "x-go-name": "Value"
+              "id": {
+                "description": "Unique identifier for the role",
+                "type": "string"
               }
             }
           }
         ]
       },
-      "CreateDataset": {
-        "type": "object",
-        "required": [
-          "name"
-        ],
-        "properties": {
-          "description": {
-            "description": "Dataset description",
-            "type": "string",
-            "default": ""
-          },
-          "name": {
-            "description": "Dataset unique name",
-            "type": "string"
-          }
-        },
-        "example": {
-          "description": "string",
-          "name": "string"
-        }
-      },
-      "CreateUserRequest": {
+      "ShareRequest": {
         "type": "object",
-        "required": [
-          "name",
-          "email",
-          "role"
-        ],
         "properties": {
-          "email": {
-            "type": "string"
-          },
-          "name": {
-            "type": "string"
+          "canWrite": {
+            "type": "boolean"
           },
-          "role": {
-            "type": "string"
-          }
-        }
-      },
-      "CustomNotifierConfig": {
-        "type": "object",
-        "required": [
-          "url",
-          "body"
-        ],
-        "properties": {
-          "body": {
-            "type": "string"
+          "expiryDate": {
+            "description": "Optional time which the link will expire",
+            "type": "string",
+            "format": "date-time"
           },
-          "headers": {
-            "type": "object",
-            "additionalProperties": {
+          "organizationIds": {
+            "description": "Optional list of organization IDs to restrict access to the shared link.",
+            "type": "array",
+            "items": {
               "type": "string"
             }
           },
-          "url": {
-            "type": "string"
+          "type": {
+            "description": "The type of the object.",
+            "type": "string",
+            "enum": [
+              "PACKAGE",
+              "DATASET",
+              "MONITOR",
+              "DASHBOARD",
+              "VIRTUAL_FIELD",
+              "REGEX",
+              "QUERY",
+              "CONSTANT",
+              "MAPPING",
+              "VIEW"
+            ]
           }
         }
       },
-      "Dataset": {
+      "ShareResponse": {
         "type": "object",
-        "required": [
-          "id",
-          "name",
-          "description",
-          "created",
-          "who"
-        ],
         "properties": {
-          "created": {
-            "description": "The RFC3339-formatted time when the dataset was created.",
+          "canWrite": {
+            "type": "boolean"
+          },
+          "expiryDate": {
+            "description": "Optional time which the link will expire",
             "type": "string",
             "format": "date-time"
           },
-          "description": {
-            "description": "Dataset description",
-            "type": "string"
-          },
           "id": {
-            "description": "Dataset ID",
-            "type": "string"
-          },
-          "name": {
-            "description": "Unique dataset name",
-            "type": "string"
-          },
-          "who": {
-            "description": "Name of the dataset creator",
-            "type": "string"
-          }
-        },
-        "example": {
-          "created": "2022-07-20T02:35:14.137Z",
-          "description": "string",
-          "id": "string",
-          "name": "string",
-          "who": "string"
-        }
-      },
-      "DiscordConfig": {
-        "properties": {
-          "discordChannel": {
+            "description": "The unique identifier for the object.",
             "type": "string"
           },
-          "discordToken": {
-            "type": "string"
-          }
-        }
-      },
-      "DiscordWebhookConfig": {
-        "properties": {
-          "discordWebhookUrl": {
-            "type": "string"
-          }
-        }
-      },
-      "EmailConfig": {
-        "properties": {
-          "emails": {
+          "organizationIds": {
+            "description": "Optional list of organization IDs with access to the shared link.",
             "type": "array",
             "items": {
               "type": "string"
             }
-          }
-        }
-      },
-      "FieldInfo": {
-        "type": "object",
-        "title": "FieldInfo captures information about a field used in the tabular result format. See Table.",
-        "properties": {
-          "agg": {
-            "$ref": "#/components/schemas/AggInfo"
           },
-          "name": {
+          "shareableLink": {
+            "description": "The URL that can be used to access the shared repo.",
             "type": "string"
           },
-          "type": {
+          "token": {
             "type": "string"
+          },
+          "type": {
+            "description": "The type of the object.",
+            "type": "string",
+            "enum": [
+              "PACKAGE",
+              "DATASET",
+              "MONITOR",
+              "DASHBOARD",
+              "VIRTUAL_FIELD",
+              "REGEX",
+              "QUERY",
+              "VIEW"
+            ]
           }
         }
       },
-      "GroupInfo": {
-        "type": "object",
-        "title": "GroupInfo captures information about a grouping clause in the tabular result format. See Table.",
+      "SlackConfig": {
+        "description": "Configuration for Slack notifications using incoming webhooks",
         "properties": {
-          "name": {
-            "type": "string"
+          "slackUrl": {
+            "description": "Slack incoming webhook URL",
+            "type": "string",
+            "example": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
           }
         }
       },
-      "Message": {
+      "SlackEvent": {
         "type": "object",
         "required": [
-          "priority",
-          "count",
-          "message",
-          "code"
+          "token",
+          "team_id",
+          "api_app_id",
+          "event",
+          "type",
+          "event_id",
+          "event_time"
         ],
         "properties": {
-          "code": {
+          "api_app_id": {
+            "description": "ID of the Slack app that the event is for",
             "type": "string"
           },
-          "count": {
+          "event": {
+            "type": "object",
+            "required": [
+              "type",
+              "user",
+              "ts",
+              "channel"
+            ],
+            "properties": {
+              "channel": {
+                "description": "Channel ID where the event occurred",
+                "type": "string"
+              },
+              "text": {
+                "description": "Text content of the event",
+                "type": "string"
+              },
+              "ts": {
+                "description": "Timestamp of when the event occurred",
+                "type": "string"
+              },
+              "type": {
+                "description": "Type of the event",
+                "type": "string"
+              },
+              "user": {
+                "description": "ID of the user who triggered the event",
+                "type": "string"
+              }
+            }
+          },
+          "event_id": {
+            "description": "Unique identifier for the event",
+            "type": "string"
+          },
+          "event_time": {
+            "description": "Timestamp of when the event was dispatched",
             "type": "integer",
             "format": "int64"
           },
-          "message": {
+          "team_id": {
+            "description": "ID of the team where the event originated",
             "type": "string"
           },
-          "priority": {
-            "type": "string",
-            "enum": [
-              "trace",
-              "debug",
-              "info",
-              "warn",
-              "error",
-              "fatal"
-            ]
+          "token": {
+            "description": "Verification token to validate the event is from Slack",
+            "type": "string"
+          },
+          "type": {
+            "description": "Type of the event callback",
+            "type": "string"
           }
         }
       },
-      "MicrosoftTeamsConfig": {
+      "SourceInfo": {
+        "description": "Result sources will typically be the names of a datasets that were searched,\nbut may be expanded to other things in the future.",
+        "type": "object",
+        "title": "SourceInfo specifies the provenance of a results Table.",
         "properties": {
-          "microsoftTeamsUrl": {
+          "name": {
             "type": "string"
           }
         }
       },
-      "Monitor": {
+      "StarredQuery": {
         "type": "object",
         "required": [
-          "name"
-        ],
-        "properties": {
-          "alertOnNoData": {
-            "type": "boolean"
-          },
-          "aplQuery": {
-            "type": "string"
-          },
-          "columnName": {
+          "kind",
+          "name",
+          "who",
+          "query",
+          "metadata"
+        ],
+        "properties": {
+          "dataset": {
             "type": "string"
           },
-          "compareDays": {
-            "type": "number",
-            "format": "int64",
-            "maximum": 7
-          },
-          "createdAt": {
+          "kind": {
             "type": "string",
-            "format": "date-time"
+            "enum": [
+              "apl"
+            ]
           },
-          "createdBy": {
-            "type": "string"
+          "metadata": {
+            "type": "object",
+            "additionalProperties": {
+              "type": "string"
+            }
           },
-          "description": {
+          "name": {
             "type": "string"
           },
-          "disabled": {
-            "type": "boolean"
-          },
-          "disabledUntil": {
-            "type": "string",
-            "format": "date-time",
-            "nullable": true
+          "query": {
+            "$ref": "#/components/schemas/APLRequestWithOptions"
           },
-          "id": {
+          "who": {
             "type": "string"
+          }
+        }
+      },
+      "StarredQueryWithId": {
+        "type": "object",
+        "allOf": [
+          {
+            "$ref": "#/components/schemas/StarredQuery"
           },
-          "intervalMinutes": {
+          {
+            "type": "object",
+            "required": [
+              "id"
+            ],
+            "properties": {
+              "id": {
+                "type": "string"
+              }
+            }
+          }
+        ]
+      },
+      "Status": {
+        "type": "object",
+        "required": [
+          "elapsedTimeNs",
+          "isCached",
+          "isEstimated",
+          "rowsExamined",
+          "rowsMatched"
+        ],
+        "properties": {
+          "elapsedTimeNs": {
             "type": "integer",
-            "format": "int64",
-            "minimum": 1
+            "format": "int64"
           },
-          "name": {
+          "isCached": {
+            "type": "boolean"
+          },
+          "isEstimated": {
+            "type": "boolean"
+          },
+          "maxCursor": {
+            "description": "Row id of the newest row, as seen server side.\nMay be higher than what the results include if the server scanned more data than included in the results.\nCan be used to efficiently resume time-sorted non-aggregating queries (ie filtering only).",
             "type": "string"
           },
-          "notifierIds": {
+          "messages": {
             "type": "array",
             "items": {
-              "type": "string"
+              "$ref": "#/components/schemas/Message"
             }
           },
-          "notifyByGroup": {
-            "type": "boolean"
-          },
-          "operator": {
-            "type": "string",
-            "enum": [
-              "Below",
-              "BelowOrEqual",
-              "Above",
-              "AboveOrEqual",
-              "AboveOrBelow"
-            ]
+          "minCursor": {
+            "description": "Row id of the oldest row, as seen server side.\nMay be lower than what the results include if the server scanned more data than included in the results.\nCan be used to efficiently resume time-sorted non-aggregating queries (ie filtering only).",
+            "type": "string"
           },
-          "rangeMinutes": {
+          "rowsExamined": {
             "type": "integer",
-            "format": "int64",
-            "minimum": 1
-          },
-          "resolvable": {
-            "type": "boolean"
-          },
-          "secondDelay": {
-            "type": "number",
-            "format": "int64",
-            "maximum": 86400
-          },
-          "threshold": {
-            "type": "number",
-            "format": "double",
-            "x-omitempty": false
-          },
-          "tolerance": {
-            "type": "number",
-            "maximum": 100
-          },
-          "triggerAfterNPositiveResults": {
-            "type": "number",
-            "format": "int64"
-          },
-          "triggerFromNRuns": {
-            "type": "number",
-            "format": "int64"
+            "format": "uint64"
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "Threshold",
-              "MatchEvent",
-              "AnomalyDetection"
-            ]
+          "rowsMatched": {
+            "type": "integer",
+            "format": "uint64"
           }
         }
       },
-      "NewAnnotation": {
+      "Table": {
         "type": "object",
-        "required": [
-          "datasets",
-          "type"
-        ],
+        "title": "Table defines the schema for query results.",
         "properties": {
-          "datasets": {
-            "description": "array<string> of dataset names for which the annotation appears on charts",
+          "buckets": {
+            "$ref": "#/components/schemas/BucketInfo"
+          },
+          "columns": {
+            "description": "Columns contain a series of arrays with the raw result data.\nThe columns here line up with the fields in the Fields array.",
             "type": "array",
             "items": {
-              "type": "string"
+              "type": "array",
+              "items": {}
             }
           },
-          "description": {
-            "description": "Explanation of the event the annotation marks on the charts",
-            "type": "string",
-            "maxLength": 512
+          "fields": {
+            "description": "Fields contain information about the fields included in these results.\nThe order of the fields match up with the order of the data in Columns.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/FieldInfo"
+            }
           },
-          "endTime": {
-            "description": "End time of the annotation",
-            "type": "string",
-            "format": "date-time"
+          "groups": {
+            "description": "Groups specifies which grouping operations has been performed on the results.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/GroupInfo"
+            }
           },
-          "time": {
-            "description": "Time the annotation marks on the charts. If you don't include this field, Axiom assigns the time of the API request to the annotation.",
-            "type": "string",
-            "format": "date-time"
+          "name": {
+            "description": "Name is the name assigned to this table. Defaults to \"0\". The name \"_totals\" is reserved for system use.",
+            "type": "string"
           },
-          "title": {
-            "description": "Summary of the annotation that appears on the charts",
-            "type": "string",
-            "maxLength": 256
+          "order": {
+            "description": "Order echoes the ordering clauses that was used to sort the results.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Order"
+            }
           },
-          "type": {
-            "description": "Type of the event marked by the annotation. Use only alphanumeric characters or hyphens. For example, \"production-deployment\".",
-            "type": "string",
-            "maxLength": 256,
-            "pattern": "^[a-z0-9-]+$"
+          "range": {
+            "$ref": "#/components/schemas/RangeInfo"
           },
-          "url": {
-            "description": "URL relevant for the event marked by the annotation. For example, link to GitHub pull request.",
-            "type": "string",
-            "maxLength": 512
+          "sources": {
+            "description": "Sources contain the names of the datasets that contributed data to these results.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/SourceInfo"
+            }
           }
         }
       },
-      "Notifier": {
+      "TokenInfo": {
         "type": "object",
-        "required": [
-          "name",
-          "properties"
-        ],
         "properties": {
-          "createdAt": {
-            "type": "string",
-            "format": "date-time",
-            "readOnly": true
-          },
-          "createdBy": {
+          "expiryDate": {
+            "description": "Optional time which the link will expire",
             "type": "string",
-            "readOnly": true
+            "format": "date-time"
           },
-          "disabledUntil": {
+          "ownerEmail": {
+            "description": "Email of the owner.",
             "type": "string"
           },
-          "id": {
+          "resourceId": {
+            "description": "The unique identifier for the associated resource object.",
             "type": "string"
           },
-          "name": {
+          "resourceType": {
+            "description": "The type of the resource.",
             "type": "string"
-          },
-          "properties": {
-            "$ref": "#/components/schemas/NotifierProperties"
           }
         }
       },
-      "NotifierProperties": {
+      "TrimOptions": {
+        "type": "object",
+        "required": [
+          "maxDuration"
+        ],
         "properties": {
-          "customWebhook": {
-            "$ref": "#/components/schemas/CustomNotifierConfig"
-          },
-          "discord": {
-            "$ref": "#/components/schemas/DiscordConfig"
-          },
-          "discordWebhook": {
-            "$ref": "#/components/schemas/DiscordWebhookConfig"
-          },
-          "email": {
-            "$ref": "#/components/schemas/EmailConfig"
-          },
-          "microsoftTeams": {
-            "$ref": "#/components/schemas/MicrosoftTeamsConfig"
-          },
-          "opsgenie": {
-            "$ref": "#/components/schemas/OpsGenieConfig"
-          },
-          "pagerduty": {
-            "$ref": "#/components/schemas/PagerDutyConfig"
-          },
-          "slack": {
-            "$ref": "#/components/schemas/SlackConfig"
-          },
-          "webhook": {
-            "$ref": "#/components/schemas/WebhookConfig"
+          "maxDuration": {
+            "type": "string",
+            "example": "1h"
+          }
+        },
+        "example": {
+          "maxDuration": "1h"
+        }
+      },
+      "UpdateCurrentUserRequest": {
+        "description": "Object representing a user update request",
+        "type": "object",
+        "required": [
+          "name"
+        ],
+        "properties": {
+          "name": {
+            "description": "New name for the user",
+            "type": "string",
+            "example": "John Smith"
           }
         }
       },
-      "OpsGenieConfig": {
+      "UpdateDataset": {
+        "type": "object",
         "properties": {
-          "apiKey": {
+          "description": {
             "type": "string"
           },
-          "isEU": {
+          "retentionDays": {
+            "description": "Number of days to retain data in the dataset",
+            "type": "integer"
+          },
+          "useRetentionPeriod": {
+            "description": "Whether to use the retention period",
             "type": "boolean"
           }
+        },
+        "example": {
+          "description": "string",
+          "retentionDays": 30
         }
       },
-      "Order": {
+      "UpdateUserRoleRequest": {
+        "description": "Object representing a user's role update request",
         "type": "object",
         "required": [
-          "field",
-          "desc"
+          "role"
         ],
         "properties": {
-          "desc": {
-            "type": "boolean"
-          },
-          "field": {
-            "type": "string"
-          }
-        }
-      },
-      "PagerDutyConfig": {
-        "properties": {
-          "routingKey": {
-            "type": "string"
-          },
-          "token": {
-            "type": "string"
+          "role": {
+            "description": "Role identifier to assign to the user",
+            "type": "string",
+            "example": "admin"
           }
         }
       },
-      "RangeInfo": {
+      "UpdatedAnnotation": {
         "type": "object",
-        "title": "RangeInfo specifies the window a query was restricted to.",
         "properties": {
-          "end": {
-            "description": "End is the ending time the query is limited by.\nQueries are restricted to the interval (start,end).",
+          "datasets": {
+            "description": "array<string> of dataset names for which the annotation appears on charts",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "minLength": 1
+            }
+          },
+          "description": {
+            "description": "Explanation of the event the annotation marks on the charts",
             "type": "string",
-            "format": "date-time"
+            "maxLength": 512
           },
-          "field": {
-            "description": "Field specifies the field name on which the query range was restricted. Normally _time",
-            "type": "string"
+          "endTime": {
+            "description": "End time of the annotation",
+            "type": "string",
+            "format": "date-time"
           },
-          "start": {
-            "description": "Start is the starting time the query is limited by.\nQueries are restricted to the interval (start,end).",
+          "time": {
+            "description": "Time the annotation marks on the charts. If you don't include this field, Axiom assigns the time of the API request to the annotation.",
             "type": "string",
             "format": "date-time"
+          },
+          "title": {
+            "description": "Summary of the annotation that appears on the charts",
+            "type": "string",
+            "maxLength": 256
+          },
+          "type": {
+            "description": "Type of the event marked by the annotation. Use only alphanumeric characters or hyphens. For example, \"production-deployment\".",
+            "type": "string",
+            "maxLength": 256,
+            "pattern": "^[a-z0-9-]+$"
+          },
+          "url": {
+            "description": "URL relevant for the event marked by the annotation. For example, link to GitHub pull request.",
+            "type": "string",
+            "maxLength": 512
           }
         }
       },
-      "RegenerateAPIToken": {
+      "User": {
+        "description": "Represents a user in the system",
         "type": "object",
         "required": [
-          "existingTokenExpiresAt"
+          "id",
+          "name",
+          "email",
+          "role"
         ],
         "properties": {
-          "existingTokenExpiresAt": {
-            "description": "Expiration date of the existing token (ISO 8601 format)",
+          "email": {
+            "description": "User's email address",
             "type": "string",
-            "format": "date-time"
+            "example": "john.doe@example.com"
           },
-          "newTokenExpiresAt": {
-            "description": "Expiration date of the new token (ISO 8601 format)",
+          "id": {
+            "description": "Unique identifier for the user",
             "type": "string",
-            "format": "date-time",
-            "nullable": true
+            "example": "usr_123456789"
+          },
+          "name": {
+            "description": "User's full name",
+            "type": "string",
+            "example": "John Doe"
+          },
+          "role": {
+            "$ref": "#/components/schemas/UserDetailsRole"
           }
         }
       },
-      "SlackConfig": {
+      "UserDetailsRole": {
+        "description": "Detailed information about a user's role",
+        "type": "object",
+        "required": [
+          "id",
+          "name"
+        ],
         "properties": {
-          "slackUrl": {
-            "type": "string"
+          "id": {
+            "description": "Unique identifier for the role",
+            "type": "string",
+            "example": "role_123456789"
+          },
+          "name": {
+            "description": "Human-readable name of the role",
+            "type": "string",
+            "example": "Organization Admin"
           }
         }
       },
-      "SlackEvent": {
+      "VirtualField": {
         "type": "object",
         "required": [
-          "token",
-          "team_id",
-          "api_app_id",
-          "event",
-          "type",
-          "event_id",
-          "event_time"
+          "dataset",
+          "name",
+          "expression"
         ],
         "properties": {
-          "api_app_id": {
-            "description": "ID of the Slack app that the event is for",
+          "dataset": {
             "type": "string"
           },
-          "event": {
+          "description": {
+            "type": "string"
+          },
+          "expression": {
+            "type": "string"
+          },
+          "name": {
+            "type": "string"
+          },
+          "type": {
+            "type": "string"
+          },
+          "unit": {
+            "type": "string"
+          }
+        }
+      },
+      "VirtualFieldWithId": {
+        "allOf": [
+          {
+            "$ref": "#/components/schemas/VirtualField"
+          },
+          {
             "type": "object",
             "required": [
-              "type",
-              "user",
-              "ts",
-              "channel"
+              "id"
             ],
             "properties": {
-              "channel": {
-                "description": "Channel ID where the event occurred",
+              "id": {
                 "type": "string"
+              }
+            }
+          }
+        ]
+      },
+      "WebhookConfig": {
+        "description": "Configuration for simple webhook notifications",
+        "properties": {
+          "url": {
+            "description": "Webhook endpoint URL",
+            "type": "string",
+            "example": "https://api.example.com/webhooks/alerts"
+          }
+        }
+      },
+      "datasetCapabilities": {
+        "type": "object",
+        "additionalProperties": {
+          "properties": {
+            "data": {
+              "description": "Data Management capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "delete"
+                ]
               },
-              "text": {
-                "description": "Text content of the event",
-                "type": "string"
+              "x-omitempty": true
+            },
+            "ingest": {
+              "description": "Ingest capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "create"
+                ]
               },
-              "ts": {
-                "description": "Timestamp of when the event occurred",
-                "type": "string"
+              "x-omitempty": true
+            },
+            "query": {
+              "description": "Query capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "read"
+                ]
               },
-              "type": {
-                "description": "Type of the event",
-                "type": "string"
+              "x-omitempty": true
+            },
+            "share": {
+              "description": "Sharing dataset capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "create",
+                  "read",
+                  "delete"
+                ]
+              },
+              "x-omitempty": true
+            },
+            "starredQueries": {
+              "description": "Starred queries capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "create",
+                  "read",
+                  "update",
+                  "delete"
+                ]
+              },
+              "x-omitempty": true
+            },
+            "trim": {
+              "description": "Data Trimming capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "update"
+                ]
+              },
+              "x-omitempty": true
+            },
+            "vacuum": {
+              "description": "Field Vacuuming capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "update"
+                ]
+              },
+              "x-omitempty": true
+            },
+            "virtualFields": {
+              "description": "Virtual fields capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "create",
+                  "read",
+                  "update",
+                  "delete"
+                ]
               },
-              "user": {
-                "description": "ID of the user who triggered the event",
-                "type": "string"
-              }
+              "x-omitempty": true
             }
-          },
-          "event_id": {
-            "description": "Unique identifier for the event",
-            "type": "string"
-          },
-          "event_time": {
-            "description": "Timestamp of when the event was dispatched",
-            "type": "integer",
-            "format": "int64"
-          },
-          "team_id": {
-            "description": "ID of the team where the event originated",
-            "type": "string"
-          },
-          "token": {
-            "description": "Verification token to validate the event is from Slack",
-            "type": "string"
-          },
-          "type": {
-            "description": "Type of the event callback",
-            "type": "string"
-          }
-        }
-      },
-      "SourceInfo": {
-        "description": "Result sources will typically be the names of a datasets that were searched,\nbut may be expanded to other things in the future.",
-        "type": "object",
-        "title": "SourceInfo specifies the provenance of a results Table.",
-        "properties": {
-          "name": {
-            "type": "string"
           }
         }
       },
-      "Status": {
+      "orgCapabilities": {
         "type": "object",
-        "required": [
-          "elapsedTimeNs",
-          "isCached",
-          "isEstimated",
-          "rowsExamined",
-          "rowsMatched"
-        ],
         "properties": {
-          "elapsedTimeNs": {
-            "type": "integer",
-            "format": "int64"
-          },
-          "isCached": {
-            "type": "boolean"
-          },
-          "isEstimated": {
-            "type": "boolean"
-          },
-          "maxCursor": {
-            "description": "Row id of the newest row, as seen server side.\nMay be higher than what the results include if the server scanned more data than included in the results.\nCan be used to efficiently resume time-sorted non-aggregating queries (ie filtering only).",
-            "type": "string"
-          },
-          "messages": {
+          "annotations": {
+            "description": "Annotations capability",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/Message"
-            }
-          },
-          "minCursor": {
-            "description": "Row id of the oldest row, as seen server side.\nMay be lower than what the results include if the server scanned more data than included in the results.\nCan be used to efficiently resume time-sorted non-aggregating queries (ie filtering only).",
-            "type": "string"
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "rowsExamined": {
-            "type": "integer",
-            "format": "uint64"
+          "apiTokens": {
+            "description": "API tokens capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "rowsMatched": {
-            "type": "integer",
-            "format": "uint64"
-          }
-        }
-      },
-      "Table": {
-        "type": "object",
-        "title": "Table defines the schema for query results.",
-        "properties": {
-          "buckets": {
-            "$ref": "#/components/schemas/BucketInfo"
+          "auditLog": {
+            "description": "Audit Log capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "read"
+              ]
+            },
+            "x-omitempty": true
           },
-          "columns": {
-            "description": "Columns contain a series of arrays with the raw result data.\nThe columns here line up with the fields in the Fields array.",
+          "billing": {
+            "description": "Billing capability",
             "type": "array",
             "items": {
-              "type": "array",
-              "items": {}
-            }
+              "type": "string",
+              "enum": [
+                "read",
+                "update"
+              ]
+            },
+            "x-omitempty": true
           },
-          "fields": {
-            "description": "Fields contain information about the fields included in these results.\nThe order of the fields match up with the order of the data in Columns.",
+          "dashboards": {
+            "description": "Dashboards capability",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/FieldInfo"
-            }
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "groups": {
-            "description": "Groups specifies which grouping operations has been performed on the results.",
+          "datasets": {
+            "description": "Datasets capability",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/GroupInfo"
-            }
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "name": {
-            "description": "Name is the name assigned to this table. Defaults to \"0\". The name \"_totals\" is reserved for system use.",
-            "type": "string"
+          "endpoints": {
+            "description": "Endpoints capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "order": {
-            "description": "Order echoes the ordering clauses that was used to sort the results.",
+          "flows": {
+            "description": "Flows capability",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/Order"
-            }
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "range": {
-            "$ref": "#/components/schemas/RangeInfo"
+          "integrations": {
+            "description": "Integrations capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "sources": {
-            "description": "Sources contain the names of the datasets that contributed data to these results.",
+          "monitors": {
+            "description": "Monitors capability",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/SourceInfo"
-            }
-          }
-        }
-      },
-      "TrimOptions": {
-        "type": "object",
-        "required": [
-          "maxDuration"
-        ],
-        "properties": {
-          "maxDuration": {
-            "type": "string",
-            "example": "1h"
-          }
-        },
-        "example": {
-          "maxDuration": "1h"
-        }
-      },
-      "UpdateDataset": {
-        "type": "object",
-        "properties": {
-          "description": {
-            "type": "string"
-          }
-        },
-        "example": {
-          "description": "string"
-        }
-      },
-      "UpdatedAnnotation": {
-        "type": "object",
-        "properties": {
-          "datasets": {
-            "description": "array<string> of dataset names for which the annotation appears on charts",
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
+          },
+          "notifiers": {
+            "description": "Notifiers capability",
             "type": "array",
             "items": {
               "type": "string",
-              "minLength": 1
-            }
-          },
-          "description": {
-            "description": "Explanation of the event the annotation marks on the charts",
-            "type": "string",
-            "maxLength": 512
-          },
-          "endTime": {
-            "description": "End time of the annotation",
-            "type": "string",
-            "format": "date-time"
-          },
-          "time": {
-            "description": "Time the annotation marks on the charts. If you don't include this field, Axiom assigns the time of the API request to the annotation.",
-            "type": "string",
-            "format": "date-time"
-          },
-          "title": {
-            "description": "Summary of the annotation that appears on the charts",
-            "type": "string",
-            "maxLength": 256
-          },
-          "type": {
-            "description": "Type of the event marked by the annotation. Use only alphanumeric characters or hyphens. For example, \"production-deployment\".",
-            "type": "string",
-            "maxLength": 256,
-            "pattern": "^[a-z0-9-]+$"
-          },
-          "url": {
-            "description": "URL relevant for the event marked by the annotation. For example, link to GitHub pull request.",
-            "type": "string",
-            "maxLength": 512
-          }
-        }
-      },
-      "User": {
-        "type": "object",
-        "required": [
-          "id",
-          "name",
-          "email",
-          "role"
-        ],
-        "properties": {
-          "email": {
-            "type": "string"
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "id": {
-            "type": "string"
+          "rbac": {
+            "description": "Access control capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "name": {
-            "type": "string"
+          "sharedAccessKeys": {
+            "description": "Shared access keys capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "read",
+                "update"
+              ]
+            },
+            "x-omitempty": true
           },
-          "role": {
-            "$ref": "#/components/schemas/UserDetailsRole"
-          }
-        }
-      },
-      "UserDetailsRole": {
-        "properties": {
-          "id": {
-            "type": "string"
+          "users": {
+            "description": "Users capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           },
-          "name": {
-            "type": "string"
-          }
-        }
-      },
-      "UserRole": {
-        "type": "object",
-        "required": [
-          "role"
-        ],
-        "properties": {
-          "role": {
-            "type": "string"
-          }
-        }
-      },
-      "UserUpdate": {
-        "type": "object",
-        "required": [
-          "name"
-        ],
-        "properties": {
-          "name": {
-            "type": "string"
-          }
-        }
-      },
-      "WebhookConfig": {
-        "properties": {
-          "url": {
-            "type": "string"
+          "views": {
+            "description": "Views capability",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
           }
         }
       },
-      "datasetCapabilities": {
+      "roleDatasetCapabilities": {
+        "description": "Defines the available permissions for dataset operations",
         "type": "object",
         "additionalProperties": {
           "properties": {
             "data": {
-              "description": "Data Management capability",
+              "description": "Controls data management operations like deletion",
               "type": "array",
               "items": {
                 "type": "string",
@@ -1717,7 +5070,7 @@
               "x-omitempty": true
             },
             "ingest": {
-              "description": "Ingest capability",
+              "description": "Controls the ability to ingest data into datasets",
               "type": "array",
               "items": {
                 "type": "string",
@@ -1728,7 +5081,7 @@
               "x-omitempty": true
             },
             "query": {
-              "description": "Query capability",
+              "description": "Controls the ability to query and read data from datasets",
               "type": "array",
               "items": {
                 "type": "string",
@@ -1738,8 +5091,21 @@
               },
               "x-omitempty": true
             },
+            "share": {
+              "description": "Controls the ability to share datasets with other users",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "create",
+                  "read",
+                  "delete"
+                ]
+              },
+              "x-omitempty": true
+            },
             "starredQueries": {
-              "description": "Starred queries capability",
+              "description": "Controls the management of starred/saved queries",
               "type": "array",
               "items": {
                 "type": "string",
@@ -1753,7 +5119,7 @@
               "x-omitempty": true
             },
             "trim": {
-              "description": "Data Trimming capability",
+              "description": "Controls data trimming operations for storage optimization",
               "type": "array",
               "items": {
                 "type": "string",
@@ -1764,7 +5130,7 @@
               "x-omitempty": true
             },
             "vacuum": {
-              "description": "Field Vacuuming capability",
+              "description": "Controls field vacuuming operations for storage optimization",
               "type": "array",
               "items": {
                 "type": "string",
@@ -1775,7 +5141,7 @@
               "x-omitempty": true
             },
             "virtualFields": {
-              "description": "Virtual fields capability",
+              "description": "Controls the management of virtual fields in datasets",
               "type": "array",
               "items": {
                 "type": "string",
@@ -1791,11 +5157,12 @@
           }
         }
       },
-      "orgCapabilities": {
+      "roleOrgCapabilities": {
+        "description": "Defines organization-wide permissions and capabilities",
         "type": "object",
         "properties": {
           "annotations": {
-            "description": "Annotations capability",
+            "description": "Controls the management of annotations across the organization",
             "type": "array",
             "items": {
               "type": "string",
@@ -1809,7 +5176,7 @@
             "x-omitempty": true
           },
           "apiTokens": {
-            "description": "API tokens capability",
+            "description": "Controls the management of API tokens for authentication",
             "type": "array",
             "items": {
               "type": "string",
@@ -1823,7 +5190,7 @@
             "x-omitempty": true
           },
           "auditLog": {
-            "description": "Audit Log capability",
+            "description": "Controls access to organization audit logs",
             "type": "array",
             "items": {
               "type": "string",
@@ -1834,7 +5201,7 @@
             "x-omitempty": true
           },
           "billing": {
-            "description": "Billing capability",
+            "description": "Controls access to billing information and settings",
             "type": "array",
             "items": {
               "type": "string",
@@ -1846,7 +5213,7 @@
             "x-omitempty": true
           },
           "dashboards": {
-            "description": "Dashboards capability",
+            "description": "Controls the management of organization dashboards",
             "type": "array",
             "items": {
               "type": "string",
@@ -1860,7 +5227,7 @@
             "x-omitempty": true
           },
           "datasets": {
-            "description": "Datasets capability",
+            "description": "Controls the management of organization datasets",
             "type": "array",
             "items": {
               "type": "string",
@@ -1874,7 +5241,7 @@
             "x-omitempty": true
           },
           "endpoints": {
-            "description": "Endpoints capability",
+            "description": "Controls the management of API endpoints",
             "type": "array",
             "items": {
               "type": "string",
@@ -1888,7 +5255,7 @@
             "x-omitempty": true
           },
           "flows": {
-            "description": "Flows capability",
+            "description": "Controls the management of data flows and pipelines",
             "type": "array",
             "items": {
               "type": "string",
@@ -1902,7 +5269,7 @@
             "x-omitempty": true
           },
           "integrations": {
-            "description": "Integrations capability",
+            "description": "Controls the management of third-party integrations",
             "type": "array",
             "items": {
               "type": "string",
@@ -1916,7 +5283,7 @@
             "x-omitempty": true
           },
           "monitors": {
-            "description": "Monitors capability",
+            "description": "Controls the management of monitoring",
             "type": "array",
             "items": {
               "type": "string",
@@ -1930,7 +5297,7 @@
             "x-omitempty": true
           },
           "notifiers": {
-            "description": "Notifiers capability",
+            "description": "Controls the management of notification settings",
             "type": "array",
             "items": {
               "type": "string",
@@ -1944,7 +5311,7 @@
             "x-omitempty": true
           },
           "rbac": {
-            "description": "Access control capability",
+            "description": "Controls access to role-based access control settings",
             "type": "array",
             "items": {
               "type": "string",
@@ -1958,7 +5325,7 @@
             "x-omitempty": true
           },
           "sharedAccessKeys": {
-            "description": "Shared access keys capability",
+            "description": "Controls the management of shared access keys",
             "type": "array",
             "items": {
               "type": "string",
@@ -1970,7 +5337,21 @@
             "x-omitempty": true
           },
           "users": {
-            "description": "Users capability",
+            "description": "Controls user management within the organization",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "enum": [
+                "create",
+                "read",
+                "update",
+                "delete"
+              ]
+            },
+            "x-omitempty": true
+          },
+          "views": {
+            "description": "Controls the management of data views",
             "type": "array",
             "items": {
               "type": "string",
@@ -1984,6 +5365,69 @@
             "x-omitempty": true
           }
         }
+      },
+      "roleViewCapabilities": {
+        "description": "Defines the available permissions for view operations",
+        "type": "object",
+        "additionalProperties": {
+          "properties": {
+            "query": {
+              "description": "Controls the ability to query and read data from views",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "read"
+                ]
+              },
+              "x-omitempty": true
+            },
+            "share": {
+              "description": "Controls the ability to share views with other users",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "create",
+                  "read",
+                  "delete"
+                ]
+              },
+              "x-omitempty": true
+            }
+          }
+        }
+      },
+      "viewCapabilities": {
+        "type": "object",
+        "additionalProperties": {
+          "properties": {
+            "query": {
+              "description": "Query capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "read"
+                ]
+              },
+              "x-omitempty": true
+            },
+            "share": {
+              "description": "Sharing view capability",
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "create",
+                  "read",
+                  "delete"
+                ]
+              },
+              "x-omitempty": true
+            }
+          }
+        }
       }
     }
   }