{
  "openapi": "3.0.3",
  "info": {
    "title": "BloodHound API",
    "contact": {
      "name": "BloodHound Enterprise Support",
      "url": "https://bloodhound.specterops.io/",
      "email": "support@specterops.io"
    },
    "license": {
      "name": "Apache-2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0"
    },
    "version": "v2",
    "description": "This is the API that drives BloodHound Enterprise and Community Edition.\nEndpoint availability is denoted using the `Community` and `Enterprise` tags.\n\nContact information listed is for BloodHound Enterprise customers. To get help with\nBloodHound Community Edition, please join our\n[Slack community](https://ghst.ly/BHSlack/).\n\n## Authentication\n\nThe BloodHound API supports two kinds of authentication: JWT bearer tokens and Signed Requests.\nFor quick tests or one-time calls, the JWT used by your browser may be the simplest route. For\nmore secure and long lived API integrations, the recommended option is signed requests.\n\n### JWT Bearer Token\n\nThe API will accept calls using the following header structure in the HTTP request:\n```\nAuthorization: Bearer $JWT_TOKEN\n```\nIf you open the Network tab within your browser, you will see calls against the API made utilizing\nthis structure. JWT bearer tokens are supported by the BloodHound API, however it is recommended\nthey only be used for temporary access. JWT tokens expire after a set amount of time and require\nre-authentication using secret credentials.\n\n### Signed Requests\n\nSigned requests are the recommended form of authentication for the BloodHound API. Not only are\nsigned requests better for long lived integrations, they also provide more security for the\nrequests being sent. They provide authentication of the client, as well as verification of request\nintegrity when received by the server.\n\nSigned requests consist of three main parts: The client token ID, the request timestamp, and a\nbase64 encoded HMAC signature. These three pieces of information are sent with the request using\nthe following header structure:\n\n```\nAuthorization: bhesignature $TOKEN_ID\nRequestDate: $RFC3339_DATETIME\nSignature: $BASE64ENCODED_HMAC_SIGNATURE\n```\n\nTo use signed requests, you will need to generate an API token. Each API token generated in the\nBloodHound API comes with two parts: The Token ID, which is used in the `Authorization` header,\nand the Token Key, which is used as part of the HMAC hashing process. The token ID should be\nconsidered as public (like a username) and the token key should be considered secret (like a\npassword). Once an API token is generated, you can use the key to sign requests.\n\nFor more documentation about how to work with authentication in the API, including examples\nof how to generate an API token in the BloodHound UI, please refer to this support doc:\n[Working with the BloodHound API](https://bloodhound.specterops.io/integrations/bloodhound-api/working-with-api).\n\n#### Signed Request Pseudo-code Example\n\nFirst, a digest is initiated with HMAC-SHA-256 using the token key as the digest key:\n```python\ndigester = hmac.new(sha256, api_token_key)\n```\n\nOperationKey is the first HMAC digest link in the signature chain. This prevents replay attacks that\nseek to modify the request method or URI. It is composed of concatenating the request method and\nthe request URI with no delimiter and computing the HMAC digest using the token key as the digest\nsecret:\n```python\n# Example: GET /api/v2/test/resource HTTP/1.1\n# Signature Component: GET/api/v2/test/resource\ndigester.write(request_method + request_uri)\n\n# Update the digester for further chaining\ndigester = hmac.New(sha256, digester.hash())\n```\n\nDateKey is the next HMAC digest link in the signature chain. This encodes the RFC3339\nformatted datetime value as part of the signature to the hour to prevent replay\nattacks that are older than max two hours. This value is added to the signature chain\nby cutting off all values from the RFC3339 formatted datetime from the hours value\nforward:\n```python\n# Example: 2020-12-01T23:59:60Z\n# Signature Component: 2020-12-01T23\nrequest_datetime = date.now()\ndigester.write(request_datetime[:13])\n\n# Update the digester for further chaining\ndigester = hmac.New(sha256, digester.hash())\n```\n\nBody signing is the last HMAC digest link in the signature chain. This encodes the\nrequest body as part of the signature to prevent replay attacks that seek to modify\nthe payload of a signed request. In the case where there is no body content the\nHMAC digest is computed anyway, simply with no values written to the digester:\n```python\nif request.body is not empty:\n  digester.write(request.body)\n```\n\nFinally, base64 encode the final hash and write the three required headers before\nsending the request:\n```python\nencoded_hash = base64_encode(digester.hash())\nrequest.header.write('Authorization', 'bhesignature ' + token_id)\nrequest.header.write('RequestDate', request_datetime)\nrequest.header.write('Signature', encoded_hash)\n```\n"
  },
  "servers": [
    {
      "url": "/",
      "description": "This is the base path for all endpoints, relative to the domain where the API is being hosted."
    }
  ],
  "security": [
    {
      "JWTBearerToken": []
    },
    {
      "SignedRequest": [],
      "RequestDate": [],
      "HMACSignature": []
    }
  ],
  "paths": {
    "/api/v2/login": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "Login",
        "summary": "Login to BloodHound",
        "description": "Login to BloodHound with user credentials or a one time password.",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "security": [],
        "requestBody": {
          "description": "The request body for logging into the application. `secret` *or* `otp` is required, but not both.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "login_method",
                  "username"
                ],
                "properties": {
                  "login_method": {
                    "description": "The type of login. Currently only `secret` is supported.",
                    "type": "string",
                    "enum": [
                      "secret"
                    ]
                  },
                  "username": {
                    "type": "string"
                  },
                  "secret": {
                    "description": "The password for the user. This field can be used instead of `otp`.",
                    "type": "string"
                  },
                  "otp": {
                    "description": "The One Time Password for a single login. This field can be used instead of `secret`",
                    "type": "string"
                  }
                }
              },
              "example": {
                "login_method": "secret",
                "username": "cool_user@bloodhoundenterprise.io",
                "secret": "MySup3rS3cr3tPassw0rd!!!"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "user_id": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "auth_expired": {
                          "type": "boolean"
                        },
                        "session_token": {
                          "type": "string",
                          "format": "jwt"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "data": {
                    "user_id": "54623566-213a-4490-9c68-ac44c39b6590",
                    "auth_expired": false,
                    "session_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNTQ2MjM1NjYtMjEzYS00NDkwLTljNjgtYWM0NGMzOWI2NTkwIiwidXNlciI6ImNvb2xfdXNlckBibG9vZGhvdW5kZW50ZXJwcmlzZS5pbyIsImlhdCI6MTUxNjIzOTAyMn0.1WWo7XpE9a-v6MQ9tHC8ikxmvmS3PuD7bJyNi4hPr_Y"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/logout": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "Logout",
        "summary": "Logout of BloodHound",
        "description": "Logout of BloodHound and delete the user session JWT.",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "**Success**\nThis response will contain no response body.\n",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "[this request has no response data]"
              }
            },
            "headers": {
              "Location": {
                "description": "This is the location you will be redirected to after logging out.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          }
        }
      }
    },
    "/api/v2/self": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetSelf",
        "summary": "Get self",
        "description": "Get the currently authenticated requester details. For Community, this will only ever be valid for users. In Enterprise, this could be either a BloodHound user or a client (collector).\n",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.response.authenticated-requester"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          }
        }
      }
    },
    "/api/v2/saml": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListSamlProviders",
        "summary": "List SAML Providers",
        "description": "**Deprecated**: This endpoint will no longer be supported in a future release. Please use `GET /api/v2/sso-providers` instead.\n",
        "deprecated": true,
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "saml_providers": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.saml-provider"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saml/sso": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetSamlSignSignOnEndpoints",
        "summary": "Get all SAML sign on endpoints",
        "description": "**Deprecated**: This endpoint will no longer be supported in a future release. Please use `GET /api/v2/sso-providers` instead to list available SSO endpoints.\n",
        "deprecated": true,
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "endpoints": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.saml-sign-on-endpoint"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saml/providers": {
      "post": {
        "operationId": "CreateSamlProvider",
        "summary": "Create a New SAML Provider from Metadata",
        "description": "**Deprecated**: This endpoint will no longer be supported in a future release. Please use `POST /api/v2/sso-providers/saml` instead.\n",
        "deprecated": true,
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the new SAML provider."
                  },
                  "metadata": {
                    "type": "string",
                    "format": "binary",
                    "description": "Metadata XML file."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.saml-provider"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saml/providers/{saml_provider_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "description": "SAML Provider ID",
          "name": "saml_provider_id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetSamlProvider",
        "summary": "Get SAML Provider",
        "description": "**Deprecated**: This endpoint will no longer be supported in a future release. Please use `GET /api/v2/sso-providers` to list all SAML providers instead.\n",
        "deprecated": true,
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.saml-provider"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteSamlProvider",
        "summary": "Delete a SAML Provider",
        "description": "**Deprecated**: This endpoint will no longer be supported in a future release. Please use `DELETE /api/v2/sso-providers/{sso_provider_id}` instead.\n",
        "deprecated": true,
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "affected_user": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.user"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict. The user is trying to delete their own SAML provider.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sso-providers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAuthProviders",
        "summary": "List SSO Providers",
        "description": "Lists all available SSO providers (SAML and OIDC)",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.auth-provider"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sso-providers/oidc": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "CreateOIDCProvider",
        "summary": "Create OIDC Provider",
        "description": "Creates a new OIDC provider for SSO authentication",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "issuer",
                  "client_id",
                  "config"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the OIDC provider"
                  },
                  "issuer": {
                    "type": "string",
                    "format": "url",
                    "description": "URL of the OIDC issuer"
                  },
                  "client_id": {
                    "type": "string",
                    "description": "Client ID for the OIDC provider"
                  },
                  "config": {
                    "type": "object",
                    "properties": {
                      "auto_provision": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "description": "boolean that, if enabled, allows SSO providers to auto provision bloodhound users on initial login"
                          },
                          "default_role_id": {
                            "type": "integer",
                            "format": "int32",
                            "description": "default role id for the user created from SSO provider auto provision"
                          },
                          "role_provision": {
                            "type": "boolean",
                            "description": "boolean that, if enabled, allows sso providers to manage roles for newly created users"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.oidc-provider"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sso-providers/saml": {
      "post": {
        "operationId": "CreateSSOSAMLProvider",
        "summary": "Create a New SAML Provider from Metadata",
        "description": "Creates a new SAML provider with the given name and metadata XML.",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "name",
                  "metadata",
                  "config.auto_provision.enabled",
                  "config.auto_provision.default_role_id",
                  "config.auto_provision.role_provision"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the new SAML provider."
                  },
                  "metadata": {
                    "type": "string",
                    "format": "binary",
                    "description": "Metadata XML file."
                  },
                  "config.auto_provision.enabled": {
                    "type": "string",
                    "example": "true",
                    "description": "boolean that, if enabled, allows SSO providers to auto provision bloodhound users on initial login"
                  },
                  "config.auto_provision.default_role_id": {
                    "type": "string",
                    "example": "3",
                    "description": "default role id for the user created from SSO provider auto provision"
                  },
                  "config.auto_provision.role_provision": {
                    "type": "string",
                    "example": "false",
                    "description": "boolean that, if enabled, allows sso providers to manage roles for newly created users"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.saml-provider"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sso-providers/{sso_provider_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "description": "SSO Provider ID",
          "name": "sso_provider_id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "patch": {
        "operationId": "PatchSSOProvider",
        "summary": "Update SSO Provider",
        "description": "Updates an existing SSO provider. Updating saml provider requires a \"multipart/form-data\" body. Updating oidc provider requires \"application/json\" body. Response is respective provider",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the new SAML provider."
                  },
                  "metadata": {
                    "type": "string",
                    "format": "binary",
                    "description": "Metadata XML file."
                  },
                  "config.auto_provision.enabled": {
                    "type": "string",
                    "example": "true",
                    "description": "boolean that, if enabled, allows SSO providers to auto provision bloodhound users on initial login"
                  },
                  "config.auto_provision.default_role_id": {
                    "type": "string",
                    "example": "3",
                    "description": "default role id for the user created from SSO provider auto provision"
                  },
                  "config.auto_provision.role_provision": {
                    "type": "string",
                    "example": "false",
                    "description": "boolean that, if enabled, allows sso providers to manage roles for newly created users"
                  }
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the OIDC provider"
                  },
                  "issuer": {
                    "type": "string",
                    "format": "url",
                    "description": "URL of the OIDC issuer"
                  },
                  "client_id": {
                    "type": "string",
                    "description": "Client ID for the OIDC provider"
                  },
                  "config": {
                    "type": "object",
                    "properties": {
                      "auto_provision": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "description": "boolean that, if enabled, allows SSO providers to auto provision bloodhound users on initial login"
                          },
                          "default_role_id": {
                            "type": "integer",
                            "format": "int32",
                            "description": "default role id for the user created from SSO provider auto provision"
                          },
                          "role_provision": {
                            "type": "boolean",
                            "description": "boolean that, if enabled, allows sso providers to manage roles for newly created users"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/model.saml-provider"
                        }
                      }
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/model.oidc-provider"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteSSOProvider",
        "summary": "Delete SSO Provider",
        "description": "Deletes an existing SSO provider",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "affected_users": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.user"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict. The user is trying to delete their own SSO provider.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sso-providers/{sso_provider_id}/signing-certificate": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "description": "SSO Provider ID for a SAML provider",
          "name": "sso_provider_id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetSSOProviderSAMLSigningCertificate",
        "summary": "Get SAML Provider Signing Certificate",
        "description": "Download the SAML Provider Signing Certificate. Only applies to SAML providers.",
        "tags": [
          "Auth",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "content-disposition": {
                "schema": {
                  "type": "string"
                },
                "description": "Suggested filename of structure \"{saml-slug}-signing-certificate.pem\""
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/permissions": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListPermissions",
        "summary": "List Permissions",
        "description": "List all authorization permissions.",
        "tags": [
          "Permissions",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `authority`, `name`, `id`, `created_at`, `updated_at`.",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "authority",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "permissions": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.permission"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/permissions/{permission_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "permission_id",
          "description": "ID of the permission record to retrieve details for.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetPermission",
        "summary": "Get Permission",
        "description": "Gets an authorization permission's details.",
        "tags": [
          "Permissions",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.permission"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/roles": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListRoles",
        "summary": "List Roles",
        "description": "List all authorization roles.",
        "tags": [
          "Roles",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `name`, `description`, `id`, `created_at`, `updated_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "roles": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.role"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/roles/{role_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "role_id",
          "description": "ID of the role record to retrieve info for.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetRole",
        "summary": "Get Role",
        "description": "Gets an authorization role's details.",
        "tags": [
          "Roles",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.role"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tokens": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAuthTokens",
        "summary": "List Auth Tokens",
        "description": "Get all auth tokens.",
        "tags": [
          "API Tokens",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "user_id",
            "description": "Provide a `user_id` to filter tokens by. Admin users may filter by any `user_id`. Non-admin users may only filter by their own `user_id` using `eq`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are `user_id`, `client_id`, `name`, `last_access`, `created_at`, `updated_at`, `deleted_at`.\n",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "key",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "hmac_method",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "last_access",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "tokens": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.auth-token"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateAuthToken",
        "summary": "Create Token for User",
        "description": "Create a new token to use with request signing based authentication for a given user.",
        "tags": [
          "API Tokens",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating an auth token",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "token_name": {
                    "type": "string"
                  },
                  "user_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.auth-token"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tokens/{token_id}": {
      "parameters": [
        {
          "name": "token_id",
          "description": "ID of auth token to delete.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "delete": {
        "operationId": "DeleteAuthToken",
        "summary": "Delete a User Token",
        "description": "Delete a request signing token for a given user.",
        "tags": [
          "API Tokens",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/bloodhound-users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListUsers",
        "summary": "List Users",
        "description": "Gets all BloodHound user details.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are first_name, last_name, email_address, principal_name, last_login, created_at, updated_at.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "first_name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "last_name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "email_address",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "principal_name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          },
          {
            "name": "last_login",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "users": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.user"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateUser",
        "summary": "Create a New User",
        "description": "Create a new BloodHound user.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating a user",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/api.requests.user.update"
                  },
                  {
                    "$ref": "#/components/schemas/api.requests.user.set-secret"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.user"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/bloodhound-users-minimal": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListUsersMinimal",
        "summary": "List Users Minimal",
        "description": "Returns all BloodHound user details without any sensitive data.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are id, first_name, last_name and email_address.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "first_name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "last_name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "email_address",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "users": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.users-minimal"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/bloodhound-users/{user_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "user_id",
          "description": "User ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "GetUser",
        "summary": "Get a user",
        "description": "Get a BloodHound user's details.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.user"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "patch": {
        "operationId": "UpdateUser",
        "summary": "Update a User",
        "description": "Update a BloodHound user's properties'.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating a user",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/api.requests.user.update"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteUser",
        "summary": "Delete a User",
        "description": "Deletes an existing BloodHound user.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          },
          "default": {
            "$ref": "#/components/responses/error-response"
          }
        }
      }
    },
    "/api/v2/bloodhound-users/{user_id}/secret": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "user_id",
          "description": "User ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "operationId": "CreateOrSetUserSecret",
        "summary": "Create or Set User Secret",
        "description": "Create or set a user's secret to use as a login password.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating or setting a user secret",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/api.requests.user.set-secret"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteUserSecret",
        "summary": "Expire User Secret",
        "description": "Expire a user's secret to use as a login password.",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/bloodhound-users/{user_id}/mfa": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "user_id",
          "description": "User ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "AddUserMfa",
        "summary": "Enrolls user in multi-factor authentication",
        "description": "Enrolls user in multi-factor authentication",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for enrolling a user in multi-factor authentication",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "secret": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "qr_code": {
                          "type": "string"
                        },
                        "totp_secret": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "RemoveUserMfa",
        "summary": "Unenroll user from multi-factor authentication",
        "description": "Unenrolls user from multi-factor authentication",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for unenrolling a user from multi-factor authentication",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "secret": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "$ref": "#/components/schemas/enum.mfa-activation-status"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/bloodhound-users/{user_id}/mfa-activation": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "user_id",
          "description": "User ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "GetMfaActivationStatus",
        "summary": "Returns MFA activation status for a user",
        "description": "Returns multi-factor authentication status for a user",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "$ref": "#/components/schemas/enum.mfa-activation-status"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "ActivateUserMfa",
        "summary": "Activates MFA for an enrolled user",
        "description": "Activates multi-factor authentication for an enrolled user",
        "tags": [
          "BloodHound Users",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for activating multi-factor authentication for an enrolled user",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "otp": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "$ref": "#/components/schemas/enum.mfa-activation-status"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/collectors/{collector_type}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "collector_type",
          "description": "Collector type",
          "in": "path",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/enum.client-type"
          }
        }
      ],
      "get": {
        "operationId": "GetCollectorManifest",
        "summary": "Get collector manifest",
        "description": "Retrieves the version manifest for a given collector",
        "tags": [
          "Collectors",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.collector-manifest"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/collectors/{collector_type}/{release_tag}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "collector_type",
          "description": "Collector type",
          "in": "path",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/enum.client-type"
          }
        },
        {
          "name": "release_tag",
          "description": "Release tag (semver or \"latest\")",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "DownloadCollector",
        "summary": "Get collector download by version",
        "description": "Retrieves the download for a given collector with given version",
        "tags": [
          "Collectors",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/binary-response"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/collectors/{collector_type}/{release_tag}/checksum": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "collector_type",
          "description": "Collector type",
          "in": "path",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/enum.client-type"
          }
        },
        {
          "name": "release_tag",
          "description": "Release tag (semver or \"latest\")",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "GetCollectorChecksum",
        "summary": "Get collector checksum by version",
        "description": "Retrieves the checksum file for a given collector with given version",
        "tags": [
          "Collectors",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/binary-response"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/kennel/manifest": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetKennelManifest",
        "summary": "Get kennel manifest",
        "description": "Retrieves a manifest of community collectors",
        "tags": [
          "Collectors",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.kennel-manifest"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/kennel/enterprise-manifest": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetKennelEnterpriseManifest",
        "summary": "Get kennel enterprise manifest",
        "description": "Retrieves a manifest of enterprise collectors",
        "tags": [
          "Collectors",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.kennel-enterprise-manifest"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/kennel/download/{asset_name}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_name",
          "description": "Asset name",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "GetKennelAsset",
        "summary": "Download asset",
        "description": "Downloads an enterprise asset (collector or checksum)",
        "tags": [
          "Collectors",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/binary-response"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/file-upload": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListFileUploadJobs",
        "summary": "List File Upload Jobs",
        "description": "Lists available file upload jobs",
        "tags": [
          "Collection Uploads",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `user_email_address`, `status`, `status_message`, `start_time`, `end_time`, `last_ingest`, `id`, `created_at`, `updated_at`, and `deleted_at`.\n",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "user_email_address",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "status_message",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "start_time",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "end_time",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "last_ingest",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.file-upload-job"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/file-upload/start": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "CreateFileUploadJob",
        "summary": "Create File Upload Job",
        "description": "Creates a file upload job for sending collection files",
        "tags": [
          "Collection Uploads",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.file-upload-job"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/file-upload/{file_upload_job_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "Content-Type",
          "description": "Content type header, used to specify the type of content being sent by the client.",
          "in": "header",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "application/json",
              "application/zip",
              "application/zip-compressed",
              "application/x-zip-compressed"
            ]
          }
        },
        {
          "name": "X-File-Upload-Name",
          "description": "File upload name header, used to specify the name of the file being uploaded to improve error reporting.",
          "in": "header",
          "required": false,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "file_upload_job_id",
          "description": "The ID for the file upload job.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "post": {
        "operationId": "UploadFileToJob",
        "summary": "Upload File To Job",
        "description": "Saves a collection file to a file upload job",
        "tags": [
          "Collection Uploads",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The body of the file upload request.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "202": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/file-upload/{file_upload_job_id}/completed-tasks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "file_upload_job_id",
          "description": "The ID for the file upload job.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "get": {
        "operationId": "GetCompletedTasks",
        "summary": "Get Completed Tasks",
        "description": "Get information about the individual completed file upload tasks associated with a job",
        "tags": [
          "Collection Uploads",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.file-upload-job.completed-tasks"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/file-upload/{file_upload_job_id}/end": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "file_upload_job_id",
          "description": "The ID for the file upload job.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "post": {
        "operationId": "EndFileUploadJob",
        "summary": "End File Upload Job",
        "description": "End a file upload job",
        "tags": [
          "Collection Uploads",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/file-upload/accepted-types": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAcceptedFileUploadTypes",
        "summary": "List accepted file upload types",
        "description": "List accepted file types for collection file uploads",
        "tags": [
          "Collection Uploads",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          }
        }
      }
    },
    "/api/v2/custom-nodes": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetCustomNodes",
        "summary": "Get custom nodes",
        "description": "Retrieve a list of all custom node configurations.\nThis endpoint returns the current set of registered node kinds and their display settings.\n",
        "tags": [
          "Custom Node Management",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.custom-node"
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "kindName": "KindA",
                      "config": {
                        "icon": {
                          "type": "font-awesome",
                          "name": "house",
                          "color": "#FFFFFF"
                        }
                      }
                    },
                    {
                      "id": 2,
                      "kindName": "KindB",
                      "config": {
                        "icon": {
                          "type": "font-awesome",
                          "name": "coffee",
                          "color": "#000000"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateCustomNodes",
        "summary": "Create custom nodes",
        "description": "This endpoint registers new node kinds along with optional display metadata such as icons and colors.\nThe provided configuration controls how nodes of the specified kinds are interpreted and rendered in the UI.\nOnly free, solid-style Font Awesome icons are supported. Hex color codes must follow the format #RGB or #RRGGBB.\nIf no valid icon or color is provided, the system will fall back to a question mark icon and a white background color.\nBatch input is supported; you may submit multiple configuration objects in a single request.\n",
        "tags": [
          "Custom Node Management",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "custom_types": {
                    "type": "object",
                    "additionalProperties": {
                      "$ref": "#/components/schemas/model.custom-node.config"
                    }
                  }
                }
              },
              "example": {
                "custom_types": {
                  "KindA": {
                    "icon": {
                      "type": "font-awesome",
                      "name": "house",
                      "color": "#FFFFFF"
                    }
                  },
                  "KindB": {
                    "icon": {
                      "type": "font-awesome",
                      "name": "coffee",
                      "color": "#000000"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "CREATED",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.custom-node"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "409": {
            "description": "**Conflict**\nDuplicate Kind Name\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2024-02-19T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "customnodes",
                      "message": "Conflict: duplicate kind name"
                    }
                  ]
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/custom-nodes/{kind_name}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "kind_name",
          "description": "Kind Name",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "GetCustomNode",
        "summary": "Get custom node",
        "description": "Retrieve the configuration for a specific custom node kind.\nReturns the display settings and metadata for the requested node kind.\n",
        "tags": [
          "Custom Node Management",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/model.custom-node"
                },
                "example": {
                  "id": 1,
                  "kindName": "KindA",
                  "config": {
                    "icon": {
                      "type": "font-awesome",
                      "name": "house",
                      "color": "#FFFFFF"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "UpdateCustomNode",
        "summary": "Update custom node",
        "description": "This endpoint updates an existing node kind along with optional display metadata such as icons and colors.\nThe provided configuration controls how nodes of the specified kinds are interpreted and rendered in the UI.\nOnly free, solid-style Font Awesome icons are supported. Hex color codes must follow the format #RGB or #RRGGBB.\nIf no valid icon or color is provided, the system will fall back to a question mark icon and a white background color.\n",
        "tags": [
          "Custom Node Management",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "config": {
                    "$ref": "#/components/schemas/model.custom-node.config"
                  }
                }
              },
              "example": {
                "config": {
                  "icon": {
                    "type": "font-awesome",
                    "name": "house",
                    "color": "#333"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/model.custom-node"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "**Conflict**\nKind name is owned by a schema extension\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2024-02-19T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "customnodes",
                      "message": "Conflict: kind name is owned by a schema extension"
                    }
                  ]
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteCustomNode",
        "deprecated": true,
        "summary": "Delete custom node (Deprecated)",
        "description": "**Deprecated**: This endpoint is no longer supported and will return 410 Gone.\n",
        "tags": [
          "Custom Node Management",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "410": {
            "description": "Gone - This endpoint has been deprecated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                }
              }
            }
          }
        }
      }
    },
    "/api/version": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetApiVersion",
        "summary": "Get API version",
        "description": "Returns the supported API versions.",
        "tags": [
          "API Info",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "API": {
                          "type": "object",
                          "properties": {
                            "current_version": {
                              "type": "string"
                            },
                            "deprecated_version": {
                              "type": "string"
                            }
                          }
                        },
                        "server_version": {
                          "type": "string"
                        },
                        "product_edition": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/spec": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetApiSpec",
        "summary": "Get API Spec",
        "description": "Returns an Open API 3.0 compatible BloodHound API spec",
        "tags": [
          "API Info",
          "Community",
          "Enterprise"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/x-yaml": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "openapi: 3.0.3\nservers:\n  - url: /\n...[truncated example]\n"
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/search": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "Search",
        "summary": "Search for objects",
        "description": "Search for graph objects by name or object ID, filtered by type.",
        "tags": [
          "Search",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "q",
            "description": "Search parameter for the name or object ID of a node.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "description": "Node type. Currently only supports built-in types.\nSome AD examples: `Base`, `User`, `Computer`, `Group`, `Container`.\nSome Azure examples: `AZBase`, `AZApp`, `AZDevice`.\n",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.search-result"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/available-domains": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetAvailableDomains",
        "summary": "Get available domains",
        "description": "Gets available domains along with their collection status",
        "tags": [
          "Search",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are objectid, name.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "objectid",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "collected",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.domain-selector"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/audit": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAuditLogs",
        "summary": "List audit logs",
        "description": "Returns a list of audit logs.",
        "tags": [
          "Audit",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are `id`, `actor_id`, `actor_name`, `actor_email`, `action`, `request_id`, `created_at`, `source`, and `status`.\n",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "before",
            "description": "Return logs created before the specified time. Value should be in the RFC-3339 format. If not supplied, this will default to the current time.",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "after",
            "description": "Return logs created after the specified time. Value should be in the RFC-3339 format. If not supplied, this will default to 1 year before the current time. Must not be later than `before`.",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "actor_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "actor_name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "actor_email",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "action",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "request_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "source",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "status",
            "description": "Filter results by column value. Valid filter predicates are `eq`, `neq`. Valid values are `success` and `failure`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "logs": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.audit-log"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/config": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAppConfigParams",
        "summary": "List application config parameters",
        "description": "Lists application configuration parameters for this instance",
        "tags": [
          "Config",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "parameter",
            "description": "Parameter filter. Must follow the convention: parameter=eq:value\n",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.app-config-param"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "SetAppConfigParam",
        "summary": "Write application configuration parameters",
        "description": "Writes application configuration parameters for this instance",
        "tags": [
          "Config",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating an application config parameter",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.app-config-param"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "key": {
                          "type": "string"
                        },
                        "value": {
                          "type": "object"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/features": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListFeatureFlags",
        "summary": "List feature flags",
        "description": "Lists all feature flags for this instance",
        "tags": [
          "Config",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.feature-flag"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/features/{feature_id}/toggle": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "feature_id",
          "description": "Feature ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "put": {
        "operationId": "ToggleFeatureFlag",
        "summary": "Toggle a feature flag's enabled status to either enable or disable it.",
        "description": "Writes application configuration parameters for this instance",
        "tags": [
          "Config",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "enabled": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAssetGroups",
        "summary": "List all asset isolation groups",
        "description": "Lists all asset isolation groups.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `name`, `tag`, and `member_count`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "system_group",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "member_count",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "asset_groups": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateAssetGroup",
        "summary": "Create an asset group",
        "description": "Creates an asset group",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating an asset group",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.asset-group"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.asset-group"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "ID of the asset group record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroup",
        "summary": "Get asset group by ID",
        "description": "Retrieve asset group by ID",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.asset-group"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "UpdateAssetGroup",
        "summary": "Update an asset group",
        "description": "Updates an asset group",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating an asset group.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.asset-group"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteAssetGroup",
        "summary": "Delete an asset group",
        "description": "Deletes an asset group",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "**Conflict**\nThe client tried to delete a system defined asset group.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2024-02-19T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "agi",
                      "message": "Cannot delete a system defined asset group."
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}/collections": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "ID of the asset_group record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "ListAssetGroupCollections",
        "summary": "List asset group collections",
        "description": "Returns all historical memberships if no URL params are specified.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.asset-group-collection"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}/selectors": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "ID of the asset_group record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "post": {
        "operationId": "UpdateAssetGroupSelectorsDeprecated",
        "deprecated": true,
        "summary": "Update asset group selectors",
        "description": "DEPRECATED use PUT instead. Updates asset group selectors.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating asset group selectors",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.asset-group-selector-spec"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "added_selectors": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group-selector"
                          }
                        },
                        "removed_selectors": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group-selector"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "UpdateAssetGroupSelectors",
        "summary": "Update asset group selectors",
        "description": "Updates asset group selectors",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating asset group selectors",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.asset-group-selector-spec"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "added_selectors": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group-selector"
                          }
                        },
                        "removed_selectors": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group-selector"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}/selectors/{asset_group_selector_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "ID of the asset_group record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        },
        {
          "name": "asset_group_selector_id",
          "description": "ID of the asset_group_selector record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "delete": {
        "operationId": "DeleteAssetGroupSelector",
        "summary": "Delete an asset group selector",
        "description": "Deletes an asset group selector",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "**Conflict**\nSystem defined asset group selectors cannot be deleted.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2024-02-19T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "agi",
                      "message": "Cannot delete system defined asset group selector."
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}/custom-selectors": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "ID of the asset_group record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroupCustomMemberCount",
        "summary": "Get asset group custom member count",
        "description": "Get asset group custom member count",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "custom_member_count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}/members": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "ID of the asset_group record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "ListAssetGroupMembers",
        "deprecated": true,
        "summary": "List all asset isolation group members",
        "description": "**Deprecated**: This endpoint will no longer be supported in a future release. Please use `GET /api/v2/asset-group-tags/{asset_group_tag_id}/members` or `GET /api/v2/asset-group-tags/{asset_group_tag_id}/selectors/{asset_group_tag_selector_id}/members` instead.\n",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `object_id`, `asset_group_id`, `primary_kind`, `environment_id`, `environment_kind`, and `name`.\n",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "object_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "primary_kind",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "environment_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "environment_kind",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "custom_member",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "members": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/model.asset-group-member"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}/members/counts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "ID of the asset_group record to retrieve",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "ListAssetGroupMemberCountByKind",
        "summary": "List asset group member count by kind",
        "description": "List counts of members of an asset isolation group by primary kind.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "object_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "environment_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "primary_kind",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "environment_kind",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "custom_member",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "total_count": {
                          "type": "integer"
                        },
                        "counts": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}/members/{asset_group_member_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of the asset_group_tag of a selector",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        },
        {
          "name": "asset_group_member_id",
          "description": "ID of member to list selectors",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroupSelectorsByMemberId",
        "summary": "Get asset group tag selectors of a specific object by member id",
        "description": "Get a list of selectors for an object by member id.",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "member": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/model.asset-group-tags-member"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "selectors": {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/components/schemas/model.asset-group-tags-selector-response"
                                  }
                                }
                              }
                            }
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetAssetGroupTags",
        "summary": "Get Asset Group Tags",
        "description": "Get a list of asset groups",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer-strict"
            }
          },
          {
            "name": "counts",
            "description": "Whether to include counts of selectors and members for each tag",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "description",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "created_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "created_by",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string-strict"
            }
          },
          {
            "name": "updated_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "updated_by",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string-strict"
            }
          },
          {
            "name": "deleted_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "deleted_by",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string-strict"
            }
          },
          {
            "name": "require_certify",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "$ref": "#/components/schemas/model.asset-group-tag"
                              },
                              {
                                "allOf": [
                                  {
                                    "$ref": "#/components/schemas/model.asset-group-tag"
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "counts": {
                                        "type": "object",
                                        "properties": {
                                          "members": {
                                            "type": "integer",
                                            "format": "int64"
                                          },
                                          "selectors": {
                                            "type": "integer"
                                          },
                                          "custom_selectors": {
                                            "type": "integer"
                                          },
                                          "default_selectors": {
                                            "type": "integer"
                                          },
                                          "disabled_selectors": {
                                            "type": "integer"
                                          }
                                        }
                                      }
                                    }
                                  }
                                ]
                              }
                            ]
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateAssetGroupTag",
        "summary": "Create Asset Group Tag",
        "description": "Creates an asset group tag ie. a tier or label",
        "tags": [
          "Asset Isolation",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating an asset group tag. Name and type fields are required.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/model.asset-group-tag-request"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "type"
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.asset-group-tag"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of an asset group tag",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroupTag",
        "summary": "Get Asset Group Tag",
        "description": "Retrieves an asset group tag by ID",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "tag": {
                          "$ref": "#/components/schemas/model.asset-group-tag"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "patch": {
        "operationId": "UpdateAssetGroupTag",
        "summary": "Update Asset Group Tag",
        "description": "Updates an asset group tag by ID",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "requestBody": {
          "description": "The request body for updating an asset group tag. At least one field is required.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.asset-group-tag-update"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.asset-group-tag"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteAssetGroupTag",
        "summary": "Delete an Asset Group Tag",
        "description": "Deletes an asset group tag",
        "tags": [
          "Asset Isolation",
          "Enterprise"
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}/members": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of an asset group tag",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "ListAssetGroupTagMembersById",
        "summary": "List asset group tag members by ID",
        "description": "List members of an asset group tag by ID",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "$ref": "#/components/parameters/query.environments"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `id`, `objectid`, and `name`.\n",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "primary_kind",
            "in": "query",
            "description": "Filter by primary_kind",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "Filter by name",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "object_id",
            "in": "query",
            "description": "Filter by object_id",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "members": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/model.asset-group-tags-member"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}/members/counts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of an asset group tag",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "ListAssetGroupTagMemberCountByKind",
        "summary": "List asset group tag member count by kind",
        "description": "List counts of members of an asset group tag by primary kind.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.environments"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "total_count": {
                          "type": "integer"
                        },
                        "counts": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}/selectors/{asset_group_tag_selector_id}/members": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of an asset group tag",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        },
        {
          "name": "asset_group_tag_selector_id",
          "description": "ID of an asset group tag selector",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "ListAssetGroupTagMembersBySelector",
        "summary": "List asset group tag members by selector",
        "description": "List members of an asset group tag by selector",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "$ref": "#/components/parameters/query.environments"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `id`, `objectid`, and `name`.\n",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/api.params.query.sort-by"
                },
                {
                  "enum": [
                    "id",
                    "objectid",
                    "name"
                  ]
                }
              ]
            }
          },
          {
            "name": "primary_kind",
            "in": "query",
            "description": "Filter by primary_kind",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "Filter by name",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "object_id",
            "in": "query",
            "description": "Filter by object_id",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "members": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/model.asset-group-tags-member"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict. Selector is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}/selectors/{asset_group_tag_selector_id}/members/counts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of an asset group tag",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        },
        {
          "name": "asset_group_tag_selector_id",
          "description": "ID of an asset group tag selector",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroupSelectorMemberCountsByKind",
        "summary": "List asset group tag selector member count by kind",
        "description": "List counts of members of an asset group tag selector by primary kind.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.environments"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "total_count": {
                          "type": "integer"
                        },
                        "counts": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict. Selector is disabled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}/selectors": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of the asset_group_tag to create a selector",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroupTagSelectors",
        "summary": "Get Asset Group Tag selectors",
        "description": "Get a list of selectors for this group.",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "$ref": "#/components/parameters/query.environments"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `id`, `name`, and `created_at`.\n",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "auto_certify",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          },
          {
            "name": "created_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "created_by",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "description",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "disabled_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "disabled_by",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "is_default",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "updated_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "updated_by",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "type",
            "description": "Filter results by column integer value. Valid filter predicates are `eq`, `neq`. Valid values are either ObjectID = 1 or Cypher = 2.",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "enum": [
                1,
                2
              ]
            }
          },
          {
            "name": "counts",
            "description": "Whether to include counts of members for each selector",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "selectors": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/model.asset-group-tags-selector-response"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "counts": {
                                    "type": "object",
                                    "properties": {
                                      "members": {
                                        "type": "integer"
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateAssetGroupTagSelector",
        "summary": "Create Asset Group Tag Selector",
        "description": "Creates an asset group tag selector.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating an asset group tag selector. Only the name and seeds fields are required.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.asset-group-tags-selector-create-request"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.asset-group-tags-selector-response"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/{asset_group_tag_id}/selectors/{asset_group_tag_selector_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_tag_id",
          "description": "ID of the asset_group_tag to update a selector on",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        },
        {
          "name": "asset_group_tag_selector_id",
          "description": "Selector ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroupTagSelector",
        "summary": "Get Asset Group Tag Selector",
        "description": "Retrieves an asset group tag selector by ID",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "selector": {
                          "$ref": "#/components/schemas/model.asset-group-tags-selector-response"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "patch": {
        "operationId": "UpdateAssetGroupTagSelector",
        "summary": "Update Asset Group Tag Selector",
        "description": "Update an asset group tag selector's properties",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating an asset group tag selector. At least one field must be provided in the request body. Any combination of fields from the original schema can be included, and only the fields that are provided will be updated.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.asset-group-tags-selector-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.asset-group-tags-selector-response"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteAssetGroupTagSelector",
        "summary": "Delete Asset Group Tag Selector",
        "description": "Delete an asset group tag selector",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted. No content is returned."
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/preview-selectors": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "PreviewSelectors",
        "summary": "Preview Selectors",
        "description": "Sample preview of members selected by provided selector seeds.",
        "tags": [
          "Asset Isolation",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body of seeds for previewing what a selector will select.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "seeds": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/model.asset-group-tags-selector-seed"
                    }
                  },
                  "expansion": {
                    "description": "Determine which expansion approach to use for member seeds. 0 - No expansion, 1 - Expand all, 2 - Expand containing members, 3 - Expand containing members and members containing the seed. Default fallback will be 1 - Expand all",
                    "type": "integer",
                    "enum": [
                      0,
                      1,
                      2,
                      3
                    ]
                  }
                },
                "required": [
                  "seeds"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "member": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "integer"
                            },
                            "object_id": {
                              "type": "string"
                            },
                            "primary_kind": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "properties": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "source": {
                              "description": "Describes which phase of tagging resulted in this member being tagged, 1 - direct object, 2 - expanded downward, 3 - expanded upward",
                              "type": "integer",
                              "enum": [
                                1,
                                2,
                                3
                              ]
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/search": {
      "post": {
        "operationId": "AssetGroupTagSearch",
        "summary": "Search Asset Group Tags",
        "description": "Supports searching by name on asset group tags and selectors, and by name or object ID on members.",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "requestBody": {
          "description": "The request body for searching asset group tags. `query` represents being able to query by either name or object id. `tag_type` can be either 1(zone), 2(label), or 3(owned). And `asset_group_tag_id` is the ID of a tag (zone or label).",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "tag_type": {
                    "type": "integer"
                  },
                  "asset_group_tag_id": {
                    "type": "integer"
                  }
                },
                "required": [
                  "query",
                  "tag_type"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group-tag"
                          }
                        },
                        "selectors": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group-tags-selector-response"
                          }
                        },
                        "members": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.asset-group-tags-member"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags-history": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetAssetGroupTagHistory",
        "summary": "Get history records",
        "description": "Retrieves history records for actions on asset group tags",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `created_at`.",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "created_at",
            "in": "query",
            "description": "For example, you can filter a date range of records by doing `created_at=gt:2025-07-08T17:00:00Z&created_at=lt:2025-07-30T17:00:00Z`",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "actor",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "target",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "asset_group_tag_id",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "environment_id",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "note",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/model.asset-group-tags-history"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "SearchAssetGroupTagHistory",
        "summary": "Search history records",
        "description": "Retrieves history records via search string input and filtering by action, asset_group_tag_id, email, and actor",
        "tags": [
          "Asset Isolation",
          "Enterprise",
          "Community"
        ],
        "requestBody": {
          "description": "The request body for searching asset group tag history records",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "minLength": 3,
                    "example": "UpdateTag"
                  }
                },
                "required": [
                  "query"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `created_at`.",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/api.params.query.sort-by"
                },
                {
                  "enum": [
                    "created_at"
                  ]
                }
              ]
            }
          },
          {
            "name": "actor",
            "in": "query",
            "description": "Filter by actor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "Filter by email",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Filter by action",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "asset_group_tag_id",
            "in": "query",
            "description": "Filter by asset_group_tag_id",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/model.asset-group-tags-history"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-group-tags/certifications": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "CertifyOrRevokeObjects",
        "summary": "Certify or Revoke Certification of Objects",
        "description": "Manually certify/revoke certification of objects as belonging to the Zone they're selected by",
        "tags": [
          "Asset Isolation",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for certifying or revoking certification of objects.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "member_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "minItems": 1,
                    "uniqueItems": true
                  },
                  "action": {
                    "type": "integer",
                    "enum": [
                      1,
                      2
                    ]
                  },
                  "note": {
                    "type": "string"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "member_ids",
                  "action"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "get": {
        "operationId": "GetAssetGroupTagsCertifications",
        "summary": "Get certifications for privilege zones",
        "description": "Retrieves certification status for nodes selected by a zone",
        "tags": [
          "Asset Isolation",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "asset_group_tag_id",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "certified",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "certified_by",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "created_at",
            "in": "query",
            "description": "For example, you can filter a date range of records by doing `created_at=gt:2025-07-08T17:00:00Z&created_at=lt:2025-07-30T17:00:00Z` (UTC)",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "environments",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "object_id",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "primary_kind",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/model.asset-group-tags-certification-response"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/graphs/kinds": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetKinds",
        "summary": "Get kinds",
        "description": "Gets kinds",
        "tags": [
          "Graph",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Filter by type, valid types are node or edge, e.g. \"eq:node\"",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string-strict"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "kinds": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/pathfinding": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "Pathfinding",
        "deprecated": true,
        "summary": "Get pathfinding result",
        "description": "DEPRECATED use GetShortestPath instead. Get the result of pathfinding between two nodes in graph format.",
        "tags": [
          "Graph",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "start_node",
            "description": "Start Node",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "end_node",
            "description": "End Node",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.bh-graph.graph"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/graph-search": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetSearchResult",
        "summary": "Get search result",
        "description": "Get the result of searching a graph for a node by name",
        "tags": [
          "Graph",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "query",
            "description": "Search query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "description": "The type of search strategy to use. Default is `fuzzy`.",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "fuzzy",
                "exact"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/model.bh-graph.node"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/relationships/{relationship_id}": {
      "parameters": [
        {
          "name": "relationship_id",
          "in": "path",
          "required": true,
          "description": "The relationship id assigned by the graph",
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        },
        {
          "name": "include-info",
          "in": "query",
          "required": false,
          "description": "When false or omitted, excludes entity panel information.\nWhen true, returns relationship details with entity panel information included.\n",
          "schema": {
            "type": "boolean"
          }
        }
      ],
      "get": {
        "operationId": "GetRelationshipByID",
        "summary": "Get Relationship by Graph Relationship ID",
        "description": "**Experimental** - Returns the details of a graph relationship identified by its graph-assigned integer ID",
        "tags": [
          "OpenGraph (Experimental)",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "anyOf": [
                        {
                          "$ref": "#/components/schemas/model.relationship-details"
                        },
                        {
                          "$ref": "#/components/schemas/model.relationship-details-with-info"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/nodes/{node_id}": {
      "parameters": [
        {
          "name": "node_id",
          "in": "path",
          "required": true,
          "description": "The node id assigned by the graph",
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "get": {
        "operationId": "GetNodeByID",
        "summary": "Get Node by Graph Node ID",
        "description": "**Experimental** - Returns the details of a graph node identified by its graph-assigned integer ID",
        "tags": [
          "OpenGraph (Experimental)",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "include-info",
            "in": "query",
            "required": false,
            "description": "When true, populates `data.info` with kindinfo objects for the node's registered kinds.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK\n\nWhen `include-info=true`, the `info` field is populated with kindinfo objects.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/model.node-details"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "info": {
                              "type": "array",
                              "description": "Kindinfo objects populated when `include-info=true`.",
                              "items": {
                                "type": "object",
                                "required": [
                                  "name",
                                  "title",
                                  "position",
                                  "node_kind_id",
                                  "markdown"
                                ],
                                "properties": {
                                  "name": {
                                    "type": "string",
                                    "description": "Kindinfo key."
                                  },
                                  "title": {
                                    "type": "string",
                                    "description": "Human-readable kindinfo title."
                                  },
                                  "position": {
                                    "type": "integer",
                                    "format": "int32",
                                    "description": "Display position for the kindinfo object."
                                  },
                                  "node_kind_id": {
                                    "type": "integer",
                                    "format": "int32",
                                    "description": "Schema node kind ID associated with the kindinfo object."
                                  },
                                  "markdown": {
                                    "type": "object",
                                    "required": [
                                      "content"
                                    ],
                                    "properties": {
                                      "content": {
                                        "type": "string",
                                        "description": "Rendered markdown content, or the original unexecuted template string when rendering fails."
                                      },
                                      "template_error": {
                                        "type": "string",
                                        "description": "Template parsing or execution error, when the markdown template could not be rendered for the requested node."
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    }
                  }
                },
                "examples": {
                  "Info omitted": {
                    "summary": "Node details when include-info is not present",
                    "value": {
                      "data": {
                        "node_id": 1234567890,
                        "kinds": [
                          {
                            "node_kind_id": 1,
                            "name": "User"
                          },
                          {
                            "node_kind_id": 2,
                            "name": "Entity"
                          }
                        ],
                        "properties": {
                          "objectid": "S-1-5-21-3130019616-2776909439-2417379446-1108",
                          "name": "ADMIN@CORP.EXAMPLE.COM",
                          "displayName": "Admin",
                          "lastSeen": "2026-07-14T18:24:32Z"
                        }
                      }
                    }
                  },
                  "Info included": {
                    "summary": "Node details when include-info is true",
                    "value": {
                      "data": {
                        "node_id": 1234567890,
                        "kinds": [
                          {
                            "node_kind_id": 1,
                            "name": "User"
                          },
                          {
                            "node_kind_id": 2,
                            "name": "Entity"
                          }
                        ],
                        "properties": {
                          "objectid": "S-1-5-21-3130019616-2776909439-2417379446-1108",
                          "name": "ADMIN@CORP.EXAMPLE.COM",
                          "displayName": "Admin",
                          "lastSeen": "2026-07-14T18:24:32Z"
                        },
                        "info": [
                          {
                            "name": "overview",
                            "title": "Overview",
                            "position": 0,
                            "node_kind_id": 1,
                            "markdown": {
                              "content": "This user has privileged access in the environment."
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/graphs/shortest-path": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetShortestPath",
        "summary": "Get the shortest path graph",
        "description": "A graph of the shortest path from `start_node` to `end_node`.",
        "tags": [
          "Graph",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "start_node",
            "description": "The start node objectId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "end_node",
            "description": "The end node objectId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "relationship_kinds",
            "description": "Specific relationship kinds to include in the pathfinding search. If the kinds are not valid kinds, the query will error.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.contains"
            }
          },
          {
            "name": "only_traversable",
            "description": "Whether or not to only include traversable kinds. If true and no `relationship_kinds` are specified, all traversable kinds will be searched. If true, and `relationship_kinds` param includes non-traversable kinds, the non-traversable kinds will be excluded from the path search. If false or omitted, all kinds will be searched.",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A graph of the shortest path from `start_node` to `end_node`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.unified-graph.graph"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/graphs/edge-composition": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetPathComposition",
        "summary": "Get path composition",
        "description": "Returns a graph representing the various nodes and edges that make up the complex post-processed edge.",
        "tags": [
          "Graph",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "source_node",
            "description": "The ID of the starting node.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "target_node",
            "description": "The ID of the ending node.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "edge_type",
            "description": "The type of edge to show the composition for.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns graph data that contains a collection of nodes and edges related to the composition of the edge queried.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.unified-graph.graph"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/graphs/relay-targets": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetRelayTargets",
        "summary": "Get relay targets",
        "description": "Returns a graph representing the various nodes that are valid relay targets for this edge",
        "tags": [
          "Graph",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "source_node",
            "description": "The ID of the starting node.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "target_node",
            "description": "The ID of the ending node.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "edge_type",
            "description": "The type of edge to show the composition for.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns graph data that contains a collection of nodes that are valid relay targets related to the composition of the edge queried.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.unified-graph.graph"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/graphs/acl-inheritance": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetACLInheritancePath",
        "summary": "Get ACL inheritance path",
        "description": "Returns a graph representing the path that an ACE is inherited through for a given edge.",
        "tags": [
          "Graph",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "source_node",
            "description": "The ID of the starting node.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "target_node",
            "description": "The ID of the ending node.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "edge_type",
            "description": "The type of edge the ACL inheritance path is being fetched for.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns graph data that contains a collection of nodes and edges that make up the ACL inheritance path.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.unified-graph.graph"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/extensions": {
      "put": {
        "description": "**Experimental** - Upserts the OpenGraph extension.\n\nThe request body may be a JSON extension payload or a ZIP bundle. A ZIP bundle must contain `schema.json`, without embedded optional components, and may contain `pz_rules.json` and `saved_queries.json`. Recognized components may be at the ZIP root or one folder deep. For ZIP bundles, findings require `pz_rules.json` with at least one rule. Duplicate components and unexpected files are rejected.\n\nThe root `__MACOSX` entry and everything under `__MACOSX/`, along with hidden files at the ZIP root, are ignored. Top-level directory entries are ignored; deeper directory entries and files more than one folder deep are rejected. All other files remain subject to normal component validation.\n\nEach recognized ZIP component is limited to 10 MiB after decompression; an oversized component is rejected as a bad request.\n",
        "tags": [
          "OpenGraph (Experimental)",
          "Community",
          "Enterprise"
        ],
        "operationId": "UpsertOpenGraphExtension",
        "summary": "Upserts the OpenGraph Extension",
        "requestBody": {
          "description": "An OpenGraph extension JSON payload or ZIP bundle.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.graph-extension.payload"
              },
              "examples": {
                "Generic": {
                  "summary": "Generic OpenGraph Extension Example",
                  "description": "An example generic OpenGraph Extension payload.",
                  "value": {
                    "schema": {
                      "name": "OpenGraph_Extension",
                      "display_name": "OpenGraph Extension",
                      "version": "v1.0.0",
                      "namespace": "OGE"
                    },
                    "node_kinds": [
                      {
                        "name": "OGE_Node_Kind_1",
                        "display_name": "Node Kind 1",
                        "description": "A generic node kind",
                        "is_display_kind": true,
                        "icon": "computer",
                        "color": "#FF0000",
                        "info": {
                          "overview": {
                            "title": "Overview",
                            "position": 1,
                            "markdown": {
                              "content": "This is an overview panel for **{{ .Properties.name | upper }}** (node {{ .NodeID }})"
                            }
                          },
                          "details": {
                            "title": "Additional Details",
                            "position": 2,
                            "markdown": {
                              "content": "This panel provides additional information about the node"
                            }
                          }
                        }
                      },
                      {
                        "name": "OGE_Node_Kind_2",
                        "display_name": "Node Kind 2",
                        "description": "A secondary generic node kind",
                        "is_display_kind": false
                      },
                      {
                        "name": "OGE_Environment_Kind",
                        "display_name": "Environment",
                        "description": "A generic environment kind",
                        "icon": "sitemap",
                        "color": "#00FF00",
                        "is_display_kind": true
                      }
                    ],
                    "relationship_kinds": [
                      {
                        "name": "OGE_ConnectedTo",
                        "description": "A generic relationship kind",
                        "is_traversable": true,
                        "info": {
                          "abuse": {
                            "title": "Abuse Info",
                            "position": 1,
                            "markdown": {
                              "content": "Information about how the {{ .Kind.Name }} relationship from {{ .Source.Properties.name }} to {{ .Target.Properties.name }} can be abused"
                            }
                          }
                        }
                      }
                    ],
                    "environments": [
                      {
                        "environment_kind": "OGE_Environment_Kind",
                        "source_kind": "OGExtension",
                        "principal_kinds": [
                          "OGE_Node_Kind_1",
                          "OGE_Node_Kind_2"
                        ]
                      }
                    ],
                    "relationship_findings": [
                      {
                        "name": "OGE_Finding_1",
                        "display_name": "Finding 1",
                        "relationship_kind": "OGE_ConnectedTo",
                        "environment_kind": "OGE_Environment_Kind",
                        "remediation": {
                          "short_description": "a remediation",
                          "long_description": "a remediation to fix Finding 1",
                          "short_remediation": "Do X",
                          "long_remediation": "Do X to fix Finding 1"
                        }
                      }
                    ],
                    "queries": [
                      {
                        "query_key": "all-node-kind-1",
                        "name": "All Node Kind 1",
                        "query": "MATCH (n:OGE_Node_Kind_1) RETURN n",
                        "description": "Lists all OGE_Node_Kind_1 nodes.",
                        "category": "Asset Management"
                      }
                    ]
                  }
                },
                "Active Directory": {
                  "summary": "Active Directory Example",
                  "description": "An example Active Directory OpenGraph Extension. As a note, the Active Directory objects in the DB do not currently conform to the expected validation rules. This will change in the future. The example provided is how an Active Directory extension would look in the OpenGraph framework.",
                  "value": {
                    "schema": {
                      "name": "Active_Directory",
                      "display_name": "Active Directory",
                      "version": "v1.0.0",
                      "namespace": "AD"
                    },
                    "node_kinds": [
                      {
                        "name": "AD_Computer",
                        "display_name": "Computer",
                        "description": "An Active Directory Computer object",
                        "is_display_kind": true,
                        "icon": "computer",
                        "color": "#FF0000",
                        "info": {
                          "overview": {
                            "title": "Computer Overview",
                            "position": 1,
                            "markdown": {
                              "content": "Active Directory computer objects represent physical or virtual machines joined to the domain"
                            }
                          }
                        }
                      },
                      {
                        "name": "AD_User",
                        "display_name": "User",
                        "description": "An Active Directory User object",
                        "is_display_kind": true,
                        "icon": "user",
                        "color": "#0000FF",
                        "info": {
                          "overview": {
                            "title": "User Overview",
                            "position": 1,
                            "markdown": {
                              "content": "Active Directory user accounts represent individuals who can authenticate to the domain"
                            }
                          },
                          "security": {
                            "title": "Security Considerations",
                            "position": 2,
                            "markdown": {
                              "content": "User accounts should follow the principle of least privilege"
                            }
                          }
                        }
                      },
                      {
                        "name": "AD_LocalGroup",
                        "display_name": "Local Group",
                        "description": "An Active Directory Local Group object",
                        "is_display_kind": false
                      },
                      {
                        "name": "AD_Domain",
                        "display_name": "Domain",
                        "description": "An Active Directory Domain environment object",
                        "icon": "sitemap",
                        "color": "#00FF00",
                        "is_display_kind": true
                      }
                    ],
                    "relationship_kinds": [
                      {
                        "name": "AD_MemberOf",
                        "description": "An Active Directory relationship kind",
                        "is_traversable": true,
                        "info": {
                          "description": {
                            "title": "MemberOf Relationship",
                            "position": 1,
                            "markdown": {
                              "content": "The MemberOf relationship indicates group membership in Active Directory"
                            }
                          },
                          "abuse": {
                            "title": "Abuse Information",
                            "position": 2,
                            "markdown": {
                              "content": "Group membership can be leveraged to inherit permissions and access rights"
                            }
                          }
                        }
                      }
                    ],
                    "environments": [
                      {
                        "environment_kind": "AD_Domain",
                        "source_kind": "ActiveDirectory",
                        "principal_kinds": [
                          "AD_User",
                          "AD_Computer"
                        ]
                      }
                    ],
                    "relationship_findings": [
                      {
                        "name": "AD_Finding_1",
                        "display_name": "Finding 1 (Active Directory)",
                        "relationship_kind": "AD_MemberOf",
                        "environment_kind": "AD_Domain",
                        "remediation": {
                          "short_description": "a remediation",
                          "long_description": "a remediation to fix Finding 1",
                          "short_remediation": "Do X",
                          "long_remediation": "Do X to fix Finding 1"
                        }
                      }
                    ]
                  }
                }
              }
            },
            "application/zip": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "201": {
            "description": "CREATED"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "415": {
            "$ref": "#/components/responses/unsupported-media-type"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "get": {
        "description": "**Experimental** - Lists pertinent OpenGraph extension information such as id, name, version, and if it is a built-in extension",
        "tags": [
          "OpenGraph (Experimental)",
          "Community",
          "Enterprise"
        ],
        "operationId": "ListExtensions",
        "summary": "List OpenGraph Extensions Information",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.response.graph-extensions-info"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/extensions/{extension_id}": {
      "delete": {
        "description": "**Experimental** - Deletes an OpenGraph Extension by Extension ID",
        "tags": [
          "OpenGraph (Experimental)",
          "Community",
          "Enterprise"
        ],
        "operationId": "DeleteExtension",
        "summary": "Delete OpenGraph Extension",
        "parameters": [
          {
            "name": "extension_id",
            "in": "path",
            "required": true,
            "description": "Extension ID for deletion",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/extensions-edges": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListEdgeKinds",
        "summary": "List Edge Kinds",
        "description": "**Experimental** - List all Edge Kinds across OpenGraph Schemas",
        "tags": [
          "OpenGraph (Experimental)",
          "Enterprise",
          "Community"
        ],
        "parameters": [
          {
            "name": "schemas",
            "description": "Schema names to filter response by",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "is_traversable",
            "description": "Filter response by whether or not an edge is traversable",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.graph-schema-edge-kinds"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/node-kinds/{node_kind_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "node_kind_id",
          "description": "Node Kind ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetNodeKind",
        "summary": "Get Node Kind",
        "description": "**Experimental** - Retrieves the details of a single OpenGraph node kind by its id, including its entity-panel info map keyed by info key.\n",
        "tags": [
          "OpenGraph (Experimental)",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.node-kind-response"
                    }
                  }
                },
                "example": {
                  "data": {
                    "node_kind_id": 42,
                    "name": "User",
                    "display_name": "User",
                    "description": "a user node kind",
                    "is_display_kind": true,
                    "icon": "user",
                    "color": "#FFFFFF",
                    "info": {
                      "overview": {
                        "title": "Overview",
                        "position": 1,
                        "markdown": {
                          "content": "This is an overview panel for the node kind"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/relationship-kinds/{relationship_kind_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "relationship_kind_id",
          "description": "Relationship Kind ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetRelationshipKind",
        "summary": "Get Relationship Kind",
        "description": "**Experimental** - Retrieves the details of a single OpenGraph relationship kind by its id, including its extension metadata and entity-panel info map keyed by info key.\n",
        "tags": [
          "OpenGraph (Experimental)",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.relationship-kind-response"
                    }
                  }
                },
                "examples": {
                  "With info": {
                    "summary": "Relationship kind with entity-panel info",
                    "value": {
                      "data": {
                        "relationship_kind_id": 42,
                        "name": "MemberOf",
                        "description": "a membership relationship",
                        "is_traversable": true,
                        "extension": {
                          "extension_id": 7,
                          "name": "Active Directory",
                          "display_name": "Active Directory",
                          "namespace": "AD",
                          "version": "v0.0.1"
                        },
                        "info": {
                          "overview": {
                            "title": "Overview",
                            "position": 0,
                            "markdown": {
                              "content": "This relationship represents group membership."
                            }
                          }
                        }
                      }
                    }
                  },
                  "Without info": {
                    "summary": "Relationship kind without entity-panel info",
                    "value": {
                      "data": {
                        "relationship_kind_id": 43,
                        "name": "HasSession",
                        "description": "a session relationship",
                        "is_traversable": true,
                        "extension": {
                          "extension_id": 7,
                          "name": "Active Directory",
                          "display_name": "Active Directory",
                          "namespace": "AD",
                          "version": "v0.0.1"
                        },
                        "info": {}
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saved-queries": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListSavedQueries",
        "summary": "List saved queries",
        "description": "Get all saved queries for the current user",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are user_id, name, query, id, extension_id, category, created_at, updated_at, deleted_at.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "query",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "extension_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "owned",
                "shared",
                "public"
              ],
              "default": "owned"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "scope": {
                                    "description": "`public` for public queries, `owned` for queries created by this user, `shared` for queries shared to this user by another user, `extension` for opengraph extension queries\n",
                                    "type": "string"
                                  }
                                }
                              },
                              {
                                "$ref": "#/components/schemas/model.saved-query"
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateSavedQuery",
        "summary": "Create a saved query",
        "description": "Create a new saved query",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating a saved query",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.saved-query"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.saved-query"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saved-queries/{saved_query_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "saved_query_id",
          "description": "ID of the saved query",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetSavedQuery",
        "summary": "Return a saved query",
        "description": "Returns an existing saved query by ID",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "saved_query_id",
            "description": "ID of the saved query",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.saved-query"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteSavedQuery",
        "summary": "Delete a saved query",
        "description": "Delete an existing saved query by ID. Note that only queries owned by the requesting user and public queries if requested by an admin can be deleted. Queries associated with an extension cannot be deleted.\n",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "saved_query_id",
            "description": "ID of the saved query",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "UpdateSavedQuery",
        "summary": "Update a saved query",
        "description": "Update an existing saved query by ID. Note that only queries owned by the requesting user and public queries if requested by an admin can be updated. Queries associated with an extension cannot be updated.\n",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "saved_query_id",
            "description": "ID of the saved query",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The request body for updating a saved query",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.saved-query"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.saved-query"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saved-queries/{saved_query_id}/permissions": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "saved_query_id",
          "description": "ID of the saved query",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetSavedQueryPermissions",
        "summary": "Retrieves saved query permissions for provided query id",
        "description": "Retrieves saved query permissions for provided query id",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "saved_query_id",
            "description": "ID of the saved query",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.saved-queries-permissions.response"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteSavedQueryPermissions",
        "summary": "Revokes permission of a saved query from users",
        "description": "Revokes permission of a saved query from a given set of users",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "saved_query_id",
            "description": "ID of the saved query",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The request body for revoking permissions of a saved query from users",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "user_ids": {
                    "type": "array",
                    "description": "A list of user ids that will have their permission revoked from the given saved query",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "ShareSavedQuery",
        "summary": "Share a saved query or set it to public",
        "description": "Shares an existing saved query or makes it public",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "saved_query_id",
            "description": "ID of the saved query",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The request body for sharing a saved query or making it public",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "user_ids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "public": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.saved-queries-permissions"
                      }
                    }
                  }
                }
              }
            }
          },
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saved-queries/{saved_query_id}/export": {
      "parameters": [
        {
          "name": "saved_query_id",
          "description": "ID of the saved query",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "ExportSavedQuery",
        "summary": "Export a saved query",
        "description": "Export an existing saved query by ID",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "**OK**\nThis response will contain binary content.\n\nThe response ZIP file will contain JSON files using their query name as the file name.\nThe underlying JSON file is expected to have the following structure:\n```json\n{\n \"name\": \"Return_Nodes\",\n \"query\": \"MATCH (n) RETURN n\",\n \"description\": \"Returns all nodes in a given graph\"\n}\n```\n",
            "headers": {
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "[this request has a binary response]"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saved-queries/import": {
      "post": {
        "operationId": "ImportSavedQueries",
        "summary": "Import one or more cypher queries.",
        "description": "Import one or more cypher queries.\n\nThe request body should be a json file containing a single query or a Zip consisting of multiple JSON files each containing a single query.\n\nThe underlying JSON file(s) is expected to have the following structure:\n```json\n{\n \"name\": \"Return_Nodes\",\n \"query\": \"MATCH (n) RETURN n\",\n \"description\": \"Returns all nodes in a given graph\"\n}\n```\n",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "Request body should be a JSON or Zip file.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            },
            "application/zip": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "415": {
            "$ref": "#/components/responses/unsupported-media-type"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/saved-queries/export": {
      "parameters": [
        {
          "name": "scope",
          "description": "Scope of saved queries, only the first scope parameter is used.",
          "in": "query",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "all",
              "public",
              "shared",
              "owned"
            ]
          }
        }
      ],
      "get": {
        "operationId": "ExportSavedQueries",
        "summary": "Export one or more saved queries",
        "description": "Export existing saved queries using the scope parameter.",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "**OK**\nThis response will contain binary content.\n\nThe response ZIP file will contain JSON files using their query name as the file name.\nThe underlying JSON file is expected to have the following structure:\n```json\n{\n \"name\": \"Return_Nodes\",\n \"query\": \"MATCH (n) RETURN n\",\n \"description\": \"Returns all nodes in a given graph\"\n}\n```\n",
            "headers": {
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "[this request has a binary response]"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/graphs/cypher": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "RunCypherQuery",
        "summary": "Run a cypher query",
        "description": "Runs a manual cypher query directly against the database.",
        "tags": [
          "Cypher",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "include_properties": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.unified-graph.graph.w.property.keys"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/azure/{entity_type}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "entity_type",
          "description": "Entity Type",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "GetAzureEntity",
        "summary": "Get Azure entity",
        "description": "Retrieves entity information for the given Azure object ID.\nIf `related_entity_type` parameter is not set, this endpoint will return information\nabout a single entity. Using the `counts` boolean parameter will further modify the response.\nIf `related_entity_type` parameter is set, this endpoint will return information about entities\nrelated to a single entity. The `type` parameter will morph the response data structure. The `list`\nvalue for the `type` parameter also accepts `skip` and `limit` parameters.\n",
        "tags": [
          "Azure Entities",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "object_id",
            "description": "The object ID of the entity being operated on.",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "counts",
            "description": "Returns related entity counts. Does not work with `related_entity_type` parameter.",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "related_entity_type",
            "description": "Flags the query to return related entity information based on the type passed.",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "description": "The type of return data expected. Only works with `related_entity_type` parameter.",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "list",
              "enum": [
                "list",
                "graph"
              ]
            }
          },
          {
            "name": "skip",
            "description": "This query parameter is used for determining the number of objects to skip in pagination.\nOnly compatible with `related_entity_type` and `type=list`\n",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.skip"
            }
          },
          {
            "name": "limit",
            "description": "This query parameter is used for setting an upper limit of objects returned in paginated responses.\nOnly compatible with `related_entity_type` and `type=list`\n",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 100,
              "description": "The limit of results requested by the client."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "This endpoint returns a polymorphic response dependent on the query parameters passed. Three\ndifferent response schemas are possible:\n- **entity** schema is used when `related_entity_type` is not set. Additional 'count' properties are\n  dependent on the type of entity being queried.\n- **related-list** schema is used when `related_entity_type` is set and `type` parameter is either\n  `list` or not set (it is the default), and it supports pagination.\n- **related-graph** schema is used when `related_entity_type` is set and `type=graph`.\n",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "type": "object",
                      "title": "entity",
                      "description": "This response is used when `related_entity_type` is not set. It returns information\nabout a single node. All node types will return with the basic node fields, but the\nadditional count properties are dependent on the kind of node returned. Setting\n`counts=true` will populate those count details at the cost of performance.\n",
                      "properties": {
                        "data": {
                          "allOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string"
                                },
                                "properties": {
                                  "type": "object",
                                  "additionalProperties": {
                                    "type": "object"
                                  }
                                }
                              }
                            },
                            {
                              "type": "object",
                              "additionalProperties": {
                                "type": "integer"
                              }
                            }
                          ]
                        }
                      }
                    },
                    {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/api.response.pagination"
                        },
                        {
                          "type": "object",
                          "title": "related-list",
                          "description": "This response is used when `related_entity_type` is set and the `type` parameter is\neither `list` or not set (it is the default return type). It returns a list of related\nentities and supports pagination parameters.\n",
                          "properties": {
                            "data": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string"
                                  },
                                  "properties": {
                                    "type": "object",
                                    "additionalProperties": {
                                      "type": "object"
                                    }
                                  },
                                  "additionalProperties": {
                                    "type": "integer"
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    },
                    {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/model.bh-graph.graph"
                        },
                        {
                          "title": "related-graph",
                          "description": "This response is used when `related_entity_type` is set and the `type` parameter is\nset to `graph`. It returns graph data without a basic data response wrapper.\n"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/base/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetEntity",
        "summary": "Get entity info",
        "description": "Get basic info and counts for this node.",
        "tags": [
          "AD Base Entities",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/base/{object_id}/controllables": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetEntityControllables",
        "summary": "Get entity controllables",
        "description": "Get a list, graph, or count of the principals this node can control.",
        "tags": [
          "AD Base Entities",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/base/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetEntityControllers",
        "summary": "Get entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this node.",
        "tags": [
          "AD Base Entities",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntity",
        "summary": "Get computer entity info",
        "description": "Get info and counts for this computer node.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/admin-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityAdminRights",
        "summary": "Get computer entity admin rights",
        "description": "Get a list, graph, or count of the systems this computer has admin rights to.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/admin-users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityAdmins",
        "summary": "Get computer entity admins",
        "description": "Get a list, graph, or count of the principals that have admin rights on this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/constrained-delegation-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityConstrainedDelegationRights",
        "summary": "Get computer entity constrained delegation rights",
        "description": "Get a list, graph, or count of the principals that this computer has constrained delegations rights to.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/constrained-users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityConstrainedUsers",
        "summary": "Get computer entity constrained users",
        "description": "Get a list, graph, or count of the principals that have constrained delegation rights to this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/controllables": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityControllables",
        "summary": "Get computer entity controllables",
        "description": "Get a list, graph, or count of the principals this computer can control.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityControllers",
        "summary": "Get computer entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/dcom-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityDcomRights",
        "summary": "Get computer entity DCOM rights",
        "description": "Get a list, graph, or count of the systems this computer can execute DCOM on.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/dcom-users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityDcomUsers",
        "summary": "Get computer entity DCOM users",
        "description": "Get a list, graph, or count of the principals that can execute DCOM on this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/group-membership": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityGroupMembership",
        "summary": "Get computer entity group membership",
        "description": "Get a list, graph, or count of the groups this computer is a member of.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/ps-remote-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityPsRemoteRights",
        "summary": "Get computer entity remote PowerShell rights",
        "description": "Get a list, graph, or count of the systems this computer has remote PowerShell rights on.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/ps-remote-users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityPsRemoteUsers",
        "summary": "Get computer entity remote PowerShell users",
        "description": "Get a list, graph, or count of the principals that have remote PowerShell rights on this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/rdp-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityRdpRights",
        "summary": "Get computer entity RDP rights",
        "description": "Get a list, graph, or count of the systems this computer can RDP to.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/rdp-users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntityRdpUsers",
        "summary": "Get computer entity RDP users",
        "description": "Get a list, graph, or count of the principals that have RDP rights on this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/sessions": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntitySessions",
        "summary": "Get computer entity sessions",
        "description": "Get a list, graph, or count of the principals with active sessions on this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/computers/{object_id}/sql-admins": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetComputerEntitySqlAdmins",
        "summary": "Get computer entity SQL admins",
        "description": "Get a list, graph, or count of the principals that have SQL admin rights on this computer.",
        "tags": [
          "Computers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/containers/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetContainerEntity",
        "summary": "Get container entity info",
        "description": "Get basic info and counts for this container node.",
        "tags": [
          "Containers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/containers/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetContainerEntityControllers",
        "summary": "Get container entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this container.",
        "tags": [
          "Containers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntity",
        "summary": "Get domain entity info",
        "description": "Get basic info and counts for this domain node.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "patch": {
        "operationId": "UpdateDomainEntity",
        "summary": "Update the Domain entity",
        "description": "Updates the supported properties on the Domain entity.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The patch request body for updating Domain",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "collected": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "collected": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/computers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityComputers",
        "summary": "Get domain entity computers",
        "description": "Get a list or count of the computers that belong to this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityControllers",
        "summary": "Get domain entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/dc-syncers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityDcSyncers",
        "summary": "Get domain entity DC Syncers",
        "description": "Get a list, graph, or count of the principals that can DC sync this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/foreign-admins": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityForeignAdmins",
        "summary": "Get domain entity foreign admins",
        "description": "Get a list, graph, or count of the principals outside of this domain that have admin\nrights on principals in this domain.\n",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/foreign-gpo-controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityForeignGpoControllers",
        "summary": "Get domain entity foreign GPO controllers",
        "description": "Get a list, graph, or count of the principals outside of this domain that can control\nGPOs inside this domain.\n",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/foreign-groups": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityForeignGroups",
        "summary": "Get domain entity foregin groups",
        "description": "Get a list, graph, or count of the groups outside of this domain that are members\nof groups inside this domain.\n",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/foreign-users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityForeignUsers",
        "summary": "Get domain entity foreign users",
        "description": "Get a list, graph, or count of the users outside of this domain that are members\nof groups inside this domain.\n",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/gpos": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityGpos",
        "summary": "Get domain entity GPOs",
        "description": "Get a list or count of the GPOs in this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/groups": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityGroups",
        "summary": "Get domain entity groups",
        "description": "Get a list or count of the groups in this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/inbound-trusts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityInboundTrusts",
        "summary": "Get domain entity inbound trusts",
        "description": "Get a list, graph, or count of the inbound trusts for this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/linked-gpos": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityLinkedGpos",
        "summary": "Get domain entity linked GPOs",
        "description": "Get a list, graph, or count of the GPOs linked to this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/ous": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityOus",
        "summary": "Get domain entity OUs",
        "description": "Get a list or count of the OUs in this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/outbound-trusts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityOutboundTrusts",
        "summary": "Get domain entity outbound trusts",
        "description": "Get a list, graph, or count of the outbound trusts for this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityUsers",
        "summary": "Get domain entity users",
        "description": "Get a list or count of the users in this domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{object_id}/adcs-escalations": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetDomainEntityAdcsEscalations",
        "summary": "Get ADCS escalations of Domain entity",
        "description": "Get a list, graph, or count of the ADCS escalations of this Domain.",
        "tags": [
          "Domains",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/gpos/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGpoEntity",
        "summary": "Get GPO entity info",
        "description": "Get info and counts for this GPO node.",
        "tags": [
          "GPOs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/gpos/{object_id}/computers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGpoEntityComputers",
        "summary": "Get GPO entity computer",
        "description": "Get a list, graph, or count of the computers affected by this GPO.",
        "tags": [
          "GPOs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/gpos/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGpoEntityControllers",
        "summary": "Get GPO entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this OU.",
        "tags": [
          "GPOs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/gpos/{object_id}/ous": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGpoEntityOus",
        "summary": "Get GPO entity OUs",
        "description": "Get a list, graph, or count of the OUs affected by this GPO.",
        "tags": [
          "GPOs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/gpos/{object_id}/sites": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGpoEntitySites",
        "summary": "Get GPO entity sites",
        "description": "Get a list, graph, or count of the sites affected by this GPO.",
        "tags": [
          "GPOs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/gpos/{object_id}/tier-zero": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGpoEntityTierZero",
        "summary": "Get GPO entity tier-zero",
        "description": "Get a list, graph, or count of the tier-zero principals associated with this GPO.",
        "tags": [
          "GPOs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/gpos/{object_id}/users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGpoEntityUsers",
        "summary": "Get GPO entity users",
        "description": "Get a list, graph, or count of the users affected by this GPO.",
        "tags": [
          "GPOs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/aiacas/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetAiaCaEntity",
        "summary": "Get AIA CA entity info",
        "description": "Get info and counts for this AIA CA node.",
        "tags": [
          "AIA CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/aiacas/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetAiaCaEntityControllers",
        "summary": "Get AIA CA entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this AIA CA.",
        "tags": [
          "AIA CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/aiacas/{object_id}/pki-hierarchy": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetAiaCaEntityPkiHierarchy",
        "summary": "Get PKI hierarchy of AIA CA entity",
        "description": "Get a list, graph, or count of the PKI hierarchy of this AIA CA.",
        "tags": [
          "AIA CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/rootcas/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetRootCaEntity",
        "summary": "Get Root CA entity info",
        "description": "Get info and counts for this Root CA node.",
        "tags": [
          "Root CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/rootcas/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetRootCaEntityControllers",
        "summary": "Get Root CA entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this Root CA.",
        "tags": [
          "Root CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/rootcas/{object_id}/pki-hierarchy": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetRootCaEntityPkiHierarchy",
        "summary": "Get PKI hierarchy of Root CA entity",
        "description": "Get a list, graph, or count of the PKI hierarchy of this Root CA.",
        "tags": [
          "Root CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/enterprisecas/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetEnterpriseCaEntity",
        "summary": "Get Enterprise CA entity info",
        "description": "Get info and counts for this Enterprise CA node.",
        "tags": [
          "Enterprise CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/enterprisecas/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetEnterpriseCaEntityControllers",
        "summary": "Get Enterprise CA entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this Enterprise CA.",
        "tags": [
          "Enterprise CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/enterprisecas/{object_id}/pki-hierarchy": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetEnterpriseCaEntityPkiHierarchy",
        "summary": "Get PKI hierarchy of Enterprise CA entity",
        "description": "Get a list, graph, or count of the PKI hierarchy of this Enterprise CA.",
        "tags": [
          "Enterprise CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/enterprisecas/{object_id}/published-templates": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetEnterpriseCaEntityPublishedTemplates",
        "summary": "Get published certificate templates of Enterprise CA entity",
        "description": "Get a list, graph, or count of the published certificate templates of this Enterprise CA.",
        "tags": [
          "Enterprise CAs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ntauthstores/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetNtAuthStoreEntity",
        "summary": "Get NT Auth Store entity info",
        "description": "Get info and counts for this NT Auth Store node.",
        "tags": [
          "NT Auth Stores",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ntauthstores/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetNtAuthStoreEntityControllers",
        "summary": "Get NT Auth Store entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this NT Auth Store.",
        "tags": [
          "NT Auth Stores",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ntauthstores/{object_id}/trusted-cas": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetNtAuthStoreEntityTrustedCas",
        "summary": "Get trusted Enterprise CAs of NT Auth Store entity",
        "description": "Get a list, graph, or count of the trusted Enterprise CAs of this NT Auth Store.",
        "tags": [
          "NT Auth Stores",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/certtemplates/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetCertTemplateEntity",
        "summary": "Get Cert Template entity info",
        "description": "Get info and counts for this Cert Template node.",
        "tags": [
          "Cert Templates",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/certtemplates/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetCertTemplateEntityControllers",
        "summary": "Get Cert Template entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this Cert Template.",
        "tags": [
          "Cert Templates",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/certtemplates/{object_id}/published-to-cas": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetCertTemplateEntityPublishedToCAs",
        "summary": "Get Enterprise CAs having Cert Template entity published",
        "description": "Get a list, graph, or count of the Enterprise CAs having this Cert Template published.",
        "tags": [
          "Cert Templates",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sites/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetSiteEntity",
        "summary": "Get Site entity info",
        "description": "Get info and counts for this Site node.",
        "tags": [
          "Sites",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sites/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetSiteEntityControllers",
        "summary": "Get Site entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this Site.",
        "tags": [
          "Sites",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sites/{object_id}/linked-gpos": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetSiteEntityLinkedGpos",
        "summary": "Get Site entity linked GPOs",
        "description": "Get a list, graph, or count of the GPOs linked to this Site.",
        "tags": [
          "Sites",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sites/{object_id}/siteservers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetSiteEntitySiteServers",
        "summary": "Get Site entity site servers",
        "description": "Get a list, graph, or count of the site servers linked to this Site.",
        "tags": [
          "Sites",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sites/{object_id}/sitesubnets": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetSiteEntitySiteSubnets",
        "summary": "Get Site entity site subnets",
        "description": "Get a list, graph, or count of the site subnets linked to this Site.",
        "tags": [
          "Sites",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/siteservers/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetSiteServerEntity",
        "summary": "Get Site Server entity info",
        "description": "Get info and counts for this Site Server node.",
        "tags": [
          "Site Servers",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/sitesubnets/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetSiteSubnetEntity",
        "summary": "Get Site Subnet entity info",
        "description": "Get info and counts for this Site Subnet node.",
        "tags": [
          "Site Subnets",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ous/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetOuEntity",
        "summary": "Get OU entity info",
        "description": "Get info and counts for this OU node.",
        "tags": [
          "OUs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ous/{object_id}/computers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetOuEntityComputers",
        "summary": "Get OU entity computers",
        "description": "Get a list, graph, or count of the computers contained by this OU.",
        "tags": [
          "OUs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ous/{object_id}/gpos": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetOuEntityGpos",
        "summary": "Get OU entity GPOs",
        "description": "Get a list, graph, or count of the GPOs that affect this OU.",
        "tags": [
          "OUs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ous/{object_id}/groups": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetOuEntityGroups",
        "summary": "Get OU entity groups",
        "description": "Get a list, graph, or count of the groups contained by this OU.",
        "tags": [
          "OUs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ous/{object_id}/users": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetOuEntityUsers",
        "summary": "Get OU entity users",
        "description": "Get a list, graph, or count of the users contained by this OU.",
        "tags": [
          "OUs",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntity",
        "summary": "Get User entity info",
        "description": "Get info and counts for this User node.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/admin-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityAdminRights",
        "summary": "Get User entity admin rights",
        "description": "Get a list, graph, or count of the systems this user has admin rights to.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/constrained-delegation-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityConstrainedDelegationRights",
        "summary": "Get User entity constrained delegation rights",
        "description": "Get a list, graph, or count of the systems this user has constrained delegation rights to.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/controllables": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityControllables",
        "summary": "Get User entity controllables",
        "description": "Get a list, graph, or count of the principals this user can control.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityControllers",
        "summary": "Get User entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this User.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/dcom-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityDcomRights",
        "summary": "Get User entity DCOM rights",
        "description": "Get a list, graph, or count of the systems this user can execute DCOM on.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/memberships": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityMembership",
        "summary": "Get User entity membership",
        "description": "Get a list, graph, or count of the groups this user is a member of.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/ps-remote-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityPsRemoteRights",
        "summary": "Get User entity PowerShell remote rights",
        "description": "Get a list, graph, or count of the systems this user can execute PowerShell remote on.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/rdp-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntityRdpRights",
        "summary": "Get User entity RDP rights",
        "description": "Get a list, graph, or count of the systems this user has RDP rights to.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/sessions": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntitySessions",
        "summary": "Get User entity sessions",
        "description": "Get a list, graph, or count of the systems this user has an active session on.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/users/{object_id}/sql-admin-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetUserEntitySqlAdminRights",
        "summary": "Get User entity SQL admin rights",
        "description": "Get a list, graph, or count of the systems this user has SQL admin rights to.",
        "tags": [
          "AD Users",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntity",
        "summary": "Get Group entity info",
        "description": "Get info and counts for this Group node.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.hydrate-counts"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/entity-info-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/admin-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityAdminRights",
        "summary": "Get Group entity admin rights",
        "description": "Get a list, graph, or count of the systems this group has admin rights to.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/controllables": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityControllables",
        "summary": "Get Group entity controllables",
        "description": "Get a list, graph, or count of the principals this group can control.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/controllers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityControllers",
        "summary": "Get Group entity controllers",
        "description": "Get a list, graph, or count of the principals that can control this group.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/dcom-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityDcomRights",
        "summary": "Get Group entity DCOMRights",
        "description": "Get a list, graph, or count of the systems this group can execute DCOM on.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/members": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityMembers",
        "summary": "Get Group entity members",
        "description": "Get a list, graph, or count of the principals that are a member of this group.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/memberships": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityMemberships",
        "summary": "Get Group entity memberships",
        "description": "Get a list, graph, or count of the groups this group is a member of.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/ps-remote-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityPsRemoteRights",
        "summary": "Get Group entity PowerShell remote rights",
        "description": "Get a list, graph, or count of the systems this group can execute PowerShell remote on.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/rdp-rights": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntityRdpRights",
        "summary": "Get Group entity RDP rights",
        "description": "Get a list, graph, or count of the systems this group can RDP to.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/groups/{object_id}/sessions": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetGroupEntitySessions",
        "summary": "Get Group entity sessions",
        "description": "Get a list, graph, or count of the active sessions for users that belong to this group.",
        "tags": [
          "Groups",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.entity.skip"
          },
          {
            "$ref": "#/components/parameters/query.entity.limit"
          },
          {
            "$ref": "#/components/parameters/query.entity.type"
          },
          {
            "$ref": "#/components/parameters/query.entity.sort-by"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/related-entity-query-results"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/completeness": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetCompletenessStats",
        "summary": "Get database completeness stats",
        "description": "Get the percentage of local admins and sessions collected",
        "tags": [
          "Data Quality",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "number",
                        "format": "double"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ad-domains/{domain_id}/data-quality-stats": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "domain_id",
          "description": "Domain ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "GetAdDomainDataQualityStats",
        "summary": "Get AD domain data quality stats",
        "description": "Time series list of data quality stats for a given AD domain",
        "tags": [
          "Data Quality",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are created_at, updated_at.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.ad-data-quality-stat"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/azure-tenants/{tenant_id}/data-quality-stats": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "tenant_id",
          "description": "Tenant ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "GetAzureTenantDataQualityStats",
        "summary": "Get Azure tenant data quality stats",
        "description": "Time series list of data quality stats for a given Azure tenant",
        "tags": [
          "Data Quality",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are created_at, updated_at.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.azure-data-quality-stat"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/platform/{platform_id}/data-quality-stats": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "platform_id",
          "description": "Platform ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "ad",
              "azure"
            ]
          }
        }
      ],
      "get": {
        "operationId": "GetPlatformDataQualityAggregate",
        "summary": "Get platform data quality aggregate",
        "description": "Time series list of aggregate data quality stats for a given platform",
        "tags": [
          "Data Quality",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are created_at, updated_at.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.response.data-quality-platform-aggregate"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/data-quality-stats": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetDataQualityStats",
        "summary": "Get environment-specific data quality stats",
        "description": "Time series list of data quality stats for a given environment",
        "tags": [
          "Data Quality",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "environment_id",
            "description": "Required. Filters results to the given environment.",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are created_at, updated_at.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.data-quality-stat"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/data-quality-stats-aggregations": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetDataQualityAggregations",
        "summary": "Get data quality aggregations by environment kind",
        "description": "Returns data quality metric counts aggregated per environment kind, optionally scoped to an OpenGraph schema extension, combined across environment instances for each collection run. Results can be filtered, sorted, and paginated.\n",
        "tags": [
          "Data Quality",
          "Community",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "schema_environment_kind_id",
            "description": "Required. Scopes the aggregation to a single environment kind id.\n",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "schema_extension_id",
            "description": "Optional. Scopes the aggregation to a single OpenGraph schema extension id. The extension must exist or a 404 is returned.\n",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are created_at, updated_at.\n",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.data-quality-aggregation"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clear-database": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "DeleteBloodHoundDatabase",
        "summary": "Delete your BloodHound data",
        "description": "Wipes your BloodHound data permanently. Specify the data to delete in the request body. Possible data includes collected graph data, relationships of specific types, custom high value selectors, file ingest history, and data quality history.",
        "tags": [
          "Database",
          "Community",
          "Enterprise"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deleteCollectedGraphData": {
                    "type": "boolean",
                    "description": "When true, deletes all collected graph nodes and edges. Cannot be combined with deleteSourceKinds or deleteRelationships.\n"
                  },
                  "deleteSourceKinds": {
                    "type": "array",
                    "description": "A list of source kind IDs (from the source_kinds table) whose associated graph nodes and source kind records will be deleted. Use 0 as a special value to delete all \"sourceless\" nodes - nodes that exist in the graph but are not attributed to any source kind. Non-existent IDs will result in a 400 error.\n",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "deleteRelationships": {
                    "type": "array",
                    "description": "A list of relationship kind names (e.g. \"HasSession\") whose edges will be deleted from the graph. Each value must be a valid, known relationship kind. Cannot be combined with deleteCollectedGraphData.\n",
                    "items": {
                      "type": "string"
                    }
                  },
                  "deleteFileIngestHistory": {
                    "type": "boolean",
                    "description": "When true, deletes all file ingest job history records."
                  },
                  "deleteDataQualityHistory": {
                    "type": "boolean",
                    "description": "When true, deletes all data quality history records."
                  },
                  "deleteAssetGroupSelectors": {
                    "type": "array",
                    "description": "A list of asset group IDs whose custom selectors will be deleted. Triggers a re-analysis after deletion.\n",
                    "items": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/datapipe/status": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetDatapipeStatus",
        "summary": "Get datapipe status",
        "description": "Gets the current status of the datapipe",
        "tags": [
          "Datapipe",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "$ref": "#/components/schemas/enum.datapipe-status"
                        },
                        "updated_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "last_complete_analysis_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "last_analysis_run_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "last_complete_optimize_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "next_scheduled_analysis_at": {
                          "type": "string",
                          "format": "date-time",
                          "description": "The next time a scheduled analysis will run. Note this field is Enterprise-Only."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          }
        }
      }
    },
    "/api/v2/analysis": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetAnalysisRequest",
        "summary": "Gets analysis request information",
        "description": "Returns the current analysis request information. Always returns 200 OK with\nthe request details. When no request is pending, returns a zero-valued response\nwith empty strings, false booleans, null arrays, and zero timestamp.\n",
        "tags": [
          "Datapipe",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK. Returns analysis request details if one exists, or a zero-valued\nresponse if no request is pending (requested_by and request_type will be\nempty strings, requested_at will be \"0001-01-01T00:00:00Z\", booleans will\nbe false, and arrays will be null).\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "requested_by": {
                          "type": "string"
                        },
                        "request_type": {
                          "type": "string"
                        },
                        "requested_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "delete_all_graph": {
                          "type": "boolean"
                        },
                        "delete_sourceless_graph": {
                          "type": "boolean"
                        },
                        "delete_source_kinds": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "delete_relationships": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "StartAnalysis",
        "summary": "Start analysis",
        "description": "Submits an analysis request attributed to the authenticated user. The\nendpoint is idempotent — at most one analysis request can be pending at a\ntime. Always returns 202 Accepted with no response body.\n",
        "tags": [
          "Datapipe",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "202": {
            "$ref": "#/components/responses/no-content"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "CancelAnalysisRequest",
        "summary": "Cancels an analysis request",
        "description": "Flags the API to request the cancellation of analyzing ingest data.",
        "tags": [
          "Datapipe",
          "Community",
          "Enterprise"
        ],
        "responses": {
          "202": {
            "$ref": "#/components/responses/no-content"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict. You cannot cancel an analysis request because a deletion request is pending",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/accept-eula": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "put": {
        "operationId": "AcceptEula",
        "summary": "Accept EULA",
        "description": "Accept BloodHound Enterprise EULA for logged in user (EULA applies to BHE customers only).",
        "tags": [
          "EULA",
          "Enterprise"
        ],
        "responses": {
          "202": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/meta-nodes/{domain_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "domain_id",
          "description": "Domain ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "$ref": "#/components/parameters/query.asset-group-tag-id"
        }
      ],
      "get": {
        "operationId": "GetLatestTierZeroComboNode",
        "summary": "Get latest tier zero combo node",
        "description": "Get latest tier zero combo node",
        "tags": [
          "Analysis",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "additionalProperties": {
                        "$ref": "#/components/schemas/model.bh-graph.node"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/meta-trees/{domain_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "domain_id",
          "description": "Domain ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "$ref": "#/components/parameters/query.asset-group-tag-id"
        }
      ],
      "get": {
        "operationId": "GetComboTreeGraph",
        "summary": "Get the graph for meta tree",
        "description": "Gets meta nodes and connecting edges",
        "tags": [
          "Analysis",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "node_id",
            "description": "Node ID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.bh-graph.graph"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-groups/{asset_group_id}/combo-node": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "asset_group_id",
          "description": "Asset Group Object ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetAssetGroupComboNode",
        "deprecated": true,
        "summary": "Get the combo tree for an asset group",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases.\n",
        "tags": [
          "Analysis",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "domainsid",
            "description": "Filter by Domain security identifier.",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.bh-graph.graph"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/ingest": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "IngestData",
        "summary": "Endpoint for data ingestion",
        "description": "Ingests data from collector clients",
        "tags": [
          "Client Ingest",
          "Enterprise"
        ],
        "responses": {
          "202": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListClients",
        "summary": "List Clients",
        "description": "Lists available clients for processing collection events.",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are `name`, `ip_address`, `hostname`, `configured_user`, `last_checkin`, `completed_job_count`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "ip_address",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "hostname",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "configured_user",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "version",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "user_sid",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "last_checkin",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "current_job_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "completed_job_count",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "domain_controller",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.client-display"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateClient",
        "summary": "Create Client",
        "description": "Creates a client for collection events",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating a client",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "domain_controller": {
                    "type": "string"
                  },
                  "type": {
                    "$ref": "#/components/schemas/enum.client-type"
                  },
                  "events": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/model.client-schedule"
                    }
                  },
                  "provided_identifier": {
                    "type": "string",
                    "description": "Optional identifier used to associate an external identity-provider token with this client."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/error": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "LogClientError",
        "summary": "Client Error",
        "description": "Endpoint for clients to log enumeration errors.\n\nNote: caller must be a client. For users, this endpoint will return a 404 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for logging a client enumeration error",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "task_error": {
                    "type": "string"
                  },
                  "additional": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/update": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "put": {
        "operationId": "UpdateClientInfo",
        "summary": "Update Client Values",
        "description": "Endpoint for clients to update their own information at startup.\n\nNote: caller must be a client. For users, this endpoint will return a 404 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating a client",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "address": {
                    "type": "string"
                  },
                  "hostname": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "version": {
                    "type": "string"
                  },
                  "usersid": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "GetClient",
        "summary": "Get Client",
        "description": "Gets given client for processing collection events",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "UpdateClient",
        "summary": "Update Client",
        "description": "Update a client for processing collection events",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating a client",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "domain_controller": {
                    "type": "string"
                  },
                  "provided_identifier": {
                    "type": "string",
                    "description": "Optional identifier used to associate an external identity-provider token with this client."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteClient",
        "summary": "Delete Client",
        "description": "Delete a client for processing collection events",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/token": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "operationId": "ReplaceClientToken",
        "summary": "Regenerate the authentication token for a client",
        "description": "Regenerate the authentication token for a client",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.auth-token"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/completed-tasks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "ListClientCompletedTasks",
        "deprecated": true,
        "summary": "List all completed tasks for a client",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `GET /api/v2/clients/{client_id}/completed_jobs` instead.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.client-scheduled-job-display"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/completed-jobs": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "ListClientCompletedJobs",
        "summary": "List all completed jobs for a client",
        "description": "List all completed jobs for a client",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.client-scheduled-job-display"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/tasks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "CreateClientScheduledTask",
        "deprecated": true,
        "summary": "Creates a scheduled task",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `POST /api/v2/clients/{client_id}/jobs` instead.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/header.prefer"
          }
        ],
        "requestBody": {
          "description": "The request body for creating a scheduled task",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-scheduled-job"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/jobs": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "CreateClientScheduledJob",
        "summary": "Creates a scheduled job",
        "description": "Creates a new scheduled job",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/header.prefer"
          }
        ],
        "requestBody": {
          "description": "The request body for creating a scheduled job",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-scheduled-job"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/available": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAvailableClientJobs",
        "summary": "List available client jobs",
        "description": "Endpoint for clients to get next available jobs.\n\nNote: caller must be a client. For users, this endpoint will return a 404 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, and `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.client-scheduled-job-display"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/finished": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListClientFinishedJobs",
        "summary": "List finished jobs",
        "description": "Gets all finished jobs",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `client_name`, `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.client-scheduled-job-display"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetClientJobs",
        "summary": "Get jobs",
        "description": "Gets client jobs",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `client_name`, `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.client-scheduled-job-display"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/current": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetClientCurrentJob",
        "summary": "Get client current job",
        "description": "Gets the current job for the authenticated client.\n\nNote: caller must be a client. For users, this endpoint will return a 404 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/start": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "StartClientJob",
        "summary": "Notifies the API of a job start",
        "description": "Endpoint for clients to start a new job and mark the start time.\n\nNote: caller must be a client. For users, this endpoint will return a 404 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer",
                    "format": "int64"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/end": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "EndClientJob",
        "summary": "Notifies the API of a job ending",
        "description": "Endpoint for clients to end a job and mark the end time.\n\nNote: caller must be a client. For users, this endpoint will return a 404 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/{job_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "job_id",
          "description": "Job ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "get": {
        "operationId": "GetClientJob",
        "summary": "Get client job",
        "description": "Gets client job",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/{job_id}/cancel": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "job_id",
          "description": "Job ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "put": {
        "operationId": "CancelClientJob",
        "summary": "Cancels a scheduled job",
        "description": "Cancels a scheduled job",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/jobs/{job_id}/log": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "job_id",
          "description": "Job ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "get": {
        "operationId": "GetClientJobLog",
        "summary": "Get Job Log File",
        "description": "Get the log file from a SharpHound run",
        "tags": [
          "Jobs",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "log": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/management": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "QueueClientManagementOperation",
        "summary": "Queues a management operation",
        "description": "Endpoint for users to queue a management operation for a client.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-management-operation-queue-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-management-operation"
                    }
                  }
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-management-operation"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/artifacts/{artifact_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "artifact_id",
          "description": "Artifact ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "DownloadClientArtifact",
        "summary": "Download a management operation artifact for the client",
        "description": "Downloads an operation artifact associated with the client.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "**OK**\nThis response will contain the artifact file.\n",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "example": "private, no-store, no-transform"
                }
              },
              "Content-Disposition": {
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=\"support-bundle.zip\""
                }
              },
              "Content-Length": {
                "schema": {
                  "type": "string",
                  "example": 123456
                }
              },
              "Content-Type": {
                "schema": {
                  "type": "string",
                  "example": "application/zip"
                }
              }
            },
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "[this request has a binary response]"
              },
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "[this request has a binary response]"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "artifact not finished uploading, must upload missing parts"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteClientArtifact",
        "summary": "Delete a management operation artifact for the client",
        "description": "Deletes an operation artifact associated with the client.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/management/available": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "summary": "Get available management operations",
        "description": "Endpoint for clients to get next available management operations.\n\nNote: caller must be a client. For users, this endpoint will return a 403 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.client-management-operation"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/management/start": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "StartClientManagementOperation",
        "summary": "Notifies the API of a management operation start",
        "description": "Endpoint for clients to start a management operation and mark the start time.\n\nNote: caller must be a client. For users, this endpoint will return a 403 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-management-operation-start-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-management-operation"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "invalid management operation status transition"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/management/end": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "EndClientManagementOperation",
        "summary": "Notifies the API of a management operation ending",
        "description": "Endpoint for clients to end a management operation and mark the completed time.\n\nNote: caller must be a client. For users, this endpoint will return a 403 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-management-operation-end-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-management-operation"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "invalid management operation status transition"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/management/artifacts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "CreateClientArtifactUploadSession",
        "summary": "Create an artifact upload session",
        "description": "Endpoint for clients to create an artifact upload session and associate it\nwith a running management operation.\n\nNote: caller must be a client. For users, this endpoint will return a 403 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-artifact-upload-session-create-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-artifact-upload-session-create-response"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "management operation already has an associated artifact"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/management/artifacts/{artifact_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "artifact_id",
          "description": "Artifact ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "GetClientArtifactUploadSession",
        "summary": "Get an artifact upload session",
        "description": "Endpoint for clients to get artifact upload-session state.\n\nNote: caller must be a client. For users, this endpoint will return a 403 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-artifact-upload-session"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/management/artifacts/{artifact_id}/parts/{part_number}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "artifact_id",
          "description": "Artifact ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "part_number",
          "description": "Artifact part number, starting at 1.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32",
            "minimum": 1
          }
        }
      ],
      "post": {
        "operationId": "UploadClientArtifactPart",
        "summary": "Upload an artifact part",
        "description": "Endpoint for clients to upload one part of an artifact upload session.\n\nThe part checksum is supplied through the Content-Digest header. Supported\ndigest names are sha-256 and sha-512. The digest value must be a structured\nfield byte sequence containing the base64-encoded digest bytes, for example\nsha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:.\n\nNote: caller must be a client. For users, this endpoint will return a 403 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "Content-Length",
            "description": "Size of the uploaded artifact part, in bytes.",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64",
              "minimum": 1
            }
          },
          {
            "name": "Content-Digest",
            "description": "Structured field digest for the uploaded artifact part.",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-artifact-upload-session"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "artifact part already uploaded with a different checksum"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/management/artifacts/{artifact_id}/complete": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "artifact_id",
          "description": "Artifact ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "CompleteClientArtifactUploadSession",
        "summary": "Complete an artifact upload session",
        "description": "Endpoint for clients to complete an artifact upload session after all\nexpected parts have been uploaded.\n\nNote: caller must be a client. For users, this endpoint will return a 403 as\nthey are not expected or allowed to call this endpoint.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-artifact-upload-session-complete-request"
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "artifact not finished uploading, must upload missing parts"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/artifacts/{artifact_id}/download-url": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "artifact_id",
          "description": "Artifact ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "GetClientArtifactDownloadURL",
        "summary": "Get a client artifact download URL",
        "description": "Issues a presigned URL that can be used to download an operation artifact associated\nwith the client\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "example": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-artifact-download-url"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "artifact not finished uploading, must upload missing parts"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/clients/{client_id}/artifacts/{artifact_id}/download": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "client_id",
          "description": "Client ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "artifact_id",
          "description": "Artifact ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "PresignedDownloadClientArtifact",
        "summary": "Download a management operation artifact for the client",
        "description": "Downloads an operation artifact associated with the client using a\npreviously issued artifact download token.\n",
        "tags": [
          "Clients",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "**OK**\nThis response will contain the artifact file.\n",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "example": "private, no-store, no-transform"
                }
              },
              "Content-Disposition": {
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=\"support-bundle.zip\""
                }
              },
              "Content-Length": {
                "schema": {
                  "type": "string",
                  "example": 123456
                }
              },
              "Content-Type": {
                "schema": {
                  "type": "string",
                  "example": "application/zip"
                }
              }
            },
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "[this request has a binary response]"
              },
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "example": "[this request has a binary response]"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-07-01T13:44:43.247Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "",
                      "message": "artifact not finished uploading, must upload missing parts"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/available": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAvailableClientTasks",
        "deprecated": true,
        "summary": "List available client tasks",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `GET /api/v2/jobs/available` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, and `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.client-scheduled-job-display"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/finished": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListClientFinishedTasks",
        "deprecated": true,
        "summary": "List finished tasks",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `GET /api/v2/jobs/finished` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `client_name`, `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.client-scheduled-job-display"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetClientTasks",
        "deprecated": true,
        "summary": "Get tasks",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `GET /api/v2/jobs` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `client_name`, `event_id`, `execution_time`, `status`, `start_time`, `end_time`, `log_path`, `domain_controller`, `event_title`, `last_ingest`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.log-path"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.domain-controller"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.status"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-title"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.event-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.execution-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.start-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.end-time"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.last-ingest"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/model.client-scheduled-job-display"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/current": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetClientCurrentTask",
        "deprecated": true,
        "summary": "Get client current task",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `GET /api/v2/jobs/current` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/start": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "StartClientTask",
        "deprecated": true,
        "summary": "Notifies the API of a task start",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `POST /api/v2/jobs/start` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer",
                    "format": "int64"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/end": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "EndClientTask",
        "deprecated": true,
        "summary": "Notifies the API of a task ending",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `POST /api/v2/jobs/end` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/{task_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "task_id",
          "description": "Task ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "get": {
        "operationId": "GetClientTask",
        "deprecated": true,
        "summary": "Get client task",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `GET /api/v2/jobs/{job_id}` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/{task_id}/cancel": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "task_id",
          "description": "Task ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "put": {
        "operationId": "CancelClientTask",
        "deprecated": true,
        "summary": "Cancels a scheduled task",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `PUT /api/v2/jobs/{job_id}/cancel` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-scheduled-job-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/tasks/{task_id}/log": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "task_id",
          "description": "Task ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "get": {
        "operationId": "GetClientTaskLog",
        "deprecated": true,
        "summary": "Get Task Log File",
        "description": "**Deprecated**: This endpoint will no longer be supported in future releases. Please use `GET /api/v2/jobs/{job_id}/log` instead.\n",
        "tags": [
          "Tasks",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "log": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/events": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListClientSchedules",
        "summary": "List events",
        "description": "Gets all client scheduled events.",
        "tags": [
          "Events (Schedules)",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `next_scheduled_at`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "rrule",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "next_scheduled_at",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "$ref": "#/components/parameters/query.clients.job.client-id"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.session-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.local-group-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ad-structure-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.cert-services-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.ca-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.job.dc-registry-collection"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-domains"
          },
          {
            "$ref": "#/components/parameters/query.clients.hydrate-ous"
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.client-schedule-display"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateClientSchedule",
        "summary": "Create Event",
        "description": "Creates a scheduled event for data collection",
        "tags": [
          "Events (Schedules)",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for creating an event",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-schedule"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-schedule-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/events/{event_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "event_id",
          "description": "Event ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ],
      "get": {
        "operationId": "GetClientSchedule",
        "summary": "Get Event",
        "description": "Gets a scheduled job event by ID.",
        "tags": [
          "Events (Schedules)",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-schedule-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "put": {
        "operationId": "UpdateClientEvent",
        "summary": "Update Event",
        "description": "Updates a scheduled event",
        "tags": [
          "Events (Schedules)",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating an event",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/model.client-schedule"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/model.client-schedule-display"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteClientEvent",
        "summary": "Delete Event",
        "description": "Deletes a scheduled event and associated tasks by id",
        "tags": [
          "Events (Schedules)",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{domain_id}/attack-path-findings": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "domain_id",
          "description": "Domain ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "ExportAttackPathFindings",
        "summary": "Export attack path findings",
        "description": "Export the finding table for a given attack path",
        "deprecated": true,
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "finding",
            "description": "Finding Type",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filterAccepted",
            "description": "Risk acceptance filter",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/enum.risk-acceptance"
            }
          },
          {
            "name": "sort_by",
            "description": "Sort by column. The only sortable column is `finding`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/csv-response"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-paths/finding-trends": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "FindingTrendsForEnvironment",
        "summary": "List finding trends",
        "description": "Lists findings and their changes in between two dates for an environment",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "environments",
            "description": "Environment IDs",
            "in": "query",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (exclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/query.asset-group-tag-id"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "environments": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "data": {
                          "type": "object",
                          "properties": {
                            "findings": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "environment_ids": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "finding": {
                                    "type": "string"
                                  },
                                  "display_title": {
                                    "type": "string"
                                  },
                                  "display_type": {
                                    "type": "string"
                                  },
                                  "composite_risk": {
                                    "type": "number",
                                    "format": "double"
                                  },
                                  "finding_count_start": {
                                    "type": "integer"
                                  },
                                  "finding_count_end": {
                                    "type": "integer"
                                  },
                                  "finding_count_increase": {
                                    "type": "integer"
                                  },
                                  "finding_count_decrease": {
                                    "type": "integer"
                                  },
                                  "impact_count": {
                                    "type": "integer",
                                    "nullable": true
                                  },
                                  "exposure_count": {
                                    "type": "integer",
                                    "nullable": true
                                  },
                                  "archived_count": {
                                    "type": "integer",
                                    "description": "Total number of findings of this type that were\narchived (deleted during analysis reconciliation)\nwithin the requested time window. Summed across\nall snapshots in the window.\n"
                                  }
                                }
                              }
                            },
                            "total_finding_count_start": {
                              "type": "integer"
                            },
                            "total_finding_count_end": {
                              "type": "integer"
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-path-types": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAttackPathTypes",
        "summary": "List all attack path types",
        "description": "Lists all possible attack path types",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sort by column. The only sortable column is `finding`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "finding",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-paths/finding-types": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAttackPathFindingTypes",
        "summary": "List attack path finding types",
        "description": "Returns distinct attack path finding types available to the caller.\nFinding types are included even when all of their findings are archived\n(remediated, deprecated, or orphaned), so every type remains searchable by status.\nResults are always returned in ascending order by `title`.\n",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "environment_id",
            "description": "Filter by one or more environment identifiers. Repeat the parameter to include multiple environments.\nResults are scoped to the caller's Environment access.\n",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "asset_group_tag_id",
            "description": "Filter by asset group tag identifier. Supported predicates are `eq` and `neq`.\n",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer-strict"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "finding": {
                            "type": "string",
                            "description": "Finding name."
                          },
                          "title": {
                            "type": "string",
                            "description": "Finding title."
                          }
                        },
                        "required": [
                          "finding",
                          "title"
                        ]
                      }
                    }
                  },
                  "required": [
                    "data"
                  ]
                },
                "examples": {
                  "Finding types": {
                    "value": {
                      "data": [
                        {
                          "finding": "Kerberoasting",
                          "title": "Kerberoastable User Accounts"
                        },
                        {
                          "finding": "T0WriteOwner",
                          "title": "Write Owner"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-paths": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "put": {
        "operationId": "StartAnalysisBhe",
        "summary": "Start analysis",
        "description": "Starts generating attack paths",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "responses": {
          "202": {
            "$ref": "#/components/responses/no-content"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-paths/details": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetAllAttackPathFindings",
        "summary": "Get all attack path findings",
        "description": "Fetches all attack path findings and their associated details, including documentation.",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.response.all-findings"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-paths/findings": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAttackPathFindings",
        "summary": "List attack path findings",
        "description": "Returns a unified, paginated list of attack path findings. Defaults to active findings of both relationship and list types unless filtered otherwise.\n",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `severity`, `finding_type`, `finding`, `title`, `platform`, `environment_id`, `environment_name`,\n`asset_group_tag_id`, `zone_name`, `source_principal_id`, `source_principal_kind`, `source_principal_name`, `target_principal_id`, `target_principal_kind`, `target_principal_name`, `status`, `id`, `first_seen`, `last_seen`.\n",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "severity",
            "description": "Filter by severity level.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "finding_type",
            "description": "Filter by finding type. When not provided, both types are returned.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "finding",
            "description": "Filter by finding name.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "title",
            "description": "Filter by human-readable finding title.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "platform",
            "description": "Filter by platform.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "environment_id",
            "description": "Filter by one or more environment identifiers. Repeat the parameter to include multiple environments — results are the union of all specified values.\n",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "environment_name",
            "description": "Filter by environment display name.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "asset_group_tag_id",
            "description": "Filter by asset group tag identifier.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "zone_name",
            "description": "Filter by zone name (e.g. \"Tier Zero\").",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "source_principal_id",
            "description": "Filter by source principal identifier.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "source_principal_kind",
            "description": "Filter by source principal kind.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "source_principal_name",
            "description": "Filter by source principal display name.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "target_principal_id",
            "description": "Filter by target principal identifier.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "target_principal_kind",
            "description": "Filter by target principal kind.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "target_principal_name",
            "description": "Filter by target principal display name.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "status",
            "description": "Filter by finding status.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "first_seen",
            "description": "Filter by first seen timestamp.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "last_seen",
            "description": "Filter by last seen timestamp.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "is_cross_platform",
            "description": "Filter findings by whether source and target principals belong to different platforms.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "examples": {
                  "Unified CSV export": {
                    "value": "Severity,Finding,Title,FindingType,IsCrossPlatform,Platform,EnvironmentID,EnvironmentName,AssetGroupTagID,ZoneName,SourcePrincipalID,SourcePrincipalKind,SourcePrincipalName,TargetPrincipalID,TargetPrincipalKind,TargetPrincipalName,Status,FirstSeen,LastSeen,ArchivedAt\ncritical,T0GenericWrite,GenericWrite Privileges on Tier Zero Objects,relationship,true,Active Directory,S-1-5-21-1974516972-3116780949-2584384717,CORP1.LAB.HOME-LABS.LOL,1,Tier Zero,RPATTON@CORP1.LAB.HOME-LABS.LOL,User,Robert Patton,ADMIN@CORP1.LAB.HOME-LABS.LOL,User,Domain Admin,active,2026-04-11T00:30:18Z,2026-04-14T16:57:35Z,\nhigh,Kerberoasting,Kerberoastable User Accounts,list,false,Active Directory,S-1-5-21-1974516972-3116780949-2584384717,CORP1.LAB.HOME-LABS.LOL,1,Tier Zero,,,, PSX_D_BA@CORP1.LAB.HOME-LABS.LOL,User,Backup Admin,accepted,2026-04-11T00:30:18Z,2026-04-14T16:57:35Z,\n"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "severity": {
                                "type": "string",
                                "description": "Severity level.",
                                "enum": [
                                  "critical",
                                  "high",
                                  "moderate",
                                  "low"
                                ]
                              },
                              "finding_type": {
                                "type": "string",
                                "description": "The type of finding.",
                                "enum": [
                                  "relationship",
                                  "list"
                                ]
                              },
                              "is_cross_platform": {
                                "type": "boolean",
                                "description": "Whether the source and target principals belonged to different platforms when the finding was calculated. Always false for list findings."
                              },
                              "finding": {
                                "type": "string",
                                "description": "Finding name."
                              },
                              "title": {
                                "type": "string",
                                "description": "Human-readable finding title. May vary based on the zone context (e.g., \"Tier Zero\" vs \"Privilege Zone\" variants)."
                              },
                              "platform": {
                                "type": "string",
                                "description": "Platform the finding belongs to."
                              },
                              "environment_id": {
                                "type": "string",
                                "description": "Environment identifier."
                              },
                              "environment_name": {
                                "type": "string",
                                "description": "Human-readable environment display name resolved from the graph. Falls back to environment_id when unavailable."
                              },
                              "asset_group_tag_id": {
                                "type": "integer",
                                "description": "Asset group tag identifier."
                              },
                              "zone_name": {
                                "type": "string",
                                "description": "Human-readable zone name. Empty when the finding is not tied to a named zone."
                              },
                              "source_principal_id": {
                                "type": "string",
                                "description": "Source principal identifier. Omitted for list findings."
                              },
                              "source_principal_kind": {
                                "type": "string",
                                "description": "Source principal kind. Omitted for list findings."
                              },
                              "source_principal_name": {
                                "type": "string",
                                "description": "Source principal display name resolved from principal properties. Empty when unavailable or for list findings."
                              },
                              "target_principal_id": {
                                "type": "string",
                                "description": "Target principal identifier."
                              },
                              "target_principal_kind": {
                                "type": "string",
                                "description": "Target principal kind."
                              },
                              "target_principal_name": {
                                "type": "string",
                                "description": "Target principal display name resolved from principal properties. Empty when unavailable."
                              },
                              "status": {
                                "type": "string",
                                "description": "Finding status.",
                                "enum": [
                                  "active",
                                  "in_progress",
                                  "accepted",
                                  "remediated",
                                  "deprecated",
                                  "orphaned"
                                ]
                              },
                              "id": {
                                "type": "integer",
                                "description": "Unique identifier of the finding."
                              },
                              "first_seen": {
                                "type": "string",
                                "format": "date-time",
                                "description": "Timestamp of when the finding was first created."
                              },
                              "last_seen": {
                                "type": "string",
                                "format": "date-time",
                                "description": "Timestamp of last update."
                              },
                              "archived_at": {
                                "type": "string",
                                "format": "date-time",
                                "description": "Timestamp of when the finding was archived. Omitted when finding has not been archived."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "examples": {
                  "Mixed findings (relationship and list)": {
                    "summary": "Unified response with both finding types",
                    "value": {
                      "count": 3,
                      "skip": 0,
                      "limit": 10,
                      "data": [
                        {
                          "severity": "critical",
                          "finding": "T0GenericWrite",
                          "title": "GenericWrite Privileges on Tier Zero Objects",
                          "finding_type": "relationship",
                          "is_cross_platform": true,
                          "platform": "Active Directory",
                          "environment_id": "S-1-5-21-1974516972-3116780949-2584384717",
                          "environment_name": "CORP1.LAB.HOME-LABS.LOL",
                          "asset_group_tag_id": 1,
                          "zone_name": "Tier Zero",
                          "source_principal_id": "RPATTON@CORP1.LAB.HOME-LABS.LOL",
                          "source_principal_kind": "User",
                          "source_principal_name": "Robert Patton",
                          "target_principal_id": "ADMIN@CORP1.LAB.HOME-LABS.LOL",
                          "target_principal_kind": "User",
                          "target_principal_name": "Domain Admin",
                          "status": "active",
                          "id": 101,
                          "first_seen": "2026-04-11T00:30:18.491666Z",
                          "last_seen": "2026-04-14T16:57:35.675609Z"
                        },
                        {
                          "severity": "high",
                          "finding": "Kerberoasting",
                          "title": "Kerberoastable User Accounts",
                          "finding_type": "list",
                          "is_cross_platform": false,
                          "platform": "Active Directory",
                          "environment_id": "S-1-5-21-1974516972-3116780949-2584384717",
                          "environment_name": "CORP1.LAB.HOME-LABS.LOL",
                          "asset_group_tag_id": 1,
                          "zone_name": "Tier Zero",
                          "source_principal_id": "",
                          "source_principal_kind": "",
                          "source_principal_name": "",
                          "target_principal_id": "PSX_D_BA@CORP1.LAB.HOME-LABS.LOL",
                          "target_principal_kind": "User",
                          "target_principal_name": "Backup Admin",
                          "status": "accepted",
                          "id": 102,
                          "first_seen": "2026-04-11T00:30:18.491666Z",
                          "last_seen": "2026-04-14T16:57:35.675609Z"
                        },
                        {
                          "severity": "moderate",
                          "finding": "T0WriteOwner",
                          "title": "WriteOwner Privileges on Tier Zero Objects",
                          "finding_type": "relationship",
                          "is_cross_platform": false,
                          "platform": "Active Directory",
                          "environment_id": "S-1-5-21-1974516972-3116780949-2584384717",
                          "environment_name": "CORP1.LAB.HOME-LABS.LOL",
                          "asset_group_tag_id": 1,
                          "zone_name": "Tier Zero",
                          "source_principal_id": "JSMITH@CORP1.LAB.HOME-LABS.LOL",
                          "source_principal_kind": "User",
                          "source_principal_name": "John Smith",
                          "target_principal_id": "ADMIN@CORP1.LAB.HOME-LABS.LOL",
                          "target_principal_kind": "User",
                          "target_principal_name": "Domain Admin",
                          "status": "remediated",
                          "id": 103,
                          "first_seen": "2026-03-01T08:00:00.000000Z",
                          "last_seen": "2026-04-20T12:00:00.000000Z",
                          "archived_at": "2026-04-20T12:00:00.000000Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{domain_id}/available-types": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "domain_id",
          "description": "Domain ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "$ref": "#/components/parameters/query.asset-group-tag-id"
        }
      ],
      "get": {
        "operationId": "ListAvailableAttackPathTypesForDomain",
        "summary": "List available attack paths",
        "description": "Lists available attack path types for a domain",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sort by column. The only sortable column is `finding`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "finding",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{domain_id}/details": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "domain_id",
          "description": "Domain, Tenant, or Environment ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "$ref": "#/components/parameters/query.asset-group-tag-id"
        }
      ],
      "get": {
        "operationId": "ListDomainAttackPathsDetails",
        "summary": "List domain attack paths details",
        "description": "Lists detailed data about attack paths for a domain.\n\n__Note:__ `ImpactCount`, `ImpactPercentage`, `ExposureCount`, `ExposurePercentage` and `Severity` will have a value other than zero when butterfly analysis is enabled.\n",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "query",
            "description": "Media type to determine the response format (application/json or text/csv).",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string",
              "enum": [
                "application/json",
                "text/csv"
              ]
            }
          },
          {
            "name": "finding",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "sort_by",
            "description": "Sortable columns are `domain_sid`, `index`, `AcceptedUntil`, `id`, `created_at`, `updated_at`, `deleted_at`, `exposure_percentage`, `impact_percentage`. Relationship risks can be sorted on `FromPrincipal` and `ToPrincipal` in addition to the sortable columns for List Risks.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "FromPrincipal",
            "deprecated": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "ToPrincipal",
            "deprecated": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "from_principal",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "to_principal",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "principals_hash",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "Accepted",
            "deprecated": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "AcceptedUntil",
            "deprecated": true,
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "accepted_until",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "Principal",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "domain_sid",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "$ref": "#/components/parameters/query.deleted-at"
          },
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "examples": {
                  "Butterfly Relationship Finding": {
                    "value": "id,finding_type,exposure_count,exposure_percentage,impact_count,impact_percentage,domain_sid,from_principal_name,from_principal,from_principal_kind,to_principal_name,to_principal,to_principal_kind,combo_graph_relation_id,domain,accepted,accepted_until,principals_hash,created_at,updated_at,is_inherited\n1,Tier Zero Generic Write,500,0.6711,1000,0.9961,5,S-1-5-21-123-123-123,RPATTON@TITANCORP.LOCAL,S-1-5-21-123-123-123,User,RPATTON DELEGATION TEST@TITANCORP.LOCAL,S-1-5-21-124-124-124,User,2,TITANCORP,true,0001-01-01T00:00:00Z,1lQiVG3hOuM=,2022-08-17T23:44:24Z,2024-12-18T15:01:00.176572729Z,Yes\n"
                  },
                  "Metatree Relationship Finding": {
                    "value": "id,finding_type,exposure_count,exposure_percentage,impact_count,impact_percentage,domain_sid,from_principal_name,from_principal,from_principal_kind,to_principal_name,to_principal,to_principal_kind,combo_graph_relation_id,domain,accepted,accepted_until,principals_hash,created_at,updated_at,is_inherited\n1,Tier Zero Generic Write,0,0,0,0,5,S-1-5-21-123-123-123,RPATTON@TITANCORP.LOCAL,S-1-5-21-123-123-123,User,RPATTON DELEGATION TEST@TITANCORP.LOCAL,S-1-5-21-124-124-124,User,0,TITANCORP,true,0001-01-01T00:00:00Z,1lQiVG3hOuM=,2022-08-17T23:44:24Z,2024-12-18T15:01:00.176572729Z,Yes\n"
                  },
                  "Butterfly List Finding": {
                    "value": "id,finding_type,impact_count,impact_percentage,domain,domain_sid,principal_name,principal_kind,principal,accepted,accepted_until,created_at,updated_at\n1,Kerberoasting,800,0.9961,TITANCORP,S-1-5-21-123-123-123,RPATTON@TITANCORP.LOCAL,User,S-1-5-21-124-124-124,true,0001-01-01T00:00:00Z,2022-08-17T23:44:24Z,2024-12-18T15:01:00.176572729Z\n"
                  },
                  "Metatree List Finding": {
                    "value": "id,finding_type,impact_count,impact_percentage,domain,domain_sid,principal_name,principal_kind,principal,accepted,accepted_until,created_at,updated_at\n1,Kerberoasting,0,0,TITANCORP,S-1-5-21-123-123-123,RPATTON@TITANCORP.LOCAL,User,S-1-5-21-124-124-124,true,0001-01-01T00:00:00Z,2022-08-17T23:44:24Z,2024-12-18T15:01:00.176572729Z\n"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/api.response.pagination"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "data": {
                              "type": "array",
                              "items": {
                                "allOf": [
                                  {
                                    "$ref": "#/components/schemas/model.relationship-finding"
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "Accepted": {
                                        "type": "boolean"
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        }
                      ]
                    },
                    {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/api.response.pagination"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "data": {
                              "type": "array",
                              "items": {
                                "allOf": [
                                  {
                                    "$ref": "#/components/schemas/model.list-finding"
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "Accepted": {
                                        "type": "boolean"
                                      }
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        }
                      ]
                    }
                  ]
                },
                "examples": {
                  "Butterfly Relationship Finding": {
                    "summary": "Butterfly Relationship Finding",
                    "description": "When the butterfly analysis feature flag is on, impact count/percentage and exposure count/percentage will have a value other than zero.",
                    "value": {
                      "count": 0,
                      "skip": 0,
                      "limit": 0,
                      "data": [
                        {
                          "id": 0,
                          "created_at": "2024-08-28T21:21:40.845Z",
                          "updated_at": "2024-08-28T21:21:40.845Z",
                          "deleted_at": {
                            "time": "2024-08-28T21:21:40.845Z",
                            "valid": true
                          },
                          "FromPrincipal": "string",
                          "ToPrincipal": "string",
                          "FromPrincipalProps": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "FromPrincipalKind": "string",
                          "ToPrincipalProps": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "ToPrincipalKind": "string",
                          "RelProps": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "ComboGraphRelationID": {
                            "int64": 0,
                            "valid": true
                          },
                          "Finding": "string",
                          "DomainSID": "string",
                          "PrincipalHash": "string",
                          "AcceptedUntil": "2024-08-28T21:21:40.845Z",
                          "ImpactPercentage": 0.12,
                          "ImpactCount": 2,
                          "ExposurePercentage": 0.24,
                          "ExposureCount": 4,
                          "Severity": "high",
                          "Accepted": true
                        }
                      ]
                    }
                  },
                  "Metatree Relationship Finding": {
                    "summary": "Metatree Relationship Finding",
                    "description": "When the butterfly analysis feature flag is off and metatree is running, impact count/percentage and exposure count/percentage will have a value of zero.",
                    "value": {
                      "count": 0,
                      "skip": 0,
                      "limit": 0,
                      "data": [
                        {
                          "id": 0,
                          "created_at": "2024-08-28T21:21:40.845Z",
                          "updated_at": "2024-08-28T21:21:40.845Z",
                          "deleted_at": {
                            "time": "2024-08-28T21:21:40.845Z",
                            "valid": true
                          },
                          "FromPrincipal": "string",
                          "ToPrincipal": "string",
                          "FromPrincipalProps": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "FromPrincipalKind": "string",
                          "ToPrincipalProps": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "ToPrincipalKind": "string",
                          "RelProps": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "ComboGraphRelationID": {
                            "int64": 0,
                            "valid": true
                          },
                          "Finding": "string",
                          "DomainSID": "string",
                          "PrincipalHash": "string",
                          "AcceptedUntil": "2024-08-28T21:21:40.845Z",
                          "ImpactPercentage": 0,
                          "ImpactCount": 0,
                          "ExposurePercentage": 0,
                          "ExposureCount": 0,
                          "Severity": "",
                          "Accepted": true
                        }
                      ]
                    }
                  },
                  "Butterfly List Finding": {
                    "summary": "Butterfly List Finding",
                    "description": "When the butterfly analysis feature flag is on, impact count/percentage and exposure count/percentage will have a value other than zero.",
                    "value": {
                      "count": 0,
                      "skip": 0,
                      "limit": 0,
                      "data": [
                        {
                          "id": 0,
                          "created_at": "2024-08-28T21:42:18.844Z",
                          "updated_at": "2024-08-28T21:42:18.844Z",
                          "deleted_at": {
                            "time": "2024-08-28T21:42:18.844Z",
                            "valid": true
                          },
                          "Principal": "string",
                          "PrincipalKind": "string",
                          "Finding": "string",
                          "DomainSID": "string",
                          "Props": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "AcceptedUntil": "2024-08-28T21:42:18.844Z",
                          "ImpactPercentage": 0.12,
                          "ImpactCount": 2,
                          "Severity": "high",
                          "Accepted": true
                        }
                      ]
                    }
                  },
                  "Metatree List Finding": {
                    "summary": "Metatree List Finding",
                    "description": "When the butterfly analysis feature flag is off and metatree is running, impact count/percentage and exposure count/percentage will have a value of zero.",
                    "value": {
                      "count": 0,
                      "skip": 0,
                      "limit": 0,
                      "data": [
                        {
                          "id": 0,
                          "created_at": "2024-08-28T21:42:18.844Z",
                          "updated_at": "2024-08-28T21:42:18.844Z",
                          "deleted_at": {
                            "time": "2024-08-28T21:42:18.844Z",
                            "valid": true
                          },
                          "Principal": "string",
                          "PrincipalKind": "string",
                          "Finding": "string",
                          "DomainSID": "string",
                          "Props": {
                            "additionalProp1": {},
                            "additionalProp2": {},
                            "additionalProp3": {}
                          },
                          "AcceptedUntil": "2024-08-28T21:42:18.844Z",
                          "ImpactPercentage": 0,
                          "ImpactCount": 0,
                          "Severity": "",
                          "Accepted": true
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/domains/{domain_id}/sparkline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "domain_id",
          "description": "Domain ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "$ref": "#/components/parameters/query.asset-group-tag-id"
        }
      ],
      "get": {
        "operationId": "ListAttackPathSparklineValues",
        "summary": "List attack path sparkline values",
        "description": "List the values that represent the sparklines for individual attack paths",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `CompositeRisk`, `FindingCount`, `ImpactedAssetCount`, `domain_sid`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "finding",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "from",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            },
            "in": "query"
          },
          {
            "name": "to",
            "description": "Ending datetime of range (exclusive) in RFC-3339 format; Defaults to current datetime",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            },
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.risk-counts"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-paths/{attack_path_id}/acceptance": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "attack_path_id",
          "description": "Attack Path ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "put": {
        "operationId": "UpdateAttackPathRisk",
        "summary": "Update attack path risk",
        "description": "Updates an attack path as an accepted or unaccepted risk until a given time.",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The request body for updating risk acceptance",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "risk_type": {
                    "type": "string"
                  },
                  "accept_until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "accepted": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.response.finding"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/attack-paths/findings/{finding_id}/status": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "finding_id",
          "description": "Finding ID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "format": "int64"
          }
        }
      ],
      "put": {
        "operationId": "UpdateAttackPathFindingStatus",
        "summary": "Update finding status",
        "description": "Updates an open attack path finding status to active or in_progress.",
        "tags": [
          "Attack Paths",
          "Enterprise"
        ],
        "requestBody": {
          "description": "The requested open workflow status.",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "active",
                      "in_progress"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Finding status updated",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "id",
                        "status",
                        "updated_at"
                      ],
                      "properties": {
                        "id": {
                          "type": "integer",
                          "format": "int64"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "in_progress"
                          ]
                        },
                        "updated_at": {
                          "type": "string",
                          "format": "date-time"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "The finding is archived and cannot be updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/posture-stats": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetPostureStats",
        "summary": "Get Posture Statistics",
        "description": "Gets the history of database stats saved in the database",
        "tags": [
          "Risk Posture",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "sort_by",
            "description": "Sortable columns are `domain_sid`, `exposure_index`, `tier_zero_count`, `critical_risk_count`, `id`, `created_at`, `updated_at`, `deleted_at`.",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "from",
            "deprecated": true,
            "x-go-name": "fromDeprecated",
            "description": "Lower bound for created_at; to return posture stats starting at a specific date/time. This filter has been deprecated, please use created_at instead.",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "deprecated": true,
            "x-go-name": "toDeprecated",
            "description": "Upper bound for created_at; to return posture stats upto a specific date/time. This filter has been deprecated, please use created_at instead.",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "domain_sid",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "exposure_index",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "asset_group_tag_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "tier_zero_count",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "critical_risk_count",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "created_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "updated_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "deleted_at",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.risk-posture-stat"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/posture-history/{data_type}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "data_type",
          "description": "The type of posture data to return",
          "in": "path",
          "required": true,
          "schema": {
            "$ref": "#/components/schemas/enum.posture-history-type"
          }
        },
        {
          "$ref": "#/components/parameters/query.asset-group-tag-id"
        }
      ],
      "get": {
        "operationId": "PostureHistoryForEnvironments",
        "summary": "Get Posture History",
        "description": "Gets posture data count changes over a time period",
        "tags": [
          "Risk Posture",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "environments",
            "description": "Environment IDs",
            "in": "query",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (exclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.time-window"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "environments": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "data_type": {
                          "$ref": "#/components/schemas/enum.posture-history-type"
                        },
                        "data": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "date": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true
                              },
                              "value": {
                                "type": "number",
                                "format": "double",
                                "readOnly": true
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/asset-scores/zone-protected-asset-score": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "GetZoneProtectedAssetScore",
        "summary": "Get zone protected asset score",
        "description": "Gets a per-day series describing how much of a zone is free of open findings\nover the requested time range. For each day in the range, the score is the\nnumber of objects in the zone without an open finding divided by the total\nnumber of objects in the zone. Zones that attack path analysis does not run\nagainst yield an empty series.\n",
        "tags": [
          "Asset Scores",
          "Enterprise"
        ],
        "parameters": [
          {
            "name": "environments",
            "description": "Environment IDs",
            "in": "query",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "asset_group_tag_id",
            "description": "The asset group tag id of the zone requested",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "start",
            "description": "Beginning datetime of range (inclusive) in RFC-3339 format; Defaults to current datetime minus 30 days",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "description": "Ending datetime of range (exclusive) in RFC-3339 format; Defaults to current datetime",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/api.response.time-window"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "environments": {
                              "type": "array",
                              "description": "The environment IDs the caller has access to out of those requested",
                              "items": {
                                "type": "string"
                              }
                            },
                            "asset_group_tag_id": {
                              "type": "integer",
                              "description": "The asset group tag id of the zone requested"
                            },
                            "data": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "date": {
                                    "type": "string",
                                    "format": "date-time",
                                    "readOnly": true
                                  },
                                  "exposed_count": {
                                    "type": "integer",
                                    "format": "int64",
                                    "description": "Number of objects in the zone holding an open finding",
                                    "readOnly": true
                                  },
                                  "protected_count": {
                                    "type": "integer",
                                    "format": "int64",
                                    "description": "Number of objects in the zone without an open finding",
                                    "readOnly": true
                                  },
                                  "total_count": {
                                    "type": "integer",
                                    "format": "int64",
                                    "description": "Total number of objects in the zone",
                                    "readOnly": true
                                  },
                                  "value": {
                                    "type": "number",
                                    "format": "double",
                                    "description": "The protected share of the zone, `protected_count` divided by `total_count`",
                                    "readOnly": true
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    }
                  }
                },
                "examples": {
                  "Zone protected asset score": {
                    "value": {
                      "data": {
                        "start": "2026-08-01T00:00:00Z",
                        "end": "2026-08-04T00:00:00Z",
                        "environments": [
                          "S-1-5-21-1004336348-1177238915-682003330"
                        ],
                        "asset_group_tag_id": 1,
                        "data": [
                          {
                            "date": "2026-08-01T00:00:00Z",
                            "exposed_count": 120,
                            "protected_count": 880,
                            "total_count": 1000,
                            "value": 0.88
                          },
                          {
                            "date": "2026-08-02T00:00:00Z",
                            "exposed_count": 95,
                            "protected_count": 905,
                            "total_count": 1000,
                            "value": 0.905
                          },
                          {
                            "date": "2026-08-03T00:00:00Z",
                            "exposed_count": 80,
                            "protected_count": 922,
                            "total_count": 1002,
                            "value": 0.9201596806387226
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/meta/{object_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.object-id"
        }
      ],
      "get": {
        "operationId": "GetMetaEntity",
        "summary": "Get Meta entity info",
        "description": "Get info and counts for this Meta node.",
        "tags": [
          "Meta Entities",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "props": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "object"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-webhooks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAlertWebhooks",
        "summary": "List Alert Webhooks",
        "description": "Returns a paginated list of alert webhooks.",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `name`, `created_at`, `updated_at`, `health`. Default `name` ascending.",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "disabled",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          },
          {
            "name": "health",
            "in": "query",
            "description": "Filter by the webhook's rolling health score in [0, 1].",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.number"
            }
          },
          {
            "name": "attempts",
            "in": "query",
            "description": "Filter by the total attempts observed for the webhook.",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "name": "failures",
            "in": "query",
            "description": "Filter by the total failed attempts observed for the webhook.",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.integer"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          },
          {
            "name": "last_errored_at",
            "in": "query",
            "description": "Filter results by `last_errored_at` value. See filter schema details for valid predicates.",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          },
          {
            "name": "last_succeeded_at",
            "in": "query",
            "description": "Filter results by `last_succeeded_at` value. See filter schema details for valid predicates.",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "webhooks": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/model.alert-webhook"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateAlertWebhook",
        "summary": "Create Alert Webhook",
        "description": "Creates a new alert webhook (channel + webhook + HMAC secret in one\ntransaction). The generated HMAC secret is returned on this response only.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Request body for creating an alert webhook.",
                "required": [
                  "type",
                  "name",
                  "url"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "generic",
                      "slack",
                      "ms-teams"
                    ]
                  },
                  "name": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Must be https, http is not supported."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "description": "Response payload from creating an alert webhook. The newly generated HMAC\nsecret is included on this response only; subsequent reads of the webhook\ndo not expose the secret value.\n",
                      "properties": {
                        "webhook": {
                          "$ref": "#/components/schemas/model.alert-webhook"
                        },
                        "hmac_secret": {
                          "type": "string",
                          "description": "Base64-encoded HMAC secret used to sign outbound webhook payloads."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "409": {
            "description": "**Conflict**\nThe supplied `url` collides with an existing alert webhook\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-05-21T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "alert-webhooks",
                      "message": "An alert webhook with the supplied URL already exists."
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-webhooks/{alert_webhook_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.alert-webhook-id"
        }
      ],
      "get": {
        "operationId": "GetAlertWebhook",
        "summary": "Get Alert Webhook",
        "description": "Returns a single alert webhook by ID.",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "webhook": {
                          "$ref": "#/components/schemas/model.alert-webhook"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "patch": {
        "operationId": "UpdateAlertWebhook",
        "summary": "Update Alert Webhook",
        "description": "Partially updates an alert webhook by ID. Only fields present in the request body are modified.",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "minProperties": 1,
                "description": "Partial update for an alert webhook. At least one field is required. Only\nfields present in the request body are modified.\n",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "generic",
                      "slack",
                      "ms-teams"
                    ]
                  },
                  "disabled": {
                    "type": "boolean",
                    "description": "Set to `true` to disable the webhook (populates `disabled_at`/`disabled_by`),\n`false` to re-enable.\n"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "webhook": {
                          "$ref": "#/components/schemas/model.alert-webhook"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "**Conflict**\nThe supplied `url` collides with another alert webhook\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-05-21T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "alert-webhooks",
                      "message": "An alert webhook with the supplied URL already exists."
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteAlertWebhook",
        "summary": "Delete Alert Webhook",
        "description": "Deletes an alert webhook. Cascades to `alert_webhook_secrets`,\n`alert_subscriptions`, and `alert_attempts` rows that reference this\nwebhook.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-webhooks/{alert_webhook_id}/rotate-secret": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.alert-webhook-id"
        }
      ],
      "post": {
        "operationId": "RotateAlertWebhookSecret",
        "summary": "Rotate Alert Webhook Secret",
        "description": "Generates a new HMAC secret for an alert webhook. The new plaintext secret\nis returned on this response only and replaces the prior secret.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "webhook_secret": {
                          "type": "object",
                          "description": "Response payload from rotating an alert webhook's HMAC secret. The plaintext\nsecret value is returned only on rotation; subsequent reads of the webhook do\nnot expose it.\n",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "description": "The channel UUID for the webhook whose secret was rotated."
                            },
                            "hmac_secret": {
                              "type": "string",
                              "description": "The newly generated base64-encoded HMAC secret."
                            },
                            "created_at": {
                              "type": "string",
                              "format": "date-time"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-webhooks/{alert_webhook_id}/test": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "$ref": "#/components/parameters/path.alert-webhook-id"
        }
      ],
      "post": {
        "operationId": "TestAlertWebhook",
        "summary": "Test Alert Webhook",
        "description": "Synchronously dispatches a mock payload for the given `event_type` to the\nwebhook's target URL using the current HMAC secret. No `alert_attempts`\nrow is persisted. The handler returns `200` for both successful and failed\nupstream deliveries; the `status_code` and `error` fields in the response\nbody surface the upstream outcome.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Request body for dispatching a mock payload to an alert webhook.",
                "required": [
                  "event_type",
                  "version"
                ],
                "properties": {
                  "event_type": {
                    "type": "string",
                    "description": "The alert event type to mock in the dispatched payload. The server builds\na representative payload for the given type using the webhook's current\nHMAC secret.\n"
                  },
                  "version": {
                    "type": "integer",
                    "description": "Payload data version for the supplied `event_type`. Must be one of\nthe data versions advertised for that type by\n`GET /api/v2/alert-event-types`.\n"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "description": "Result of dispatching a mock payload to an alert webhook. The handler returns\nthis body with a `200` status code on both successful and failed upstream\ndeliveries; the `status_code` and `error` fields surface the upstream outcome.\n",
                      "properties": {
                        "status_code": {
                          "type": "integer",
                          "description": "HTTP status code returned by the webhook target.",
                          "nullable": true
                        },
                        "error": {
                          "$ref": "#/components/schemas/null.string.response"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-events": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAlertEvents",
        "summary": "List Alert Events",
        "description": "Returns a paginated list of alert events. Events are system-generated and read-only via the API.",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `created_at`, `attempts_queued_at`. Default `-created_at` (most recent first).",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Supported operators are `eq` and `neq`. Must provide valid alert event types.",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "name": "delivered",
            "in": "query",
            "description": "When set to `false`, returns only events with `attempts_queued_at IS NULL`\n(events that have not yet had delivery attempts queued).\n",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "events": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/model.alert-event"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-events/{alert_event_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "alert_event_id",
          "description": "ID of an alert event.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid",
            "description": "uuidv7"
          }
        }
      ],
      "get": {
        "operationId": "GetAlertEvent",
        "summary": "Get Alert Event",
        "description": "Returns a single alert event by ID.",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "event": {
                          "$ref": "#/components/schemas/model.alert-event"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-event-types": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAlertEventTypes",
        "summary": "List Alert Event Types",
        "description": "Returns the list of alert event types registered with the system along with\nthe payload schema versions supported for each type. The response is not\npaginated or filtered.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "event_types": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/model.alert-event-type"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alerts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAlerts",
        "summary": "List Alerts",
        "description": "Returns a paginated list of alerts with their embedded subscriptions.",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `name`, `created_at`, `updated_at`. Default `name` ascending.",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.string"
            }
          },
          {
            "name": "disabled",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          },
          {
            "$ref": "#/components/parameters/query.updated-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "alerts": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/model.alert"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "post": {
        "operationId": "CreateAlert",
        "summary": "Create Alert",
        "description": "Creates a new alert with the supplied subscription bindings. The\n`subscriptions` array is required but may be empty.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Request body for creating an alert. The `subscriptions` array is required but\nmay be empty to create an alert with no channel bindings.\n",
                "required": [
                  "name",
                  "subscriptions"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "subscriptions": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/model.alert-subscription-request"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "alert": {
                          "$ref": "#/components/schemas/model.alert"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "409": {
            "description": "**Conflict**\nThe supplied `name` collides with an existing alert\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-05-21T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "alerts",
                      "message": "An alert with the supplied name already exists."
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alerts/{alert_id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        },
        {
          "name": "alert_id",
          "description": "ID of an alert.",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid",
            "description": "uuidv4"
          }
        }
      ],
      "get": {
        "operationId": "GetAlert",
        "summary": "Get Alert",
        "description": "Returns a single alert by ID with its embedded subscriptions.",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "alert": {
                          "$ref": "#/components/schemas/model.alert"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "patch": {
        "operationId": "UpdateAlert",
        "summary": "Update Alert",
        "description": "Partially updates an alert by ID. All top-level fields are optional. If\n`subscriptions` is present, the supplied array fully replaces the current\nsubscription set for this alert in one transaction (delete-omitted,\ninsert-new, update-existing by composite key `(channel_id, event_type)`).\nOmit `subscriptions` to leave bindings unchanged.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "minProperties": 1,
                "description": "Partial update for an alert. All fields are optional. If `subscriptions` is\npresent, the supplied array fully replaces the current subscription set for\nthis alert in one transaction (delete-omitted / insert-new / update-existing\nby composite key `(channel_id, event_type)`). Omit `subscriptions` to leave\nbindings unchanged.\n",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "disabled": {
                    "type": "boolean"
                  },
                  "subscriptions": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/model.alert-subscription-request"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "alert": {
                          "$ref": "#/components/schemas/model.alert"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "409": {
            "description": "**Conflict**\nThe supplied `name` collides with an existing alert\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.error-wrapper"
                },
                "example": {
                  "http_status": 409,
                  "timestamp": "2026-05-21T19:27:43.866Z",
                  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "errors": [
                    {
                      "context": "alerts",
                      "message": "An alert with the supplied name already exists."
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      },
      "delete": {
        "operationId": "DeleteAlert",
        "summary": "Delete Alert",
        "description": "Deletes an alert. Cascades to `alert_subscriptions` and `alert_attempts`\nrows referencing this alert.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/no-content"
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-attempts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "get": {
        "operationId": "ListAlertAttempts",
        "summary": "List Alert Attempts",
        "description": "Returns a paginated list of alert delivery attempts. Composite-key filters\n(`alert_id`, `channel_id`, `event_id`) compose to support per-alert,\nper-webhook, per-event, and single-row views.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/query.skip"
          },
          {
            "$ref": "#/components/parameters/query.limit"
          },
          {
            "name": "sort_by",
            "in": "query",
            "description": "Sortable columns are `created_at`, `succeeded_at`, `next_attempt_at`,\n`attempts`. Default `-created_at` (most recent first).\n",
            "schema": {
              "$ref": "#/components/schemas/api.params.query.sort-by"
            }
          },
          {
            "name": "alert_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          },
          {
            "name": "channel_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          },
          {
            "name": "event_id",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
            }
          },
          {
            "name": "succeeded",
            "in": "query",
            "description": "When set to `true`, returns only rows with `succeeded_at IS NOT NULL`.\n",
            "schema": {
              "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
            }
          },
          {
            "$ref": "#/components/parameters/query.created-at"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/api.response.pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "object",
                          "properties": {
                            "attempts": {
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/model.alert-attempt"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    },
    "/api/v2/alert-attempts/retry": {
      "parameters": [
        {
          "$ref": "#/components/parameters/header.prefer"
        }
      ],
      "post": {
        "operationId": "RetryAlertAttempt",
        "summary": "Retry Alert Attempt",
        "description": "Manually re-queues an existing alert delivery attempt. The composite key\nin the request body identifies the specific attempt (alert, event, channel/webhook) to retry. The attempt is ignored\nwhen the attempt has already succeeded, or when the alert, subscription, or channel/webhook is disabled.\n",
        "tags": [
          "Alerts",
          "Enterprise"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Request body for manually re-queueing an alert delivery attempt. The supplied\ncomposite key identifies the row to retry; the handler is a no-op when the\nattempt has already succeeded (`succeeded_at IS NOT NULL`) or when the alert, subscription, or channel/webhook is disabled.\n",
                "required": [
                  "alert_id",
                  "channel_id",
                  "event_id"
                ],
                "properties": {
                  "alert_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "channel_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "event_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "alert_attempt": {
                          "$ref": "#/components/schemas/model.alert-attempt"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad-request"
          },
          "401": {
            "$ref": "#/components/responses/unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/forbidden"
          },
          "404": {
            "$ref": "#/components/responses/not-found"
          },
          "429": {
            "$ref": "#/components/responses/too-many-requests"
          },
          "500": {
            "$ref": "#/components/responses/internal-server-error"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "JWTBearerToken": {
        "description": "`Authorization: Bearer $JWT_TOKEN`\n",
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "SignedRequest": {
        "description": "`Authorization: bhesignature $TOKEN_ID`\n",
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
      },
      "RequestDate": {
        "description": "`RequestDate: $RFC3339_DATETIME`\n",
        "type": "apiKey",
        "name": "RequestDate",
        "in": "header"
      },
      "HMACSignature": {
        "description": "`Signature: $BASE64ENCODED_HMAC_SIGNATURE`\n",
        "type": "apiKey",
        "name": "Signature",
        "in": "header"
      }
    },
    "parameters": {
      "header.prefer": {
        "name": "Prefer",
        "description": "Prefer header, used to specify a custom timeout in seconds using the wait parameter as per RFC7240. Passing in wait=-1 bypasses all timeout limits when the feature is enabled.",
        "in": "header",
        "required": false,
        "schema": {
          "type": "string",
          "default": "wait=30",
          "pattern": "^wait=(-1|[0-9]+)$"
        }
      },
      "query.created-at": {
        "name": "created_at",
        "in": "query",
        "description": "Filter results by `created_at` value. See filter schema details for valid predicates.",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.time"
        }
      },
      "query.updated-at": {
        "name": "updated_at",
        "in": "query",
        "description": "Filter results by `updated_at` value. See filter schema details for valid predicates.",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.time"
        }
      },
      "query.deleted-at": {
        "name": "deleted_at",
        "in": "query",
        "description": "Filter results by `deleted_at` value. See filter schema details for valid predicates.",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.time"
        }
      },
      "query.skip": {
        "name": "skip",
        "description": "This query parameter is used for determining the number of objects to skip in pagination.",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.query.skip"
        }
      },
      "query.limit": {
        "name": "limit",
        "description": "This query parameter is used for setting an upper limit of objects returned in paginated responses.",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.query.limit"
        }
      },
      "query.environments": {
        "name": "environments",
        "description": "Environment IDs to filter response by",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.query.environments"
        }
      },
      "path.object-id": {
        "name": "object_id",
        "description": "The object id of the entity being operated on.",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "description": "The unique object identifier"
        }
      },
      "query.hydrate-counts": {
        "description": "Include counts of related entities. Default value is `true`.",
        "name": "counts",
        "in": "query",
        "schema": {
          "type": "boolean",
          "default": true
        }
      },
      "query.entity.skip": {
        "name": "skip",
        "description": "The number of entries to skip for pagination. Only available for `type=list`.",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 0
        }
      },
      "query.entity.limit": {
        "name": "limit",
        "description": "The number of entries to limit in the response. Only available for `type=list`.",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 10
        }
      },
      "query.entity.type": {
        "name": "type",
        "description": "The type of return data requested. If no type is provided, query will default to `list`.\nThe only supported type is `list`, but the unsupported `graph` type can be used.\nSome entity query endpoints do not support the `graph` type. For those interested in\nusing the undocumented graph type parameter, the response type is described in the schema\n`model.bh-graph.graph`.\n",
        "in": "query",
        "schema": {
          "type": "string",
          "default": "list",
          "enum": [
            "list",
            "graph"
          ]
        }
      },
      "query.entity.sort-by": {
        "name": "sort_by",
        "in": "query",
        "description": "Sort by column. Can be used multiple times; prepend a hyphen for descending order. Columns available\nfor sorting are dependent on the entity object kind.\n",
        "schema": {
          "$ref": "#/components/schemas/api.params.query.sort-by"
        }
      },
      "query.asset-group-tag-id": {
        "name": "asset_group_tag_id",
        "description": "The asset group tag id of the zone requested. If not supplied, the asset group tag id associated with 'Tier Zero' and 'Hygiene' is used.",
        "in": "query",
        "schema": {
          "type": "integer"
        }
      },
      "query.clients.hydrate-domains": {
        "name": "hydrate_domains",
        "description": "When a value of `true` is passed, any Domains associated with scheduled and finished jobs for each client will have expanded properties including `name` and `type`. When a value of `false` is passed, these same Domains will only return as a list of `objectid`s.",
        "in": "query",
        "schema": {
          "type": "boolean",
          "default": true
        }
      },
      "query.clients.hydrate-ous": {
        "name": "hydrate_ous",
        "description": "When a value of `true` is passed, any OUs associated with scheduled and finished jobs for each client will have expanded properties including `name` and `type`. When a value of `false` is passed, these same OUs will only return as a list of `objectid`s.",
        "in": "query",
        "schema": {
          "type": "boolean",
          "default": true
        }
      },
      "query.clients.job.log-path": {
        "name": "log_path",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.string"
        }
      },
      "query.clients.job.session-collection": {
        "name": "session_collection",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
        }
      },
      "query.clients.job.local-group-collection": {
        "name": "local_group_collection",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
        }
      },
      "query.clients.job.cert-services-collection": {
        "name": "cert_services_collection",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
        }
      },
      "query.clients.job.ca-registry-collection": {
        "name": "ca_registry_collection",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
        }
      },
      "query.clients.job.dc-registry-collection": {
        "name": "dc_registry_collection",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
        }
      },
      "query.clients.job.ad-structure-collection": {
        "name": "ad_structure_collection",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.boolean"
        }
      },
      "query.clients.job.domain-controller": {
        "name": "domain_controller",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.string"
        }
      },
      "query.clients.job.status": {
        "name": "status",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.string"
        }
      },
      "query.clients.job.event-title": {
        "name": "event_title",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.string"
        }
      },
      "query.clients.job.client-id": {
        "name": "client_id",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.uuid"
        }
      },
      "query.clients.job.event-id": {
        "name": "event_id",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.integer"
        }
      },
      "query.clients.job.execution-time": {
        "name": "execution_time",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.time"
        }
      },
      "query.clients.job.start-time": {
        "name": "start_time",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.time"
        }
      },
      "query.clients.job.end-time": {
        "name": "end_time",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.time"
        }
      },
      "query.clients.job.last-ingest": {
        "name": "last_ingest",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/api.params.predicate.filter.time"
        }
      },
      "path.alert-webhook-id": {
        "name": "alert_webhook_id",
        "description": "ID of an alert webhook.",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid",
          "description": "uuidv4"
        }
      }
    },
    "schemas": {
      "api.error-detail": {
        "type": "object",
        "properties": {
          "context": {
            "type": "string",
            "description": "The context in which the error took place"
          },
          "message": {
            "type": "string",
            "description": "A human-readable description of the error"
          }
        }
      },
      "api.error-wrapper": {
        "type": "object",
        "description": "",
        "properties": {
          "http_status": {
            "type": "integer",
            "description": "The HTTP status code",
            "minimum": 100,
            "maximum": 600
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "The RFC-3339 timestamp in which the error response was sent"
          },
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the request that failed"
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/api.error-detail"
            },
            "description": "The error(s) that occurred from processing the request"
          }
        }
      },
      "model.components.uuid": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "readOnly": true,
            "description": "This is the unique identifier for this object."
          }
        }
      },
      "null.time": {
        "type": "object",
        "properties": {
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "An RFC-3339 formatted string"
          },
          "valid": {
            "description": "Valid is true if `time` is not `null`.",
            "type": "boolean"
          }
        }
      },
      "model.components.timestamps": {
        "type": "object",
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "deleted_at": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/null.time"
              }
            ]
          }
        }
      },
      "null.int32": {
        "type": "object",
        "properties": {
          "int32": {
            "type": "integer",
            "format": "int32"
          },
          "valid": {
            "description": "Valid is true if `int32` is not `null`.",
            "type": "boolean"
          }
        }
      },
      "model.components.int32.id": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "readOnly": true,
            "description": "This is the unique identifier for this object."
          }
        }
      },
      "model.auth-secret": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "digest_method": {
                "type": "string"
              },
              "expires_at": {
                "type": "string",
                "format": "date-time"
              },
              "totp_activated": {
                "type": "boolean"
              }
            }
          }
        ]
      },
      "model.permission": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "authority": {
                "type": "string",
                "readOnly": true
              },
              "name": {
                "type": "string",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.role": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "readOnly": true
              },
              "description": {
                "type": "string",
                "readOnly": true
              },
              "permissions": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "$ref": "#/components/schemas/model.permission"
                }
              }
            }
          }
        ]
      },
      "null.string": {
        "type": "object",
        "properties": {
          "string": {
            "type": "string"
          },
          "valid": {
            "description": "Valid is true if `string` is not `null`",
            "type": "boolean"
          }
        }
      },
      "model.user": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.uuid"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "saml_provider_id": {
                "readOnly": true,
                "deprecated": true,
                "description": "Deprecated. Use sso_provider_id instead.",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.int32"
                  }
                ]
              },
              "sso_provider_id": {
                "readOnly": true,
                "description": "ID of the SSO provider for this user",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.int32"
                  }
                ]
              },
              "AuthSecret": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/model.auth-secret"
                  }
                ]
              },
              "roles": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "$ref": "#/components/schemas/model.role"
                }
              },
              "first_name": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              },
              "last_name": {
                "$ref": "#/components/schemas/null.string"
              },
              "email_address": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              },
              "principal_name": {
                "type": "string",
                "readOnly": true
              },
              "last_login": {
                "type": "string",
                "readOnly": true,
                "format": "date-time"
              },
              "is_disabled": {
                "type": "boolean",
                "readOnly": true
              },
              "eula_accepted": {
                "type": "boolean",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.client-schedule": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "client_id": {
                "type": "string",
                "format": "uuid",
                "readOnly": true
              },
              "rrule": {
                "type": "string"
              },
              "session_collection": {
                "type": "boolean"
              },
              "local_group_collection": {
                "type": "boolean"
              },
              "ad_structure_collection": {
                "type": "boolean"
              },
              "cert_services_collection": {
                "type": "boolean"
              },
              "ca_registry_collection": {
                "type": "boolean"
              },
              "dc_registry_collection": {
                "type": "boolean"
              },
              "all_trusted_domains": {
                "type": "boolean"
              },
              "next_scheduled_at": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "ous": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        ]
      },
      "null.uuid": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid"
          },
          "valid": {
            "description": "Valid is true if `uuid` is not `null`.",
            "type": "boolean"
          }
        }
      },
      "model.auth-token": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.uuid"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "user_id": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.uuid"
                  }
                ]
              },
              "name": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              },
              "key": {
                "type": "string",
                "readOnly": true
              },
              "hmac_method": {
                "type": "string",
                "readOnly": true
              },
              "last_access": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "created_by": {
                "description": "The ID of the user who created the token",
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.uuid"
                  }
                ]
              }
            }
          }
        ]
      },
      "null.int64": {
        "type": "object",
        "properties": {
          "int64": {
            "type": "integer",
            "format": "int64"
          },
          "valid": {
            "description": "Valid is true if `int64` is not `null`.",
            "type": "boolean"
          }
        }
      },
      "model.components.int64.id": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "description": "This is the unique identifier for this object."
          }
        }
      },
      "enum.job-status": {
        "type": "integer",
        "description": "This enum describes the current status of a Job. Values are:\n- `-1` Invalid\n- `0` Ready\n- `1` Running\n- `2` Complete\n- `3` Canceled\n- `4` Timed Out\n- `5` Failed\n- `6` Ingesting\n- `7` Analyzing\n- `8` Partially Complete\n",
        "enum": [
          -1,
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8
        ]
      },
      "model.domain-collection-result": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "job_id": {
                "type": "integer",
                "format": "int64"
              },
              "domain_name": {
                "description": "Name of the domain that was enumerated",
                "type": "string"
              },
              "success": {
                "description": "A boolean value indicating whether the domain enumeration succeeded",
                "type": "boolean"
              },
              "message": {
                "description": "A status message for a domain enumeration result",
                "type": "string"
              },
              "user_count": {
                "description": "A count of users enumerated",
                "type": "integer"
              },
              "group_count": {
                "description": "A count of groups enumerated",
                "type": "integer"
              },
              "computer_count": {
                "description": "A count of computers enumerated",
                "type": "integer"
              },
              "gpo_count": {
                "description": "A count of gpos enumerated",
                "type": "integer"
              },
              "ou_count": {
                "description": "A count of ous enumerated",
                "type": "integer"
              },
              "container_count": {
                "description": "A count of containers enumerated",
                "type": "integer"
              },
              "aiaca_count": {
                "description": "A count of aiacas enumerated",
                "type": "integer"
              },
              "rootca_count": {
                "description": "A count of rootcas enumerated",
                "type": "integer"
              },
              "enterpriseca_count": {
                "description": "A count of enterprisecas enumerated",
                "type": "integer"
              },
              "ntauthstore_count": {
                "description": "A count of ntauthstores enumerated",
                "type": "integer"
              },
              "certtemplate_count": {
                "description": "A count of certtemplates enumerated",
                "type": "integer"
              },
              "deleted_count": {
                "description": "A count of deleted objects enumerated",
                "type": "integer"
              }
            }
          }
        ]
      },
      "model.client-scheduled-job": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "client_id": {
                "type": "string",
                "format": "uuid",
                "readOnly": true
              },
              "client_name": {
                "type": "string",
                "readOnly": true
              },
              "event_id": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.int32"
                  }
                ]
              },
              "status": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/enum.job-status"
                  }
                ]
              },
              "statusMessage": {
                "type": "string",
                "readOnly": true
              },
              "start_time": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "end_time": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "log_path": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              },
              "session_collection": {
                "type": "boolean"
              },
              "local_group_collection": {
                "type": "boolean"
              },
              "ad_structure_collection": {
                "type": "boolean"
              },
              "cert_services_collection": {
                "type": "boolean"
              },
              "ca_registry_collection": {
                "type": "boolean"
              },
              "dc_registry_collection": {
                "type": "boolean"
              },
              "all_trusted_domains": {
                "type": "boolean"
              },
              "domain_controller": {
                "$ref": "#/components/schemas/null.string"
              },
              "event_title": {
                "type": "string",
                "readOnly": true
              },
              "last_ingest": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "ous": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "type": "string"
                }
              },
              "domains": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "type": "string"
                }
              },
              "domain_results": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "$ref": "#/components/schemas/model.domain-collection-result"
                }
              }
            }
          }
        ]
      },
      "enum.client-type": {
        "type": "string",
        "description": "This enum describes the collector client type.",
        "enum": [
          "sharphound",
          "azurehound",
          "openhound"
        ]
      },
      "model.client": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.uuid"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "readOnly": true
              },
              "ip_address": {
                "type": "string",
                "format": "ipv4",
                "readOnly": true
              },
              "hostname": {
                "type": "string",
                "format": "hostname",
                "readOnly": true
              },
              "configured_user": {
                "type": "string",
                "readOnly": true
              },
              "last_checkin": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "events": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "$ref": "#/components/schemas/model.client-schedule"
                }
              },
              "token": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/model.auth-token"
                  }
                ]
              },
              "current_job_id": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.int64"
                  }
                ]
              },
              "current_job": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/model.client-scheduled-job"
                  }
                ]
              },
              "completed_job_count": {
                "type": "integer",
                "format": "int32",
                "readOnly": true
              },
              "domain_controller": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              },
              "version": {
                "type": "string",
                "readOnly": true
              },
              "user_sid": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              },
              "type": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/enum.client-type"
                  }
                ]
              },
              "provided_identifier": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              }
            }
          }
        ]
      },
      "api.response.authenticated-requester": {
        "type": "object",
        "properties": {
          "data": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/model.user"
              },
              {
                "$ref": "#/components/schemas/model.client"
              }
            ]
          }
        }
      },
      "model.saml-provider": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "readOnly": true
              },
              "display_name": {
                "type": "string",
                "readOnly": true
              },
              "idp_issuer_uri": {
                "type": "string",
                "readOnly": true
              },
              "idp_sso_uri": {
                "type": "string",
                "readOnly": true
              },
              "principal_attribute_mappings": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "type": "string"
                }
              },
              "sp_issuer_uri": {
                "type": "string",
                "readOnly": true
              },
              "sp_sso_uri": {
                "type": "string",
                "readOnly": true
              },
              "sp_metadata_uri": {
                "type": "string",
                "readOnly": true
              },
              "sp_acs_uri": {
                "type": "string",
                "readOnly": true
              },
              "sso_provider_id": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.int32"
                  }
                ]
              }
            }
          }
        ]
      },
      "model.saml-sign-on-endpoint": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "readOnly": true
          },
          "idp_url": {
            "type": "string",
            "readOnly": true
          }
        }
      },
      "model.oidc-provider": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "client_id": {
                "type": "string"
              },
              "issuer": {
                "type": "string"
              },
              "sso_provider_id": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        ]
      },
      "model.auth-provider": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "description": "Unique identifier for the SSO provider"
          },
          "name": {
            "type": "string",
            "description": "Name of the SSO provider"
          },
          "type": {
            "type": "string",
            "description": "Type of SSO provider (SAML or OIDC)"
          },
          "slug": {
            "type": "string",
            "description": "URL-friendly identifier for the provider"
          },
          "details": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/model.oidc-provider"
              },
              {
                "$ref": "#/components/schemas/model.saml-provider"
              }
            ]
          }
        }
      },
      "api.params.query.sort-by": {
        "type": "string",
        "description": "Sort by column. Can be used multiple times; prepend a hyphen for descending order.\nSee parameter description for details about which columns are sortable.\n"
      },
      "api.params.predicate.filter.string": {
        "type": "string",
        "pattern": "^((eq|~eq|neq):)?[^:]+$",
        "description": "Filter results by column string value. Valid filter predicates are `eq`, `~eq`, `neq`.\n"
      },
      "api.params.predicate.filter.integer": {
        "type": "string",
        "pattern": "^((eq|neq|gt|gte|lt|lte):)?-?[0-9]+$",
        "description": "Filter results by column integer value. Valid filter predicates are `eq`, `neq`, `gt`, `gte`, `lt`, `lte`.\n"
      },
      "api.params.predicate.filter.time": {
        "type": "string",
        "pattern": "^((eq|neq|gt|gte|lt|lte):)?[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt][0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]{1,9})?([Zz]|-[0-9]{2}:[0-9]{2})$",
        "description": "Filter results by column timestamp value formatted as an RFC-3339 string.\nValid filter predicates are `eq`, `neq`, `gt`, `gte`, `lt`, `lte`.\n"
      },
      "api.params.predicate.filter.uuid": {
        "type": "string",
        "pattern": "^((eq|neq):)?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$",
        "description": "Filter results by column string-formatted uuid value. Valid filter predicates are `eq`, `neq`.\n"
      },
      "api.requests.user.update": {
        "type": "object",
        "properties": {
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "email_address": {
            "type": "string",
            "format": "email"
          },
          "principal": {
            "type": "string"
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "saml_provider_id": {
            "type": "string",
            "deprecated": true,
            "description": "Deprecated. Use sso_provider_id instead."
          },
          "sso_provider_id": {
            "allOf": [
              {
                "$ref": "#/components/schemas/null.int32"
              }
            ],
            "description": "ID of the SSO provider for this user"
          },
          "is_disabled": {
            "type": "boolean"
          }
        }
      },
      "api.requests.user.set-secret": {
        "type": "object",
        "properties": {
          "secret": {
            "type": "string"
          },
          "needs_password_reset": {
            "type": "boolean"
          }
        }
      },
      "model.users-minimal": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.uuid"
          },
          {
            "type": "object",
            "properties": {
              "first_name": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string"
                  }
                ]
              },
              "last_name": {
                "$ref": "#/components/schemas/null.string"
              },
              "email": {
                "type": "string",
                "readOnly": true
              }
            }
          }
        ]
      },
      "enum.mfa-activation-status": {
        "type": "string",
        "description": "The activation status of multi-factor authentication on a BloodHound user.",
        "enum": [
          "activated",
          "deactivated",
          "pending"
        ]
      },
      "model.collector-version": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string"
          },
          "sha256sum": {
            "type": "string"
          },
          "deprecated": {
            "type": "boolean"
          }
        }
      },
      "model.collector-manifest": {
        "type": "object",
        "properties": {
          "latest": {
            "type": "string"
          },
          "versions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.collector-version"
            }
          }
        }
      },
      "model.version-meta": {
        "type": "object",
        "properties": {
          "major": {
            "type": "integer"
          },
          "minor": {
            "type": "integer"
          },
          "patch": {
            "type": "integer"
          },
          "prerelease": {
            "type": "string"
          }
        }
      },
      "model.kennel-asset": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "download_url": {
            "type": "string"
          },
          "checksum_download_url": {
            "type": "string"
          },
          "os": {
            "type": "string"
          },
          "arch": {
            "type": "string"
          }
        }
      },
      "model.kennel-version": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string"
          },
          "version_meta": {
            "$ref": "#/components/schemas/model.version-meta"
          },
          "release_date": {
            "type": "string",
            "format": "date-time"
          },
          "release_assets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.kennel-asset"
            }
          }
        }
      },
      "model.kennel-manifest": {
        "type": "object",
        "properties": {
          "sharphound": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.kennel-version"
            }
          },
          "azurehound": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.kennel-version"
            }
          }
        }
      },
      "model.kennel-enterprise-manifest": {
        "type": "object",
        "properties": {
          "sharphound_enterprise": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.kennel-version"
            }
          },
          "azurehound_enterprise": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.kennel-version"
            }
          }
        }
      },
      "api.params.query.skip": {
        "type": "integer",
        "minimum": 0,
        "description": "The number of items to skip in a paginated response."
      },
      "api.params.query.limit": {
        "type": "integer",
        "minimum": 0,
        "description": "The limit of results requested by the client."
      },
      "api.response.pagination": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 0,
            "description": "The total number of results."
          },
          "skip": {
            "$ref": "#/components/schemas/api.params.query.skip"
          },
          "limit": {
            "$ref": "#/components/schemas/api.params.query.limit"
          }
        }
      },
      "model.file-upload-job": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "user_id": {
                "type": "string",
                "format": "uuid"
              },
              "user_email_address": {
                "type": "string",
                "format": "email"
              },
              "status": {
                "$ref": "#/components/schemas/enum.job-status"
              },
              "status_message": {
                "type": "string"
              },
              "start_time": {
                "type": "string",
                "format": "date-time"
              },
              "end_time": {
                "type": "string",
                "format": "date-time"
              },
              "last_ingest": {
                "type": "string",
                "format": "date-time"
              },
              "total_files": {
                "type": "integer"
              },
              "failed_files": {
                "type": "integer"
              }
            }
          }
        ]
      },
      "model.file-upload-job.completed-tasks": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "file_name": {
                "type": "string"
              },
              "parent_file_name": {
                "type": "string"
              },
              "errors": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        ]
      },
      "model.custom-node.config": {
        "type": "object",
        "properties": {
          "icon": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "color": {
                "type": "string"
              }
            }
          }
        }
      },
      "model.custom-node": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "kindName": {
            "type": "string"
          },
          "config": {
            "$ref": "#/components/schemas/model.custom-node.config"
          }
        }
      },
      "model.search-result": {
        "type": "object",
        "properties": {
          "objectid": {
            "type": "string",
            "readOnly": true
          },
          "type": {
            "type": "string",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "readOnly": true
          },
          "distinguishedname": {
            "type": "string",
            "readOnly": true
          },
          "system_tags": {
            "type": "string",
            "readOnly": true
          }
        }
      },
      "null.boolean": {
        "type": "object",
        "properties": {
          "bool": {
            "type": "boolean"
          },
          "valid": {
            "description": "Valid is true if `boolean` is not `null`",
            "type": "boolean"
          }
        }
      },
      "model.asset-group-tag": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "type": {
            "type": "integer"
          },
          "kind_id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_by": {
            "type": "string"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_by": {
            "type": "string"
          },
          "position": {
            "$ref": "#/components/schemas/null.int32"
          },
          "require_certify": {
            "$ref": "#/components/schemas/null.boolean"
          },
          "analysis_enabled": {
            "$ref": "#/components/schemas/null.boolean"
          },
          "glyph": {
            "$ref": "#/components/schemas/null.string"
          }
        }
      },
      "model.domain-selector": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "readOnly": true
          },
          "id": {
            "type": "string",
            "readOnly": true
          },
          "collected": {
            "type": "boolean",
            "readOnly": true
          },
          "environment_kind_id": {
            "type": "integer",
            "readOnly": true,
            "description": "OpenGraph environment kind ID for custom environments"
          },
          "environment_kind_name": {
            "type": "string",
            "readOnly": true,
            "description": "OpenGraph environment kind name for custom environments"
          },
          "environment_kind_display_name": {
            "type": "string",
            "readOnly": true,
            "description": "Human-readable display name for the node's environment kind"
          },
          "impactValue": {
            "type": "integer",
            "readOnly": true,
            "description": "Enterprise Only"
          },
          "hygiene_attack_paths": {
            "type": "integer",
            "readOnly": true,
            "description": "Enterprise Only"
          },
          "exposures": {
            "type": "array",
            "readOnly": true,
            "description": "Enterprise Only",
            "items": {
              "type": "object",
              "properties": {
                "exposure_percent": {
                  "type": "integer",
                  "readOnly": true
                },
                "asset_group_tag": {
                  "$ref": "#/components/schemas/model.asset-group-tag"
                }
              }
            }
          }
        }
      },
      "enum.audit-log-status": {
        "type": "string",
        "enum": [
          "intent",
          "success",
          "failure"
        ]
      },
      "model.audit-log": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "type": "object",
            "properties": {
              "created_at": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "actor_id": {
                "type": "string",
                "format": "uuid",
                "readOnly": true
              },
              "actor_name": {
                "type": "string",
                "readOnly": true
              },
              "actor_email": {
                "type": "string",
                "format": "email",
                "readOnly": true
              },
              "action": {
                "type": "string",
                "readOnly": true
              },
              "fields": {
                "type": "object",
                "readOnly": true
              },
              "request_id": {
                "type": "string",
                "format": "uuid",
                "readOnly": true
              },
              "source_ip_address": {
                "type": "string",
                "format": "ipv4",
                "readOnly": true
              },
              "commit_id": {
                "type": "string",
                "format": "uuid",
                "readOnly": true
              },
              "status": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/enum.audit-log-status"
                  }
                ]
              }
            }
          }
        ]
      },
      "model.app-config-param": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "type": "string"
              },
              "value": {
                "type": "object"
              },
              "name": {
                "type": "string",
                "readOnly": true
              },
              "description": {
                "type": "string",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.feature-flag": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "type": "string",
                "readOnly": true
              },
              "name": {
                "type": "string",
                "readOnly": true
              },
              "description": {
                "type": "string",
                "readOnly": true
              },
              "enabled": {
                "type": "boolean",
                "readOnly": true
              },
              "user_updatable": {
                "type": "boolean",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.asset-group-selector": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "asset_group_id": {
                "type": "integer",
                "format": "int32"
              },
              "name": {
                "type": "string"
              },
              "selector": {
                "type": "string"
              },
              "system_selector": {
                "type": "boolean"
              }
            }
          }
        ]
      },
      "model.asset-group": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "tag": {
                "type": "string"
              },
              "system_group": {
                "type": "boolean",
                "readOnly": true
              },
              "selectors": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "$ref": "#/components/schemas/model.asset-group-selector"
                }
              },
              "member_count": {
                "type": "integer",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.asset-group-collection-entry": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "asset_group_collection_id": {
                "type": "integer",
                "format": "int64",
                "writeOnly": true
              },
              "object_id": {
                "type": "string",
                "readOnly": true
              },
              "node_label": {
                "type": "string",
                "readOnly": true
              },
              "properties": {
                "type": "object",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.asset-group-collection": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "entries": {
                "type": "array",
                "readOnly": true,
                "items": {
                  "$ref": "#/components/schemas/model.asset-group-collection-entry"
                }
              }
            }
          }
        ]
      },
      "model.asset-group-selector-spec": {
        "type": "object",
        "properties": {
          "selector_name": {
            "type": "string"
          },
          "sid": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "add",
              "remove"
            ]
          }
        }
      },
      "model.asset-group-member": {
        "type": "object",
        "properties": {
          "asset_group_id": {
            "type": "integer"
          },
          "object_id": {
            "type": "string"
          },
          "primary_kind": {
            "type": "string"
          },
          "kinds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "environment_id": {
            "type": "string"
          },
          "environment_kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "custom_member": {
            "type": "boolean"
          }
        }
      },
      "model.asset-group-tags-member": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "object_id": {
            "type": "string"
          },
          "environment_id": {
            "type": "string"
          },
          "primary_kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "properties": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "integer"
          }
        }
      },
      "model.asset-group-tags-selector-seed": {
        "type": "object",
        "properties": {
          "type": {
            "type": "integer",
            "description": "The type of selector, valid types are 1 - object id or 2 - cypher.",
            "enum": [
              1,
              2
            ]
          },
          "value": {
            "description": "The string value representing either an objectid or cypher query depending on the selector type.",
            "type": "string"
          }
        }
      },
      "model.asset-group-tags-selector-base": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "auto_certify": {
            "type": "integer",
            "enum": [
              0,
              1,
              2
            ],
            "description": "auto_certify must be an input value of 0 (Disabled), 1 (AllMembers), or 2 (SeedsOnly)"
          },
          "seeds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.asset-group-tags-selector-seed"
            }
          }
        }
      },
      "null.time.response": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "description": "An RFC-3339 formatted string"
      },
      "null.string.response": {
        "type": "string",
        "nullable": true
      },
      "model.asset-group-tags-selector-response": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.asset-group-tags-selector-base"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "asset_group_tag_id": {
                "type": "integer"
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "created_by": {
                "type": "string"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "updated_by": {
                "type": "string"
              },
              "disabled_at": {
                "$ref": "#/components/schemas/null.time.response"
              },
              "disabled_by": {
                "$ref": "#/components/schemas/null.string.response"
              },
              "is_default": {
                "type": "boolean"
              },
              "allow_disable": {
                "type": "boolean"
              },
              "rule_key": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.string.response"
                  }
                ],
                "readOnly": true
              },
              "extension_id": {
                "type": "integer",
                "format": "int32",
                "nullable": true,
                "readOnly": true
              }
            }
          }
        ]
      },
      "api.params.predicate.filter.integer-strict": {
        "type": "string",
        "pattern": "^((eq|neq):)?-?[0-9]+$",
        "description": "Filter results by column integer value. Valid filter predicates are `eq`, `neq`.\n"
      },
      "api.params.predicate.filter.string-strict": {
        "type": "string",
        "pattern": "^((eq|neq):)?[^:]+$",
        "description": "Filter results by column string value. Valid filter predicates are `eq`, `neq`.\n"
      },
      "api.params.predicate.filter.boolean": {
        "type": "string",
        "pattern": "^((eq|neq):)?(t|T|TRUE|true|True|f|F|FALSE|false|False)$",
        "description": "Filter results by column boolean value. Valid filter predicates are `eq`, `neq`.\n"
      },
      "model.asset-group-tag-request": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Only alphanumeric characters, underscores, and spaces are allowed."
          },
          "type": {
            "type": "integer"
          },
          "description": {
            "type": "string"
          },
          "require_certify": {
            "type": "boolean"
          },
          "position": {
            "type": "integer"
          },
          "glyph": {
            "$ref": "#/components/schemas/null.string"
          }
        }
      },
      "model.asset-group-tag-update": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Only alphanumeric characters, underscores, and spaces are allowed."
          },
          "description": {
            "type": "string"
          },
          "require_certify": {
            "type": "boolean"
          },
          "position": {
            "type": "integer"
          }
        }
      },
      "api.params.query.environments": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "model.asset-group-tags-selector-create-request": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.asset-group-tags-selector-base"
          }
        ],
        "required": [
          "name",
          "seeds"
        ]
      },
      "model.asset-group-tags-selector-request": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.asset-group-tags-selector-base"
          },
          {
            "type": "object",
            "properties": {
              "disabled": {
                "type": "boolean"
              }
            }
          }
        ]
      },
      "model.asset-group-tags-history": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "skip": {
            "type": "integer"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "records": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer",
                        "format": "int64"
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "actor": {
                        "type": "string"
                      },
                      "email": {
                        "$ref": "#/components/schemas/null.string"
                      },
                      "action": {
                        "type": "string"
                      },
                      "target": {
                        "type": "string"
                      },
                      "asset_group_tag_id": {
                        "type": "integer"
                      },
                      "environment_id": {
                        "$ref": "#/components/schemas/null.string"
                      },
                      "note": {
                        "$ref": "#/components/schemas/null.string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "model.asset-group-tags-certification-response": {
        "allOf": [
          {
            "$ref": "#/components/schemas/api.response.pagination"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "members": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "integer",
                          "format": "int64",
                          "description": "The graph ID of this node"
                        },
                        "object_id": {
                          "type": "string"
                        },
                        "environment_id": {
                          "type": "string"
                        },
                        "primary_kind": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "asset_group_tag_id": {
                          "type": "integer",
                          "format": "int32"
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "certified_by": {
                          "type": "string"
                        },
                        "certified": {
                          "type": "integer",
                          "description": "0 = cert pending, 1 = cert revoked, 2 = manual cert, 3 = auto cert"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        ]
      },
      "model.bh-graph.item-border": {
        "type": "object",
        "properties": {
          "color": {
            "type": "string"
          }
        }
      },
      "model.bh-graph.font-icon": {
        "type": "object",
        "properties": {
          "color": {
            "type": "string"
          },
          "fontFamily": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        }
      },
      "model.bh-graph.label": {
        "type": "object",
        "properties": {
          "bold": {
            "type": "boolean"
          },
          "color": {
            "type": "string"
          },
          "fontFamily": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        }
      },
      "model.bh-graph.glyph": {
        "type": "object",
        "properties": {
          "angle": {
            "type": "integer"
          },
          "blink": {
            "type": "boolean"
          },
          "border": {
            "$ref": "#/components/schemas/model.bh-graph.item-border"
          },
          "color": {
            "type": "string"
          },
          "fontIcon": {
            "$ref": "#/components/schemas/model.bh-graph.font-icon"
          },
          "image": {
            "type": "string"
          },
          "label": {
            "$ref": "#/components/schemas/model.bh-graph.label"
          },
          "position": {
            "type": "string"
          },
          "radius": {
            "type": "integer"
          },
          "size": {
            "type": "integer"
          }
        }
      },
      "model.bh-graph.item": {
        "type": "object",
        "properties": {
          "color": {
            "type": "string"
          },
          "fade": {
            "type": "boolean"
          },
          "data": {
            "type": "object",
            "additionalProperties": true
          },
          "glyphs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.bh-graph.glyph"
            }
          }
        }
      },
      "model.bh-graph.node": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.bh-graph.item"
          },
          {
            "type": "object",
            "properties": {
              "border": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  },
                  "lineStyle": {
                    "type": "string"
                  },
                  "width": {
                    "type": "integer"
                  }
                }
              },
              "coordinates": {
                "type": "object",
                "properties": {
                  "lat": {
                    "type": "integer"
                  },
                  "lng": {
                    "type": "integer"
                  }
                }
              },
              "cutout": {
                "type": "boolean"
              },
              "fontIcon": {
                "$ref": "#/components/schemas/model.bh-graph.font-icon"
              },
              "halos": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "color": {
                      "type": "string"
                    },
                    "radius": {
                      "type": "integer"
                    },
                    "width": {
                      "type": "integer"
                    }
                  }
                }
              },
              "image": {
                "type": "string"
              },
              "label": {
                "type": "object",
                "properties": {
                  "backgroundColor": {
                    "type": "string"
                  },
                  "bold": {
                    "type": "boolean"
                  },
                  "center": {
                    "type": "boolean"
                  },
                  "color": {
                    "type": "string"
                  },
                  "fontFamily": {
                    "type": "string"
                  },
                  "fontSize": {
                    "type": "integer"
                  },
                  "text": {
                    "type": "string"
                  }
                }
              },
              "shape": {
                "type": "string"
              },
              "size": {
                "type": "integer"
              }
            }
          }
        ]
      },
      "model.bh-graph.link-end": {
        "type": "object",
        "properties": {
          "arrow": {
            "type": "boolean"
          },
          "backOff": {
            "type": "integer"
          },
          "color": {
            "type": "string"
          },
          "glyphs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.bh-graph.glyph"
            }
          },
          "label": {
            "$ref": "#/components/schemas/model.bh-graph.label"
          }
        }
      },
      "model.bh-graph.edge": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.bh-graph.item"
          },
          {
            "type": "object",
            "properties": {
              "end1": {
                "$ref": "#/components/schemas/model.bh-graph.link-end"
              },
              "end2": {
                "$ref": "#/components/schemas/model.bh-graph.link-end"
              },
              "flow": {
                "type": "object",
                "properties": {
                  "velocity": {
                    "type": "integer"
                  }
                }
              },
              "id1": {
                "type": "string"
              },
              "id2": {
                "type": "string"
              },
              "label": {
                "$ref": "#/components/schemas/model.bh-graph.label"
              },
              "lineStyle": {
                "type": "string"
              },
              "width": {
                "type": "integer"
              }
            }
          }
        ]
      },
      "model.bh-graph.graph": {
        "type": "object",
        "additionalProperties": {
          "anyOf": [
            {
              "$ref": "#/components/schemas/model.bh-graph.node"
            },
            {
              "$ref": "#/components/schemas/model.bh-graph.edge"
            }
          ]
        }
      },
      "model.relationship-details": {
        "type": "object",
        "required": [
          "relationship_id",
          "source_node_id",
          "target_node_id",
          "kind",
          "properties"
        ],
        "properties": {
          "relationship_id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "example": 1234567890
          },
          "source_node_id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "example": 1234567890
          },
          "target_node_id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "example": 1234567890
          },
          "kind": {
            "type": "object",
            "required": [
              "relationship_kind_id",
              "name"
            ],
            "properties": {
              "relationship_kind_id": {
                "type": "integer",
                "format": "int32",
                "nullable": true
              },
              "name": {
                "type": "string"
              }
            }
          },
          "properties": {
            "type": "object",
            "additionalProperties": true,
            "required": [
              "is_traversable",
              "lastSeen"
            ],
            "properties": {
              "is_traversable": {
                "type": "boolean"
              },
              "lastSeen": {
                "type": "string",
                "format": "date-time"
              }
            }
          }
        }
      },
      "model.kind-info-base": {
        "type": "object",
        "required": [
          "title",
          "position"
        ],
        "properties": {
          "title": {
            "type": "string",
            "example": "Entity Panel Section"
          },
          "position": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "model.kind-info-markdown": {
        "type": "object",
        "properties": {
          "markdown": {
            "type": "object",
            "required": [
              "content"
            ],
            "properties": {
              "content": {
                "type": "string",
                "description": "Rendered markdown content, or the original unexecuted template string when rendering fails."
              },
              "template_error": {
                "type": "string",
                "description": "Template parsing or execution error, when the markdown template could not be rendered for the requested entity."
              }
            }
          }
        }
      },
      "model.kind-info-type-markdown": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.kind-info-markdown"
          },
          {
            "type": "object",
            "required": [
              "markdown"
            ]
          }
        ]
      },
      "model.kind-info-content": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/model.kind-info-type-markdown"
          }
        ]
      },
      "model.kind-info-response": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "example": "panel_section_1"
              }
            }
          },
          {
            "$ref": "#/components/schemas/model.kind-info-base"
          },
          {
            "$ref": "#/components/schemas/model.kind-info-content"
          }
        ]
      },
      "model.relationship-details-with-info": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.relationship-details"
          },
          {
            "type": "object",
            "properties": {
              "info": {
                "type": "array",
                "items": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/model.kind-info-response"
                    },
                    {
                      "type": "object",
                      "required": [
                        "relationship_kind_id"
                      ],
                      "properties": {
                        "relationship_kind_id": {
                          "type": "integer"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        ]
      },
      "model.node-details": {
        "type": "object",
        "properties": {
          "node_id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "example": 1234567890
          },
          "kinds": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "node_kind_id"
              ],
              "properties": {
                "node_kind_id": {
                  "type": "integer",
                  "format": "int32",
                  "nullable": true,
                  "description": "Schema node kind ID, or null if the kind is not registered in schema_node_kinds"
                },
                "name": {
                  "type": "string",
                  "description": "The kind name from the graph node"
                }
              }
            }
          },
          "properties": {
            "type": "object",
            "properties": {
              "objectid": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "displayName": {
                "type": "string"
              },
              "lastSeen": {
                "type": "string",
                "format": "date-time"
              }
            },
            "additionalProperties": true
          }
        }
      },
      "api.params.predicate.filter.contains": {
        "type": "string",
        "pattern": "^(in|nin):(\\w+)(,\\s*\\w+)*$",
        "description": "The contains predicate checks a property against the values in a given comma separated list.\n- `in` checks if the property matches an element in the given comma separated list.\n  - `in:Contains,GetChangesAll,MemberOf`\n- `nin` checks if the property does not match an element in the given comma separated list.\n  - `nin:LocalToComputer,MemberOfLocalGroup`\n"
      },
      "model.unified-graph.node": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "kinds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "objectId": {
            "type": "string"
          },
          "isTierZero": {
            "type": "boolean"
          },
          "isOwnedObject": {
            "type": "boolean"
          },
          "lastSeen": {
            "type": "string",
            "format": "date-time"
          },
          "properties": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          }
        }
      },
      "model.unified-graph.edge": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string"
          },
          "target": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "lastSeen": {
            "type": "string",
            "format": "date-time"
          },
          "properties": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          }
        }
      },
      "model.unified-graph.graph": {
        "type": "object",
        "properties": {
          "nodes": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/model.unified-graph.node"
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.unified-graph.edge"
            }
          }
        }
      },
      "api.response.graph-extensions-info": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "extensions"
            ],
            "properties": {
              "extensions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "name",
                    "version",
                    "is_builtin",
                    "namespace"
                  ],
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int32"
                    },
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    },
                    "is_builtin": {
                      "type": "boolean"
                    },
                    "namespace": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "required": [
          "data"
        ],
        "example": {
          "data": {
            "extensions": [
              {
                "id": 1,
                "name": "Active Directory",
                "version": "v1.0.0",
                "is_builtin": true,
                "namespace": "AD"
              }
            ]
          }
        }
      },
      "model.graph-extension.kind-info-definition": {
        "type": "object",
        "description": "A map of named info panels used in extension definitions.\nEach property key is a stable panel identifier and must match the pattern\n`^[a-z0-9_-]{1,128}$` (lowercase alphanumeric characters, hyphens, and underscores only).\nEach property value must be a valid KindInfo object with title, position, and content.\n",
        "additionalProperties": {
          "allOf": [
            {
              "$ref": "#/components/schemas/model.kind-info-base"
            },
            {
              "$ref": "#/components/schemas/model.kind-info-markdown"
            }
          ]
        }
      },
      "model.graph-extension.payload": {
        "type": "object",
        "properties": {
          "schema": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "example": "OpenGraph_Extension"
              },
              "display_name": {
                "type": "string",
                "example": "OpenGraph Extension"
              },
              "version": {
                "type": "string",
                "example": "v1.0.0"
              },
              "namespace": {
                "type": "string",
                "example": "OGE"
              }
            }
          },
          "node_kinds": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "example": "OGE_Computer"
                },
                "display_name": {
                  "type": "string",
                  "example": "OGE Computer"
                },
                "description": {
                  "type": "string",
                  "example": "An OpenGraph Extension Computer object"
                },
                "is_display_kind": {
                  "type": "boolean"
                },
                "icon": {
                  "type": "string",
                  "example": "Desktop"
                },
                "color": {
                  "type": "string",
                  "example": "#FF0000"
                },
                "info": {
                  "$ref": "#/components/schemas/model.graph-extension.kind-info-definition"
                }
              }
            }
          },
          "relationship_kinds": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "example": "OGE_ConnectedTo"
                },
                "description": {
                  "type": "string",
                  "example": "An OpenGraph Extension ConnectedTo edge"
                },
                "is_traversable": {
                  "type": "boolean"
                },
                "info": {
                  "$ref": "#/components/schemas/model.graph-extension.kind-info-definition"
                }
              }
            }
          },
          "environments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "environment_kind": {
                  "type": "string",
                  "example": "OGE_Environment"
                },
                "source_kind": {
                  "type": "string",
                  "example": "OGExtension"
                },
                "principal_kinds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "example": [
                    "OGE_User",
                    "OGE_Computer"
                  ]
                }
              }
            }
          },
          "relationship_findings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "example": "OGE_Malicious_Finding_1"
                },
                "display_name": {
                  "type": "string",
                  "example": "Malicious Finding 1 (OG Extension)"
                },
                "relationship_kind": {
                  "type": "string",
                  "example": "OGE_ConnectedTo"
                },
                "environment_kind": {
                  "type": "string",
                  "example": "OGE_Environment"
                },
                "remediation": {
                  "type": "object",
                  "properties": {
                    "short_description": {
                      "type": "string"
                    },
                    "long_description": {
                      "type": "string"
                    },
                    "short_remediation": {
                      "type": "string"
                    },
                    "long_remediation": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "pz_rules": {
            "type": "array",
            "description": "Declares the extension's desired privilege zones. Omitting this property or\nproviding an empty array removes existing privilege zones associated with the extension.\n",
            "items": {
              "type": "object",
              "required": [
                "key",
                "name",
                "seeds"
              ],
              "properties": {
                "key": {
                  "type": "string",
                  "description": "A stable identifier for reconciling rules between extension upserts."
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "enabled": {
                  "type": "boolean",
                  "description": "Whether the privilege zone rule is enabled. Defaults to true when omitted."
                },
                "allow_disable": {
                  "type": "boolean",
                  "description": "Whether users may disable the privilege zone rule. Defaults to true when omitted."
                },
                "seeds": {
                  "type": "array",
                  "minItems": 1,
                  "maxItems": 1,
                  "items": {
                    "type": "object",
                    "required": [
                      "type",
                      "value"
                    ],
                    "properties": {
                      "type": {
                        "type": "integer",
                        "enum": [
                          2
                        ],
                        "description": "The selector type. Privilege-zone rules only support Cypher (2)."
                      },
                      "value": {
                        "type": "string",
                        "description": "A valid Cypher query used to seed the privilege zone."
                      }
                    }
                  }
                }
              }
            }
          },
          "queries": {
            "type": "array",
            "description": "Declares the extension's desired saved queries. Omitting this property or\nproviding an empty array removes existing saved queries associated with the extension.\n",
            "items": {
              "type": "object",
              "required": [
                "query_key",
                "name",
                "query"
              ],
              "properties": {
                "query_key": {
                  "type": "string",
                  "description": "A stable identifier for reconciling the saved query.",
                  "example": "critical-assets"
                },
                "name": {
                  "type": "string",
                  "description": "The saved query's display name.",
                  "example": "Critical Assets"
                },
                "query": {
                  "type": "string",
                  "description": "Extension-provided saved queries must be read-only; updating clauses are not supported.",
                  "example": "MATCH (n) RETURN n"
                },
                "description": {
                  "type": "string",
                  "description": "An optional description of the saved query.",
                  "example": "Lists all critical assets."
                },
                "category": {
                  "type": "string",
                  "description": "An optional category for grouping the saved query.",
                  "example": "Asset Management"
                }
              }
            }
          }
        }
      },
      "model.graph-schema-edge-kinds": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "is_traversable": {
            "type": "boolean"
          },
          "schema_name": {
            "type": "string"
          },
          "is_builtin": {
            "type": "boolean"
          }
        }
      },
      "model.extension-details": {
        "type": "object",
        "nullable": true,
        "properties": {
          "extension_id": {
            "type": "integer",
            "format": "int32",
            "example": 7
          },
          "name": {
            "type": "string",
            "example": "AD"
          },
          "display_name": {
            "type": "string",
            "example": "Active Directory"
          },
          "namespace": {
            "type": "string",
            "example": "AD"
          },
          "version": {
            "type": "string",
            "example": "v1"
          }
        }
      },
      "model.node-kind-response": {
        "type": "object",
        "properties": {
          "node_kind_id": {
            "type": "integer",
            "format": "int32",
            "example": 42
          },
          "name": {
            "type": "string",
            "example": "User"
          },
          "display_name": {
            "type": "string",
            "example": "User"
          },
          "description": {
            "type": "string",
            "example": "a user node kind"
          },
          "is_display_kind": {
            "type": "boolean",
            "example": true
          },
          "icon": {
            "type": "string",
            "example": "user"
          },
          "color": {
            "type": "string",
            "example": "#FFFFFF"
          },
          "extension": {
            "$ref": "#/components/schemas/model.extension-details"
          },
          "info": {
            "$ref": "#/components/schemas/model.graph-extension.kind-info-definition"
          }
        }
      },
      "model.relationship-kind-response": {
        "type": "object",
        "properties": {
          "relationship_kind_id": {
            "type": "integer",
            "format": "int32",
            "example": 42
          },
          "name": {
            "type": "string",
            "example": "MemberOf"
          },
          "description": {
            "type": "string",
            "example": "a membership relationship"
          },
          "is_traversable": {
            "type": "boolean",
            "example": true
          },
          "info": {
            "$ref": "#/components/schemas/model.graph-extension.kind-info-definition"
          },
          "extension": {
            "$ref": "#/components/schemas/model.extension-details"
          }
        }
      },
      "model.saved-query": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "user_id": {
                "type": "string",
                "format": "uuid",
                "readOnly": true
              },
              "name": {
                "type": "string"
              },
              "query": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "extension_id": {
                "type": "integer",
                "format": "int32",
                "readOnly": true
              },
              "category": {
                "type": "string",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.saved-queries-permissions.response": {
        "type": "object",
        "properties": {
          "shared_to_user_ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.components.uuid"
            }
          },
          "query_id": {
            "type": "integer",
            "format": "int64"
          },
          "public": {
            "type": "boolean"
          },
          "readonly": {
            "type": "boolean"
          }
        }
      },
      "model.saved-queries-permissions": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "shared_to_user_id": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.uuid"
                  }
                ]
              },
              "query_id": {
                "type": "integer",
                "format": "int64"
              },
              "public": {
                "type": "boolean"
              }
            }
          }
        ]
      },
      "model.unified-graph.graph.w.property.keys": {
        "type": "object",
        "properties": {
          "node_keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "edge_keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nodes": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/model.unified-graph.node"
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.unified-graph.edge"
            }
          },
          "literals": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {
                  "type": "object",
                  "nullable": true,
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "array"
                    },
                    {
                      "type": "object"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "api.response.time-window": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "format": "date-time",
            "description": "The RFC-3339 timestamp to describe the beginning of a time range"
          },
          "end": {
            "type": "string",
            "format": "date-time",
            "description": "The RFC-3339 timestamp to describe the end of a time range"
          }
        }
      },
      "model.ad-data-quality-stat": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "domain_sid": {
                "type": "string"
              },
              "users": {
                "type": "integer"
              },
              "groups": {
                "type": "integer"
              },
              "computers": {
                "type": "integer"
              },
              "ous": {
                "type": "integer"
              },
              "containers": {
                "type": "integer"
              },
              "gpos": {
                "type": "integer"
              },
              "aiacas": {
                "type": "integer"
              },
              "rootcas": {
                "type": "integer"
              },
              "enterprisecas": {
                "type": "integer"
              },
              "ntauthstores": {
                "type": "integer"
              },
              "certtemplates": {
                "type": "integer"
              },
              "issuancepolicies": {
                "type": "integer"
              },
              "sites": {
                "type": "integer"
              },
              "siteservers": {
                "type": "integer"
              },
              "sitesubnets": {
                "type": "integer"
              },
              "acls": {
                "type": "integer"
              },
              "sessions": {
                "type": "integer"
              },
              "relationships": {
                "type": "integer"
              },
              "session_completeness": {
                "type": "number",
                "format": "double"
              },
              "local_group_completeness": {
                "type": "number",
                "format": "double"
              },
              "run_id": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ]
      },
      "model.azure-data-quality-stat": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "tenantid": {
                "type": "string",
                "format": "uuid"
              },
              "users": {
                "type": "integer"
              },
              "groups": {
                "type": "integer"
              },
              "apps": {
                "type": "integer"
              },
              "service_principals": {
                "type": "integer"
              },
              "devices": {
                "type": "integer"
              },
              "management_groups": {
                "type": "integer"
              },
              "subscriptions": {
                "type": "integer"
              },
              "resource_groups": {
                "type": "integer"
              },
              "vms": {
                "type": "integer"
              },
              "key_vaults": {
                "type": "integer"
              },
              "relationships": {
                "type": "integer"
              },
              "run_id": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ]
      },
      "model.ad-data-quality-aggregation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "domains": {
                "type": "integer"
              },
              "users": {
                "type": "integer"
              },
              "groups": {
                "type": "integer"
              },
              "computers": {
                "type": "integer"
              },
              "ous": {
                "type": "integer"
              },
              "containers": {
                "type": "integer"
              },
              "gpos": {
                "type": "integer"
              },
              "aiacas": {
                "type": "integer"
              },
              "rootcas": {
                "type": "integer"
              },
              "enterprisecas": {
                "type": "integer"
              },
              "ntauthstores": {
                "type": "integer"
              },
              "certtemplates": {
                "type": "integer"
              },
              "issuancepolicies": {
                "type": "integer"
              },
              "sites": {
                "type": "integer"
              },
              "siteservers": {
                "type": "integer"
              },
              "sitesubnets": {
                "type": "integer"
              },
              "acls": {
                "type": "integer"
              },
              "sessions": {
                "type": "integer"
              },
              "relationships": {
                "type": "integer"
              },
              "session_completeness": {
                "type": "number",
                "format": "float"
              },
              "local_group_completeness": {
                "type": "number",
                "format": "float"
              },
              "run_id": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ]
      },
      "model.azure-data-quality-aggregation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "tenants": {
                "type": "integer"
              },
              "users": {
                "type": "integer"
              },
              "groups": {
                "type": "integer"
              },
              "apps": {
                "type": "integer"
              },
              "service_principals": {
                "type": "integer"
              },
              "devices": {
                "type": "integer"
              },
              "management_groups": {
                "type": "integer"
              },
              "subscriptions": {
                "type": "integer"
              },
              "resource_groups": {
                "type": "integer"
              },
              "vms": {
                "type": "integer"
              },
              "key_vaults": {
                "type": "integer"
              },
              "relationships": {
                "type": "integer"
              },
              "run_id": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ]
      },
      "api.response.data-quality-platform-aggregate": {
        "allOf": [
          {
            "$ref": "#/components/schemas/api.response.pagination"
          },
          {
            "$ref": "#/components/schemas/api.response.time-window"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/model.ad-data-quality-aggregation"
                    },
                    {
                      "$ref": "#/components/schemas/model.azure-data-quality-aggregation"
                    }
                  ]
                }
              }
            }
          }
        ]
      },
      "model.data-quality-stat": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "extension_id": {
                "type": "integer"
              },
              "environment_kind_id": {
                "type": "integer"
              },
              "environment_id": {
                "type": "string"
              },
              "metric_type": {
                "type": "string",
                "enum": [
                  "node",
                  "relationship"
                ]
              },
              "metric_name": {
                "type": "string"
              },
              "metric_value": {
                "type": "number",
                "format": "double"
              },
              "kind_id": {
                "description": "The kind ID for the counted node kind. Present when `metric_type` is `node`; otherwise null.",
                "type": "integer",
                "format": "int32",
                "nullable": true
              },
              "run_id": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ]
      },
      "model.data-quality-aggregation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "run_id": {
                "type": "string"
              },
              "extension_id": {
                "type": "integer",
                "format": "int32"
              },
              "environment_kind_id": {
                "type": "integer",
                "format": "int32"
              },
              "metric_type": {
                "type": "string",
                "enum": [
                  "node",
                  "relationship"
                ]
              },
              "metric_name": {
                "type": "string"
              },
              "metric_value": {
                "type": "number",
                "format": "double"
              },
              "kind_id": {
                "description": "The kind ID for the counted node kind. Present when `metric_type` is `node`; otherwise null.",
                "type": "integer",
                "format": "int32",
                "nullable": true
              }
            }
          }
        ]
      },
      "enum.datapipe-status": {
        "type": "string",
        "enum": [
          "idle",
          "ingesting",
          "analyzing",
          "purging",
          "pruning",
          "starting",
          "optimizing"
        ]
      },
      "model.components.base-ad-entity": {
        "type": "object",
        "properties": {
          "objectid": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "exists": {
            "type": "boolean",
            "nullable": true
          }
        }
      },
      "model.ou-details": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.base-ad-entity"
          },
          {
            "type": "object",
            "properties": {
              "distinguishedname": {
                "type": "string",
                "nullable": true
              },
              "type": {
                "type": "string",
                "nullable": true
              }
            }
          }
        ]
      },
      "model.domain-details": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.base-ad-entity"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              }
            }
          }
        ]
      },
      "model.client-schedule-display": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "type": "object",
            "properties": {
              "client_id": {
                "type": "string",
                "format": "uuid"
              },
              "rrule": {
                "type": "string"
              },
              "session_collection": {
                "type": "boolean"
              },
              "local_group_collection": {
                "type": "boolean"
              },
              "ad_structure_collection": {
                "type": "boolean"
              },
              "cert_services_collection": {
                "type": "boolean"
              },
              "ca_registry_collection": {
                "type": "boolean"
              },
              "dc_registry_collection": {
                "type": "boolean"
              },
              "all_trusted_domains": {
                "type": "boolean"
              },
              "ous": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.ou-details"
                }
              },
              "domains": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.domain-details"
                }
              }
            }
          }
        ]
      },
      "model.client-scheduled-job-display": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "type": "object",
            "properties": {
              "client_id": {
                "type": "string",
                "format": "uuid"
              },
              "client_name": {
                "type": "string"
              },
              "event_id": {
                "$ref": "#/components/schemas/null.int32"
              },
              "execution_time": {
                "type": "string",
                "format": "date-time"
              },
              "start_time": {
                "type": "string",
                "format": "date-time"
              },
              "end_time": {
                "type": "string",
                "format": "date-time"
              },
              "status": {
                "$ref": "#/components/schemas/enum.job-status"
              },
              "status_message": {
                "type": "string"
              },
              "session_collection": {
                "type": "boolean"
              },
              "local_group_collection": {
                "type": "boolean"
              },
              "ad_structure_collection": {
                "type": "boolean"
              },
              "cert_services_collection": {
                "type": "boolean"
              },
              "ca_registry_collection": {
                "type": "boolean"
              },
              "dc_registry_collection": {
                "type": "boolean"
              },
              "all_trusted_domains": {
                "type": "boolean"
              },
              "domain_controller": {
                "type": "string"
              },
              "ous": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.ou-details"
                }
              },
              "domains": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.domain-details"
                }
              },
              "domain_results": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.domain-collection-result"
                }
              }
            }
          }
        ]
      },
      "model.client-display": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.uuid"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "ip_address": {
                "type": "string",
                "format": "ipv4"
              },
              "hostname": {
                "type": "string"
              },
              "configured_user": {
                "type": "string"
              },
              "last_checkin": {
                "type": "string",
                "format": "date-time"
              },
              "events": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/model.client-schedule-display"
                }
              },
              "token": {
                "$ref": "#/components/schemas/model.auth-token"
              },
              "current_job_id": {
                "$ref": "#/components/schemas/null.int64"
              },
              "current_task_id": {
                "$ref": "#/components/schemas/null.int64"
              },
              "current_job": {
                "$ref": "#/components/schemas/model.client-scheduled-job-display"
              },
              "current_task": {
                "$ref": "#/components/schemas/model.client-scheduled-job-display"
              },
              "completed_job_count": {
                "type": "integer",
                "format": "int32"
              },
              "completed_task_count": {
                "type": "integer",
                "format": "int32"
              },
              "domain_controller": {
                "$ref": "#/components/schemas/null.string"
              },
              "version": {
                "type": "string"
              },
              "user_sid": {
                "$ref": "#/components/schemas/null.string"
              },
              "type": {
                "$ref": "#/components/schemas/enum.client-type"
              },
              "provided_identifier": {
                "$ref": "#/components/schemas/null.string"
              }
            }
          }
        ]
      },
      "enum.client-management-operation-type": {
        "type": "string",
        "enum": [
          "support_bundle"
        ]
      },
      "model.client-management-operation-queue-request": {
        "type": "object",
        "required": [
          "operation_type",
          "execution_time"
        ],
        "properties": {
          "operation_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/enum.client-management-operation-type"
              }
            ]
          },
          "execution_time": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "enum.client-management-operation-status": {
        "type": "string",
        "enum": [
          "queued",
          "running",
          "succeeded",
          "failed",
          "canceled"
        ]
      },
      "model.client-management-operation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.uuid"
          },
          {
            "type": "object",
            "properties": {
              "client_id": {
                "type": "string",
                "format": "uuid",
                "readOnly": true
              },
              "artifact_id": {
                "type": "string",
                "format": "uuid",
                "nullable": true
              },
              "type": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/enum.client-management-operation-type"
                  }
                ]
              },
              "status": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/enum.client-management-operation-status"
                  }
                ]
              },
              "requested_by_user_id": {
                "type": "string",
                "format": "uuid",
                "nullable": true
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "updated_at": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              },
              "started_at": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.time.response"
                  }
                ]
              },
              "completed_at": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/null.time.response"
                  }
                ]
              },
              "execution_time": {
                "type": "string",
                "format": "date-time",
                "readOnly": true
              }
            }
          }
        ]
      },
      "model.client-management-operation-start-request": {
        "type": "object",
        "required": [
          "operation_id"
        ],
        "properties": {
          "operation_id": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "model.client-management-operation-end-request": {
        "type": "object",
        "required": [
          "operation_id",
          "status"
        ],
        "properties": {
          "operation_id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "succeeded",
              "failed",
              "canceled"
            ]
          }
        }
      },
      "enum.artifact-type": {
        "type": "string",
        "enum": [
          "support_bundle"
        ]
      },
      "enum.checksum-algorithm": {
        "type": "string",
        "enum": [
          "sha256",
          "sha512"
        ]
      },
      "model.client-artifact-upload-session-create-request": {
        "type": "object",
        "required": [
          "operation_id",
          "artifact_type",
          "total_size",
          "part_count",
          "checksum_algorithm",
          "checksum"
        ],
        "properties": {
          "operation_id": {
            "type": "string",
            "format": "uuid"
          },
          "artifact_type": {
            "$ref": "#/components/schemas/enum.artifact-type"
          },
          "total_size": {
            "type": "integer",
            "format": "int64",
            "minimum": 1
          },
          "part_size": {
            "type": "integer",
            "format": "int64",
            "description": "Optional upload part size. When omitted or zero, the server default is used."
          },
          "part_count": {
            "type": "integer",
            "format": "int32",
            "minimum": 1
          },
          "content_type": {
            "type": "string",
            "description": "Optional artifact content type. Support bundle uploads default to application/zip."
          },
          "checksum_algorithm": {
            "$ref": "#/components/schemas/enum.checksum-algorithm"
          },
          "checksum": {
            "type": "string",
            "description": "Hex-encoded checksum for the completed artifact."
          }
        }
      },
      "enum.artifact-status": {
        "type": "string",
        "enum": [
          "pending",
          "uploading",
          "complete",
          "failed",
          "canceled"
        ]
      },
      "model.client-artifact-upload-session-create-response": {
        "type": "object",
        "properties": {
          "artifact_id": {
            "type": "string",
            "format": "uuid"
          },
          "client_id": {
            "type": "string",
            "format": "uuid"
          },
          "storage_key": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/enum.artifact-status"
          },
          "part_size": {
            "type": "integer",
            "format": "int64"
          },
          "part_count": {
            "type": "integer",
            "format": "int32"
          },
          "missing_parts": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "management_operation": {
            "$ref": "#/components/schemas/model.client-management-operation"
          }
        }
      },
      "model.client-artifact-upload-session-part": {
        "type": "object",
        "properties": {
          "part_number": {
            "type": "integer",
            "format": "int32"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "checksum": {
            "type": "string",
            "description": "Hex-encoded checksum for this uploaded part."
          },
          "offset_start": {
            "type": "integer",
            "format": "int64"
          },
          "storage_key": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "$ref": "#/components/schemas/null.time.response"
          }
        }
      },
      "model.client-artifact-upload-session": {
        "type": "object",
        "properties": {
          "artifact_id": {
            "type": "string"
          },
          "storage_key": {
            "type": "string"
          },
          "content_type": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/enum.artifact-status"
          },
          "total_size": {
            "type": "integer",
            "format": "int64"
          },
          "part_size": {
            "type": "integer",
            "format": "int64"
          },
          "part_count": {
            "type": "integer",
            "format": "int32"
          },
          "checksum_algorithm": {
            "$ref": "#/components/schemas/enum.checksum-algorithm"
          },
          "checksum": {
            "type": "string",
            "description": "Hex-encoded checksum for the completed artifact."
          },
          "uploaded_parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/model.client-artifact-upload-session-part"
            }
          },
          "missing_parts": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "$ref": "#/components/schemas/null.time.response"
          },
          "completed_at": {
            "$ref": "#/components/schemas/null.time.response"
          }
        }
      },
      "model.client-artifact-upload-session-complete-request": {
        "type": "object",
        "required": [
          "operation_id"
        ],
        "properties": {
          "operation_id": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "model.client-artifact-download-url": {
        "type": "object",
        "properties": {
          "download_url": {
            "type": "string"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "file_name": {
            "type": "string"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "enum.risk-acceptance": {
        "type": "string",
        "enum": [
          "accepted",
          "unaccepted",
          "all",
          ""
        ]
      },
      "model.unified-finding": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "target_id",
              "target_kind",
              "target_properties",
              "finding_name",
              "environment_id",
              "impact_percentage",
              "impact_count",
              "accepted_until",
              "asset_group"
            ],
            "properties": {
              "target_id": {
                "type": "string"
              },
              "target_kind": {
                "type": "string"
              },
              "target_properties": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "finding_name": {
                "type": "string"
              },
              "environment_id": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "impact_percentage": {
                "type": "number",
                "format": "double"
              },
              "impact_count": {
                "type": "number",
                "format": "double"
              },
              "accepted_until": {
                "type": "integer",
                "format": "int64"
              },
              "asset_group": {
                "type": "string"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "target_id",
              "target_kind",
              "target_properties",
              "source_id",
              "source_kind",
              "source_properties",
              "attack_path_edge_id",
              "finding_name",
              "environment_id",
              "impact_percentage",
              "impact_count",
              "exposure_percentage",
              "exposure_count",
              "accepted_until",
              "asset_group"
            ],
            "properties": {
              "target_id": {
                "type": "string"
              },
              "target_kind": {
                "type": "string"
              },
              "target_properties": {
                "type": "string",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "source_id": {
                "type": "string"
              },
              "source_kind": {
                "type": "string"
              },
              "source_properties": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "attack_path_edge_id": {
                "type": "number",
                "format": "int64"
              },
              "finding_name": {
                "type": "string"
              },
              "environment_id": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "impact_percentage": {
                "type": "number",
                "format": "double"
              },
              "impact_count": {
                "type": "number",
                "format": "int64"
              },
              "exposure_percentage": {
                "type": "number",
                "format": "double"
              },
              "exposure_count": {
                "type": "number",
                "format": "int64"
              },
              "accepted_until": {
                "type": "integer",
                "format": "int64"
              },
              "asset_group": {
                "type": "string"
              }
            }
          }
        ]
      },
      "api.response.all-findings": {
        "type": "object",
        "properties": {
          "findings": {
            "type": "array",
            "description": "List of unified findings.",
            "items": {
              "$ref": "#/components/schemas/model.unified-finding"
            }
          },
          "finding_assets": {
            "type": "object",
            "description": "Directory structure of Base64 encoded assets related to each finding organized by finding name.",
            "additionalProperties": {
              "type": "object"
            }
          }
        },
        "required": [
          "findings",
          "finding_assets"
        ]
      },
      "model.relationship-finding": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "FromPrincipal": {
                "type": "string"
              },
              "ToPrincipal": {
                "type": "string"
              },
              "FromPrincipalProps": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "FromPrincipalKind": {
                "type": "string"
              },
              "ToPrincipalProps": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "ToPrincipalKind": {
                "type": "string"
              },
              "RelProps": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "ComboGraphRelationID": {
                "$ref": "#/components/schemas/null.int64"
              },
              "Finding": {
                "type": "string"
              },
              "DomainSID": {
                "type": "string"
              },
              "PrincipalHash": {
                "type": "string"
              },
              "AcceptedUntil": {
                "type": "string",
                "format": "date-time"
              },
              "ImpactPercentage": {
                "type": "number",
                "format": "double"
              },
              "ImpactCount": {
                "type": "integer",
                "format": "int64"
              },
              "ExposurePercentage": {
                "type": "number",
                "format": "double"
              },
              "ExposureCount": {
                "type": "integer",
                "format": "int64"
              },
              "Severity": {
                "type": "string",
                "enum": [
                  "critical",
                  "high",
                  "moderate",
                  "low",
                  ""
                ]
              }
            }
          }
        ]
      },
      "model.list-finding": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int32.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "Principal": {
                "type": "string"
              },
              "PrincipalKind": {
                "type": "string"
              },
              "Finding": {
                "type": "string"
              },
              "DomainSID": {
                "type": "string"
              },
              "Props": {
                "type": "object",
                "additionalProperties": {
                  "type": "object"
                }
              },
              "AcceptedUntil": {
                "type": "string",
                "format": "date-time"
              },
              "ImpactPercentage": {
                "type": "number",
                "format": "double"
              },
              "ImpactCount": {
                "type": "integer",
                "format": "int64"
              },
              "Severity": {
                "type": "string",
                "enum": [
                  "critical",
                  "high",
                  "moderate",
                  "low",
                  ""
                ]
              }
            }
          }
        ]
      },
      "model.risk-counts": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "CompositeRisk": {
                "type": "number",
                "format": "double"
              },
              "FindingCount": {
                "type": "integer"
              },
              "ImpactedAssetCount": {
                "type": "integer"
              },
              "DomainSID": {
                "type": "string"
              },
              "Finding": {
                "type": "string"
              }
            }
          }
        ]
      },
      "api.response.finding": {
        "type": "object",
        "properties": {
          "data": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/model.list-finding"
              },
              {
                "$ref": "#/components/schemas/model.relationship-finding"
              }
            ]
          }
        }
      },
      "model.risk-posture-stat": {
        "allOf": [
          {
            "$ref": "#/components/schemas/model.components.int64.id"
          },
          {
            "$ref": "#/components/schemas/model.components.timestamps"
          },
          {
            "type": "object",
            "properties": {
              "domain_sid": {
                "type": "string"
              },
              "exposure_index": {
                "type": "number",
                "format": "double"
              },
              "tier_zero_count": {
                "type": "integer",
                "format": "int64"
              },
              "critical_risk_count": {
                "type": "integer"
              }
            }
          }
        ]
      },
      "enum.posture-history-type": {
        "type": "string",
        "description": "This enum describes the valid data types for posture history results.",
        "enum": [
          "findings",
          "exposure",
          "assets",
          "session-completeness",
          "group-completeness",
          "attack-paths",
          "archived-findings"
        ]
      },
      "api.params.predicate.filter.number": {
        "type": "string",
        "pattern": "^((eq|neq|gt|gte|lt|lte):)?-?[0-9]+(\\.[0-9]+)?$",
        "description": "Filter results by column numeric float (decimal) value. Valid filter predicates are `eq`, `neq`, `gt`, `gte`, `lt`, `lte`.\n"
      },
      "model.alert-webhook": {
        "type": "object",
        "description": "Alert webhook resource — a joined view of the `alert_channels`, `alert_webhooks`\nfor a single webhook destination. The HMAC secret value is never included in this view;\nit is only returned at create or rotate time.\n",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The channel UUID; also serves as the webhook identifier."
          },
          "type": {
            "type": "string",
            "description": "Webhook target type.",
            "enum": [
              "generic",
              "slack",
              "ms-teams"
            ]
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "health": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "maximum": 1,
            "description": "Rolling health score in [0, 1], where 1 is fully healthy."
          },
          "attempts": {
            "type": "integer",
            "format": "int32",
            "description": "Total dispatch attempts observed for this webhook."
          },
          "failures": {
            "type": "integer",
            "format": "int32",
            "description": "Total failed dispatch attempts observed for this webhook."
          },
          "last_error": {
            "$ref": "#/components/schemas/null.string.response"
          },
          "last_errored_at": {
            "$ref": "#/components/schemas/null.time.response"
          },
          "last_succeeded_at": {
            "$ref": "#/components/schemas/null.time.response"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_by": {
            "type": "string"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_by": {
            "type": "string"
          },
          "disabled_at": {
            "$ref": "#/components/schemas/null.time.response"
          },
          "disabled_by": {
            "$ref": "#/components/schemas/null.string.response"
          }
        }
      },
      "model.alert-event": {
        "type": "object",
        "description": "Alert event resource. Events are system-generated source signals that fan out\ninto per-channel delivery attempts. The API exposes events as read-only; they\nare not mutable through this API surface.\n",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "type": "string",
            "description": "Event type identifier, e.g. an alert kind name."
          },
          "message": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "description": "Event payload (`JSONB`); shape varies per event type.",
            "additionalProperties": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "attempts_queued_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Timestamp at which delivery attempts were queued for this event. `null`\nwhen the event has not yet been dispatched (matches the `delivered`\nfilter on the list endpoint).\n"
          }
        }
      },
      "model.alert-event-type": {
        "type": "object",
        "description": "Describes a single alert event type registered with the system along with the\npayload data versions supported for that type. Used by clients to populate\nselectors when configuring alert subscriptions, document expected payload\nshapes, and fire type-specific test probes.\n",
        "properties": {
          "type": {
            "type": "string",
            "description": "Event type identifier. A concrete dotted leaf, e.g.\n`client.status.offline`; interior segments never carry events.\n"
          },
          "namespace": {
            "type": "string",
            "description": "First segment of the type identifier, e.g. `client`."
          },
          "category": {
            "type": "string",
            "nullable": true,
            "description": "Second segment of the type identifier, e.g. `error`. `null` for\ntwo-segment types such as `client.created`.\n"
          },
          "name": {
            "type": "string",
            "description": "Human-readable name, e.g. `Client Offline`."
          },
          "description": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "info",
              "warning",
              "critical"
            ]
          },
          "versions": {
            "type": "array",
            "description": "Payload data versions supported for this event type.",
            "items": {
              "type": "object",
              "properties": {
                "data_version": {
                  "type": "integer",
                  "description": "Payload data version. Bare integer; rendering such as `v1` is presentation-only."
                },
                "data_example": {
                  "type": "object",
                  "description": "Example instance of the event `data` payload for this version.\nNot a JSON Schema and not the delivery envelope.\n",
                  "additionalProperties": true
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "deprecated_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "Timestamp at which this data version was deprecated. `null` while\nthe version is current. Deprecation does not invalidate existing\nsubscription pins.\n"
                }
              }
            }
          }
        }
      },
      "model.alert": {
        "type": "object",
        "description": "Alert resource — a named, user-managed rule with an embedded set of\nsubscriptions that bind it to channels (e.g. webhooks) for specific event types.\n",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_by": {
            "type": "string"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_by": {
            "type": "string"
          },
          "disabled_at": {
            "$ref": "#/components/schemas/null.time.response"
          },
          "disabled_by": {
            "$ref": "#/components/schemas/null.string.response"
          },
          "subscriptions": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Subscription record embedded in the Alert resource. Binds the parent alert to\na channel for a specific `event_type` and `version`. The parent `alert_id` is\nimplied by containment in an `AlertView` and is omitted from this view.\n",
              "properties": {
                "channel_id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "ID of the alert channel (e.g. webhook) this subscription targets."
                },
                "event_type": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Payload data version this subscription targets."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "disabled_at": {
                  "$ref": "#/components/schemas/null.time.response"
                },
                "disabled_by": {
                  "$ref": "#/components/schemas/null.string.response"
                }
              }
            }
          }
        }
      },
      "model.alert-subscription-request": {
        "type": "object",
        "description": "Subscription element accepted in an Alert create or update request. The\nparent `alert_id` is supplied by the URL path on update or generated on\ncreate, and is not accepted in this payload.\n",
        "required": [
          "channel_id",
          "event_type",
          "version"
        ],
        "properties": {
          "channel_id": {
            "type": "string",
            "format": "uuid"
          },
          "event_type": {
            "type": "string"
          },
          "version": {
            "type": "integer"
          },
          "disabled": {
            "type": "boolean"
          }
        }
      },
      "model.alert-attempt": {
        "type": "object",
        "description": "System-generated delivery attempt for a single `(alert, channel, event)`\ntuple. Read-only via the API. Identity is the composite key\n`(alert_id, channel_id, event_id)`.\n",
        "properties": {
          "alert_id": {
            "type": "string",
            "format": "uuid"
          },
          "channel_id": {
            "type": "string",
            "format": "uuid"
          },
          "event_id": {
            "type": "string",
            "format": "uuid"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "succeeded_at": {
            "$ref": "#/components/schemas/null.time.response"
          },
          "last_status_code": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "last_error": {
            "$ref": "#/components/schemas/null.string.response"
          },
          "attempts": {
            "type": "integer",
            "format": "int32",
            "description": "Total dispatch attempts fired."
          },
          "next_attempt_at": {
            "$ref": "#/components/schemas/null.time.response"
          }
        }
      }
    },
    "responses": {
      "bad-request": {
        "description": "**Bad Request**\nThis could be due to one of the following reasons:\n- JSON payload is missing or malformed\n- Path or query parameters are missing or invalid/malformed\n- The data sent is not valid (ex- sending a `string` in an `integer` field)\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            },
            "example": {
              "http_status": 400,
              "timestamp": "2024-02-19T19:27:43.866Z",
              "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "errors": [
                {
                  "context": "clients",
                  "message": "The JSON payload could not be unmarshalled."
                }
              ]
            }
          }
        }
      },
      "unauthorized": {
        "description": "**Unauthorized**\nThis endpoint failed an authentication requirement. Either the client tried to access\na protected endpoint without being authenticated, or an auth validation failed (ex- invalid\ncredentials or expired token).\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            },
            "example": {
              "http_status": 401,
              "timestamp": "2024-02-19T19:27:43.866Z",
              "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "errors": [
                {
                  "context": "login",
                  "message": "Unauthorized"
                }
              ]
            }
          }
        }
      },
      "forbidden": {
        "description": "**Forbidden**\nThis is most commonly caused by an authenticated client trying to\naccess a resource that it does not have permission for.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            },
            "example": {
              "http_status": 403,
              "timestamp": "2024-02-19T19:27:43.866Z",
              "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "errors": [
                {
                  "context": "clients",
                  "message": "You do not have permission to access this resource"
                }
              ]
            }
          }
        }
      },
      "too-many-requests": {
        "description": "**Too Many Requests**\nThe client has sent too many requests within a certain time window\nand tripped the rate limiting middleware.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            },
            "example": {
              "http_status": 429,
              "timestamp": "2024-02-19T19:27:43.866Z",
              "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "errors": [
                {
                  "context": "middleware",
                  "message": "Too many requests. Please try again later."
                }
              ]
            }
          }
        }
      },
      "internal-server-error": {
        "description": "**Internal Server Error**\nThis is usually the result of either an unexpected database or application error.\nThe client may try modifying or resending the request, but the error is likely not related to the client\ndoing something wrong.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            },
            "example": {
              "http_status": 500,
              "timestamp": "2024-02-19T19:27:43.866Z",
              "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "errors": [
                {
                  "context": "clients",
                  "message": "The request could not be handled due to an unexpected database error."
                }
              ]
            }
          }
        }
      },
      "not-found": {
        "description": "**Not Found**\nThis error typically comes from operations where a valid ID was passed to the request\nto look up an entity but the entity could not be found.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            },
            "example": {
              "http_status": 404,
              "timestamp": "2024-02-19T19:27:43.866Z",
              "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "errors": [
                {
                  "context": "clients",
                  "message": "The requested client could not be found."
                }
              ]
            }
          }
        }
      },
      "no-content": {
        "description": "**No Content**\nThis response will contain no response body.\n",
        "content": {
          "text/plain": {
            "schema": {
              "type": "string"
            },
            "example": "[this request has no response data]"
          }
        }
      },
      "error-response": {
        "description": "The standard error response wrapper.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            }
          }
        }
      },
      "binary-response": {
        "description": "**OK**\nThis response will contain binary content.\n",
        "headers": {
          "Content-Disposition": {
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/octet-stream": {
            "schema": {
              "type": "string",
              "format": "binary"
            },
            "example": "[this request has a binary response]"
          }
        }
      },
      "unsupported-media-type": {
        "description": "**Unsupported Media Type**\nContent-Type does not match expected formats.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/api.error-wrapper"
            },
            "example": {
              "http_status": 415,
              "timestamp": "2024-02-19T19:27:43.866Z",
              "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "errors": [
                {
                  "context": "clients",
                  "message": "invalid content-type: [application/incorrect]; Content type must be application/json or application/zip"
                }
              ]
            }
          }
        }
      },
      "entity-info-query-results": {
        "description": "**OK**\n\nThis response is polymorphic and depends on the type of entity being queried and whether\nthe `count` param is true or not. All node types will return a `props` field with the graph node\nproperties and a `kinds` field with the graph node kinds. If `count=true` the response will also include additional fields with integer counts.\n",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "object",
                  "properties": {
                    "kinds": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "props": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "related-entity-query-results": {
        "description": "**OK**\n\nThis endpoint returns a response, dependent upon which return type is requested by the `type` parameter.\nThe only supported `type` parameter is `list`.\nWhile `list` is the only supported `type` parameter, the `graph` parameter can be used\nand will result in a different response structure then documented here.\nFor those interested in using the undocumented graph type parameter, the response type is described in the schema\n`model.bh-graph.graph`.\n",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/api.response.pagination"
                },
                {
                  "title": "list",
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "title": "paged-node-list-entry",
                        "type": "object",
                        "properties": {
                          "objectID": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "label": {
                            "type": "string"
                          },
                          "kinds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "csv-response": {
        "description": "**OK**\nThis response will contain csv text content.\n",
        "content": {
          "text/csv": {
            "schema": {
              "type": "string"
            },
            "example": "header1,header2,header3\ncell1,cell2,cell3\ncell4,cell5,cell6\n...\n"
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Community & Enterprise",
      "tags": [
        "Auth",
        "Roles",
        "Permissions",
        "API Tokens",
        "BloodHound Users",
        "Collectors",
        "Collection Uploads",
        "Custom Node Management",
        "API Info",
        "Search",
        "Audit",
        "Config",
        "Asset Isolation",
        "Graph",
        "Azure Entities",
        "AD Base Entities",
        "Computers",
        "Containers",
        "Domains",
        "GPOs",
        "AIA CAs",
        "Root CAs",
        "Enterprise CAs",
        "NT Auth Stores",
        "Cert Templates",
        "Sites",
        "Site Servers",
        "Site Subnets",
        "OUs",
        "AD Users",
        "Groups",
        "Data Quality",
        "Datapipe",
        "Cypher",
        "OpenGraph (Experimental)"
      ]
    },
    {
      "name": "Enterprise Only",
      "tags": [
        "EULA",
        "BHE Users",
        "Analysis",
        "Client Ingest",
        "Clients",
        "Jobs",
        "Collector Jobs",
        "Tasks",
        "Events (Schedules)",
        "Attack Paths",
        "Risk Posture",
        "Asset Scores",
        "Meta Entities",
        "Alerts"
      ]
    }
  ]
}