{
  "components": {
    "schemas": {
      "Actor": {
        "additionalProperties": false,
        "properties": {
          "auth": {
            "type": "string"
          },
          "groups": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ApplyResult": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "type": "string"
          },
          "errorKey": {
            "type": "string"
          },
          "hint": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "resourceVersion": {
            "type": "string"
          },
          "result": {
            "enum": [
              "created",
              "updated",
              "unchanged",
              "error"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "name",
          "result"
        ],
        "type": "object"
      },
      "AuditPage": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "type": "string"
          },
          "cursor_next": {
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/Event"
            },
            "type": "array"
          },
          "node": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "node",
          "took_ms"
        ],
        "type": "object"
      },
      "AuthListIAMUser": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "type": "string"
          },
          "diagnoses": {
            "description": "Why entries were ignored (role bindings, identity providers).",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/IAMUser"
            },
            "type": "array"
          },
          "took_ms": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "continue",
          "took_ms"
        ],
        "type": "object"
      },
      "AuthListIdentityProviderInfo": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "type": "string"
          },
          "diagnoses": {
            "description": "Why entries were ignored (role bindings, identity providers).",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/IdentityProviderInfo"
            },
            "type": "array"
          },
          "took_ms": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "continue",
          "took_ms"
        ],
        "type": "object"
      },
      "AuthListRoleBindingInfo": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "type": "string"
          },
          "diagnoses": {
            "description": "Why entries were ignored (role bindings, identity providers).",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/RoleBindingInfo"
            },
            "type": "array"
          },
          "took_ms": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "continue",
          "took_ms"
        ],
        "type": "object"
      },
      "AuthListServiceAccountInfo": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "type": "string"
          },
          "diagnoses": {
            "description": "Why entries were ignored (role bindings, identity providers).",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ServiceAccountInfo"
            },
            "type": "array"
          },
          "took_ms": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "continue",
          "took_ms"
        ],
        "type": "object"
      },
      "AuthListTokenInfo": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "type": "string"
          },
          "diagnoses": {
            "description": "Why entries were ignored (role bindings, identity providers).",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/TokenInfo"
            },
            "type": "array"
          },
          "took_ms": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "continue",
          "took_ms"
        ],
        "type": "object"
      },
      "AuthProvider": {
        "additionalProperties": false,
        "properties": {
          "displayName": {
            "type": "string"
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "displayName"
        ],
        "type": "object"
      },
      "AuthSessionLimits": {
        "additionalProperties": false,
        "properties": {
          "idleTimeout": {
            "description": "Go duration (auth.session.idleTimeout).",
            "type": "string"
          },
          "lifetime": {
            "description": "Go duration (auth.session.lifetime).",
            "type": "string"
          }
        },
        "required": [
          "idleTimeout",
          "lifetime"
        ],
        "type": "object"
      },
      "AuthStatus": {
        "additionalProperties": false,
        "properties": {
          "hasDefaultCredentials": {
            "description": "The bootstrap admin still has its generated password.",
            "type": "boolean"
          },
          "localLogin": {
            "description": "False only when auth.localLogin is disabled.",
            "type": "boolean"
          },
          "localLoginMode": {
            "description": "auth.localLogin.",
            "enum": [
              "enabled",
              "admins-only",
              "disabled"
            ],
            "type": "string"
          },
          "providers": {
            "description": "The OIDC login options.",
            "items": {
              "$ref": "#/components/schemas/AuthProvider"
            },
            "type": "array"
          },
          "session": {
            "$ref": "#/components/schemas/AuthSessionLimits"
          }
        },
        "required": [
          "localLogin",
          "localLoginMode",
          "providers",
          "hasDefaultCredentials"
        ],
        "type": "object"
      },
      "BatchDeleteInputBody": {
        "additionalProperties": false,
        "properties": {
          "names": {
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "minItems": 1,
            "type": [
              "array",
              "null"
            ]
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "names"
        ],
        "type": "object"
      },
      "BindingScope": {
        "additionalProperties": false,
        "properties": {
          "kind": {
            "description": "cluster, zone, ...",
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "BindingSubject": {
        "additionalProperties": false,
        "properties": {
          "kind": {
            "description": "User, Group, ServiceAccount, ...",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "name"
        ],
        "type": "object"
      },
      "BlockedItem": {
        "additionalProperties": false,
        "properties": {
          "client": {
            "type": "string"
          },
          "client_name": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "id": {
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "list": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "ts": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "ts",
          "domain",
          "client",
          "status"
        ],
        "type": "object"
      },
      "BlockingState": {
        "additionalProperties": false,
        "properties": {
          "blocking": {
            "type": "boolean"
          },
          "configured": {
            "type": "boolean"
          },
          "node": {
            "type": "string"
          },
          "scope": {
            "enum": [
              "node",
              "cluster"
            ],
            "type": "string"
          },
          "timer": {
            "format": "double",
            "type": "number"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "blocking",
          "configured",
          "scope",
          "node",
          "took_ms"
        ],
        "type": "object"
      },
      "CatalogueCategory": {
        "additionalProperties": false,
        "properties": {
          "description": {
            "type": "string"
          },
          "icon": {
            "description": "A Lucide icon name (kebab-case).",
            "type": "string"
          },
          "id": {
            "description": "The ID Policy.spec.blockedCategories names.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "order": {
            "description": "Sort order (ascending).",
            "format": "int64",
            "type": "integer"
          },
          "services": {
            "description": "Services in the category.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "order",
          "services"
        ],
        "type": "object"
      },
      "CatalogueIcon": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "The icon slug (the homarr-labs/dashboard-icons file name).",
            "type": "string"
          },
          "onDark": {
            "description": "Path of the variant for dark backgrounds, when one exists.",
            "type": "string"
          },
          "path": {
            "description": "/api/v1/catalogue/icons/{id}.svg",
            "type": "string"
          }
        },
        "required": [
          "id",
          "path"
        ],
        "type": "object"
      },
      "CatalogueInfo": {
        "additionalProperties": false,
        "properties": {
          "categories": {
            "format": "int64",
            "type": "integer"
          },
          "digest": {
            "description": "SHA-256 of the catalogue document.",
            "type": "string"
          },
          "homepage": {
            "type": "string"
          },
          "license": {
            "description": "SPDX licence of the catalogue data.",
            "type": "string"
          },
          "origin": {
            "description": "\"embedded\" (built into the binary) or the blocking.catalogue.url it was downloaded from.",
            "type": "string"
          },
          "refresh": {
            "$ref": "#/components/schemas/CatalogueRefresh"
          },
          "safeSearchEngines": {
            "format": "int64",
            "type": "integer"
          },
          "schemaVersion": {
            "description": "Catalogue document schema version.",
            "format": "int64",
            "type": "integer"
          },
          "services": {
            "format": "int64",
            "type": "integer"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/CatalogueSourceInfo"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "version": {
            "description": "Catalogue version (YYYY.MM.DD).",
            "type": "string"
          }
        },
        "required": [
          "schemaVersion",
          "version",
          "license",
          "origin",
          "digest",
          "services",
          "categories",
          "safeSearchEngines",
          "sources",
          "took_ms"
        ],
        "type": "object"
      },
      "CatalogueRefresh": {
        "additionalProperties": false,
        "properties": {
          "lastAttempt": {
            "format": "date-time",
            "type": "string"
          },
          "lastError": {
            "type": "string"
          },
          "lastSuccess": {
            "format": "date-time",
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "CatalogueService": {
        "additionalProperties": false,
        "properties": {
          "category": {
            "description": "The category ID (GET /catalogue/categories): ai, social, video, ...",
            "type": "string"
          },
          "domains": {
            "description": "The service's rules as list text (||domain^).",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "icon": {
            "description": "Logo path, /api/v1/catalogue/icons/{slug}.svg; absent when there is none.",
            "type": "string"
          },
          "iconOnDark": {
            "description": "The logo drawn for dark backgrounds, when the default one is dark artwork.",
            "type": "string"
          },
          "id": {
            "description": "The ID Policy.spec.blockedServices names.",
            "type": "string"
          },
          "license": {
            "description": "SPDX licence of the entry (Apache-2.0, or GPL-3.0 for imported services).",
            "type": "string"
          },
          "list": {
            "description": "The list name the query log records for this service's blocks (service:\u003cid\u003e).",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "note": {
            "description": "A caveat about blocking the service.",
            "type": "string"
          },
          "origin": {
            "description": "kudurru, or adguard for a service of the opt-in AdGuard import.",
            "enum": [
              "kudurru",
              "adguard"
            ],
            "type": "string"
          },
          "related": {
            "description": "Services of the same vendor or closely tied to it.",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "requires": {
            "description": "Services this one also depends on: block them too to stop it (Fortnite requires epicgames).",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "rules": {
            "description": "Number of rules (||domain^).",
            "format": "int64",
            "type": "integer"
          },
          "source": {
            "description": "Where the entry comes from: a vendor documentation URL or \"first-party domains of the service\"; adguard-hostlists-registry for imported services.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "category",
          "list",
          "rules",
          "domains",
          "source",
          "origin",
          "license"
        ],
        "type": "object"
      },
      "CatalogueSourceInfo": {
        "additionalProperties": false,
        "properties": {
          "digest": {
            "description": "SHA-256 of the document in service; absent before the first successful download.",
            "type": "string"
          },
          "droppedRules": {
            "description": "Imported rules left out because they are not plain block rules.",
            "format": "int64",
            "type": "integer"
          },
          "id": {
            "description": "kudurru: the catalogue document (embedded or blocking.catalogue.url). adguard: the opt-in import of blocking.catalogue.adguardServicesURL.",
            "enum": [
              "kudurru",
              "adguard"
            ],
            "type": "string"
          },
          "license": {
            "description": "SPDX licence of the source's data (Apache-2.0 for kudurru, GPL-3.0 for AdGuard's).",
            "type": "string"
          },
          "loaded": {
            "description": "A document of this source is in service.",
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "origin": {
            "type": "string"
          },
          "refresh": {
            "$ref": "#/components/schemas/CatalogueRefresh"
          },
          "services": {
            "description": "Services this source contributes to the catalogue in service.",
            "format": "int64",
            "type": "integer"
          },
          "shadowed": {
            "description": "Imported services left out because the kudurru catalogue has the same ID (kudurru's entry wins).",
            "format": "int64",
            "type": "integer"
          },
          "skipped": {
            "description": "Imported entries left out: an ID kudurru cannot use, a duplicate, no name, or no usable rule.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "license",
          "origin",
          "loaded",
          "services"
        ],
        "type": "object"
      },
      "ClientItem": {
        "additionalProperties": false,
        "properties": {
          "blocked": {
            "format": "int64",
            "type": "integer"
          },
          "count": {
            "format": "int64",
            "type": "integer"
          },
          "group": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "last_seen": {
            "description": "The newest query from the client on this node (hour precision once its query rows aged out).",
            "format": "date-time",
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "count",
          "blocked"
        ],
        "type": "object"
      },
      "ClientKey": {
        "additionalProperties": false,
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "type": "object"
      },
      "ClientPoint": {
        "additionalProperties": false,
        "properties": {
          "counts": {
            "items": {
              "format": "int64",
              "type": "integer"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "ts": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "ts",
          "counts"
        ],
        "type": "object"
      },
      "ClientTimeseriesBody": {
        "additionalProperties": false,
        "properties": {
          "approximate": {
            "type": "boolean"
          },
          "clients": {
            "items": {
              "$ref": "#/components/schemas/ClientKey"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "points": {
            "items": {
              "$ref": "#/components/schemas/ClientPoint"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "scope": {
            "type": "string"
          },
          "step": {
            "format": "int64",
            "type": "integer"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "step",
          "clients",
          "points",
          "approximate",
          "scope",
          "nodes",
          "partial",
          "from",
          "until",
          "took_ms"
        ],
        "type": "object"
      },
      "ClusterInfo": {
        "additionalProperties": false,
        "properties": {
          "clusterID": {
            "type": "string"
          },
          "driver": {
            "type": "string"
          },
          "epoch": {
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "leader": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "nodes": {
            "format": "int64",
            "type": "integer"
          },
          "readOnly": {
            "type": "boolean"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "driver",
          "epoch",
          "nodes",
          "readOnly",
          "node",
          "took_ms"
        ],
        "type": "object"
      },
      "Condition": {
        "additionalProperties": false,
        "properties": {
          "lastTransitionTime": {
            "format": "date-time",
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "observedGeneration": {
            "format": "int64",
            "type": "integer"
          },
          "reason": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "status",
          "lastTransitionTime",
          "reason",
          "message"
        ],
        "type": "object"
      },
      "CreateTokenRequest": {
        "additionalProperties": false,
        "properties": {
          "description": {
            "description": "Free text shown in the token list.",
            "type": "string"
          },
          "expiresIn": {
            "description": "Go duration (720h); empty means auth.tokens.maxLifetime, or never.",
            "type": "string"
          },
          "scopes": {
            "description": "Narrow the token to these grants in wire form (viewer, zone-admin@zone:home-example-com); empty keeps the owner's grants.",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "CreatedToken": {
        "additionalProperties": false,
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "expiresAt": {
            "description": "null: the token never expires.",
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "lastUsedAt": {
            "format": "date-time",
            "type": "string"
          },
          "lastUsedIP": {
            "type": "string"
          },
          "owner": {
            "$ref": "#/components/schemas/TokenOwner"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "token": {
            "description": "The kdr_ secret, shown only in this answer.",
            "type": "string"
          }
        },
        "required": [
          "token",
          "id",
          "owner",
          "createdAt",
          "expiresAt"
        ],
        "type": "object"
      },
      "DNSFlags": {
        "additionalProperties": false,
        "properties": {
          "aa": {
            "type": "boolean"
          },
          "ad": {
            "type": "boolean"
          },
          "cd": {
            "type": "boolean"
          },
          "ra": {
            "type": "boolean"
          },
          "rd": {
            "type": "boolean"
          },
          "tc": {
            "type": "boolean"
          }
        },
        "required": [
          "aa",
          "tc",
          "rd",
          "ra",
          "ad",
          "cd"
        ],
        "type": "object"
      },
      "DNSQueryRequest": {
        "additionalProperties": false,
        "properties": {
          "client": {
            "type": "string"
          },
          "dnssec": {
            "type": "boolean"
          },
          "name": {
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "proto": {
            "enum": [
              "udp",
              "tcp",
              "dot",
              "doh",
              "doq",
              "doh3"
            ],
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "DNSQueryResult": {
        "additionalProperties": false,
        "properties": {
          "additional": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "answer": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "authority": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "client": {
            "type": "string"
          },
          "error": {
            "type": "string"
          },
          "flags": {
            "$ref": "#/components/schemas/DNSFlags"
          },
          "latency_ms": {
            "format": "double",
            "type": "number"
          },
          "list": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "rcode": {
            "type": "string"
          },
          "rule": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "status_class": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "type": {
            "type": "string"
          },
          "upstream": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type",
          "client",
          "rcode",
          "status",
          "status_class",
          "answer",
          "authority",
          "additional",
          "flags",
          "latency_ms",
          "node",
          "took_ms"
        ],
        "type": "object"
      },
      "DiagnosisMessage": {
        "additionalProperties": false,
        "properties": {
          "hint": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "severity": {
            "enum": [
              "error",
              "warning",
              "info"
            ],
            "type": "string"
          },
          "source": {
            "type": "string"
          }
        },
        "required": [
          "severity",
          "source",
          "reason",
          "message",
          "node"
        ],
        "type": "object"
      },
      "DoctorCheck": {
        "additionalProperties": false,
        "properties": {
          "check": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "enum": [
              "ok",
              "warn",
              "fail"
            ],
            "type": "string"
          }
        },
        "required": [
          "check",
          "status",
          "message"
        ],
        "type": "object"
      },
      "DoctorReport": {
        "additionalProperties": false,
        "properties": {
          "checks": {
            "items": {
              "$ref": "#/components/schemas/DoctorCheck"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "failures": {
            "format": "int64",
            "type": "integer"
          },
          "node": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "version": {
            "type": "string"
          },
          "warnings": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "node",
          "version",
          "checks",
          "failures",
          "warnings",
          "took_ms"
        ],
        "type": "object"
      },
      "DomainEntries": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/DomainEntry"
            },
            "type": "array"
          },
          "lists": {
            "items": {
              "$ref": "#/components/schemas/DomainListInfo"
            },
            "type": "array"
          },
          "matched": {
            "description": "Entries matching the filters.",
            "format": "int64",
            "type": "integer"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "total": {
            "description": "Entries of the action(s) and namespace(s), before filters.",
            "format": "int64",
            "type": "integer"
          },
          "unattached": {
            "description": "Policies that should reference a list but are managed by a file or an integration; add the list there.",
            "items": {
              "$ref": "#/components/schemas/DomainUnattached"
            },
            "type": "array"
          }
        },
        "required": [
          "items",
          "total",
          "matched",
          "lists",
          "unattached",
          "took_ms"
        ],
        "type": "object"
      },
      "DomainEntriesBatch": {
        "additionalProperties": false,
        "properties": {
          "ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "minItems": 1,
            "type": [
              "array",
              "null"
            ]
          },
          "op": {
            "enum": [
              "enable",
              "disable",
              "delete"
            ],
            "type": "string"
          }
        },
        "required": [
          "ids",
          "op"
        ],
        "type": "object"
      },
      "DomainEntriesCreate": {
        "additionalProperties": false,
        "properties": {
          "comment": {
            "maxLength": 500,
            "type": "string"
          },
          "enabled": {
            "description": "Default true.",
            "type": "boolean"
          },
          "groups": {
            "description": "ClientGroups (ns/name or a name in namespace); empty applies to everyone.",
            "items": {
              "type": "string"
            },
            "maxItems": 100,
            "type": [
              "array",
              "null"
            ]
          },
          "list": {
            "description": "Switch the value off in this list only (a list exception) instead of adding an entry: ns/name or a name in namespace.",
            "maxLength": 300,
            "type": "string"
          },
          "namespace": {
            "description": "Default the server's default namespace.",
            "type": "string"
          },
          "origin": {
            "description": "Where the entry was added from (default manual).",
            "enum": [
              "manual",
              "querylog",
              "api"
            ],
            "type": "string"
          },
          "source": {
            "description": "With list: only this source (default every source that has the value).",
            "maxLength": 300,
            "type": "string"
          },
          "type": {
            "description": "Default exact.",
            "enum": [
              "exact",
              "wildcard",
              "regex"
            ],
            "type": "string"
          },
          "values": {
            "description": "One entry per value, all of one type.",
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "minItems": 1,
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "values"
        ],
        "type": "object"
      },
      "DomainEntry": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "allow",
              "deny"
            ],
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "created": {
            "format": "date-time",
            "type": "string"
          },
          "createdBy": {
            "description": "The actor that added the entry (user:alice).",
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "everyone": {
            "description": "Applies to every client (stored in ui-allow / ui-deny).",
            "type": "boolean"
          },
          "groups": {
            "description": "ClientGroups (ns/name) with a group-scoped copy.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "id": {
            "description": "Opaque, URL-safe identifier for /allowlist/{id} and /denylist/{id}.",
            "type": "string"
          },
          "kind": {
            "description": "entry: an Allowlist or Denylist entry. exception: an entry of the list in lists[0] switched off there (spec.sources[].exclude); it only affects that list, its switch is the exclusion (off switches the list's entry back on) and nothing else of it can be edited.",
            "enum": [
              "entry",
              "exception"
            ],
            "type": "string"
          },
          "lists": {
            "items": {
              "$ref": "#/components/schemas/DomainEntryList"
            },
            "type": "array"
          },
          "modified": {
            "format": "date-time",
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "origin": {
            "description": "list for an exception.",
            "enum": [
              "manual",
              "querylog",
              "unblock",
              "api",
              "migrated",
              "list"
            ],
            "type": "string"
          },
          "overrides": {
            "items": {
              "$ref": "#/components/schemas/DomainOverride"
            },
            "type": "array"
          },
          "policies": {
            "description": "Policies that reference the entry's lists, ns/name.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "readOnly": {
            "type": "boolean"
          },
          "readOnlyReason": {
            "type": "string"
          },
          "request": {
            "description": "The UnblockRequest (ns/name) whose approval added the entry.",
            "type": "string"
          },
          "rule": {
            "description": "The rule as compiled and shown in the query log: name, *.name or /expression/.",
            "type": "string"
          },
          "stillMatchedBy": {
            "description": "exception only: other lists that still match the name; the exception does not affect them.",
            "items": {
              "$ref": "#/components/schemas/DomainOverride"
            },
            "type": "array"
          },
          "type": {
            "enum": [
              "exact",
              "wildcard",
              "regex"
            ],
            "type": "string"
          },
          "value": {
            "description": "exact: ads.example.com; wildcard: *.example.com; regex: the RE2 expression without slashes.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "kind",
          "action",
          "namespace",
          "value",
          "type",
          "rule",
          "enabled",
          "everyone",
          "groups",
          "lists",
          "policies",
          "origin",
          "overrides",
          "stillMatchedBy",
          "readOnly"
        ],
        "type": "object"
      },
      "DomainEntryList": {
        "additionalProperties": false,
        "properties": {
          "group": {
            "description": "The ClientGroup of a group list, ns/name.",
            "type": "string"
          },
          "list": {
            "description": "The BlockList, ns/name (ui-allow, ui-deny, ui-allow-\u003cgroup\u003e, ui-deny-\u003cgroup\u003e).",
            "type": "string"
          },
          "managedBy": {
            "description": "The list's owner when not the API.",
            "type": "string"
          },
          "source": {
            "description": "The source holding the entry (ui).",
            "type": "string"
          }
        },
        "required": [
          "list",
          "source"
        ],
        "type": "object"
      },
      "DomainEntryPatch": {
        "additionalProperties": false,
        "properties": {
          "comment": {
            "maxLength": 500,
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "groups": {
            "items": {
              "type": "string"
            },
            "maxItems": 100,
            "type": [
              "array",
              "null"
            ]
          },
          "scope": {
            "description": "everyone, or groups (with groups).",
            "enum": [
              "everyone",
              "groups"
            ],
            "type": "string"
          },
          "type": {
            "enum": [
              "exact",
              "wildcard",
              "regex"
            ],
            "type": "string"
          },
          "value": {
            "maxLength": 1024,
            "type": "string"
          }
        },
        "type": "object"
      },
      "DomainListInfo": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "allow",
              "deny"
            ],
            "type": "string"
          },
          "enabled": {
            "description": "The list's kudurru.io/enabled switch.",
            "type": "boolean"
          },
          "entries": {
            "format": "int64",
            "type": "integer"
          },
          "group": {
            "type": "string"
          },
          "list": {
            "type": "string"
          },
          "managedBy": {
            "type": "string"
          },
          "policies": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "list",
          "action",
          "enabled",
          "entries",
          "policies"
        ],
        "type": "object"
      },
      "DomainOverride": {
        "additionalProperties": false,
        "properties": {
          "list": {
            "description": "The compiled list, ns/name.",
            "type": "string"
          },
          "rule": {
            "description": "The rule of that list that matches the name.",
            "type": "string"
          }
        },
        "required": [
          "list",
          "rule"
        ],
        "type": "object"
      },
      "DomainUnattached": {
        "additionalProperties": false,
        "properties": {
          "list": {
            "type": "string"
          },
          "managedBy": {
            "type": "string"
          },
          "policy": {
            "type": "string"
          }
        },
        "required": [
          "list",
          "policy",
          "managedBy"
        ],
        "type": "object"
      },
      "DomainWriteResult": {
        "additionalProperties": false,
        "properties": {
          "attached": {
            "description": "Policies that reference the written lists.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "flushed": {
            "description": "Response-cache entries of the names removed on this node.",
            "format": "int64",
            "type": "integer"
          },
          "items": {
            "description": "The entries written, as stored after the write.",
            "items": {
              "$ref": "#/components/schemas/DomainEntry"
            },
            "type": "array"
          },
          "processed": {
            "$ref": "#/components/schemas/ProcessedItems"
          },
          "skipped": {
            "description": "Policies that should reference a list but are managed elsewhere.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "processed",
          "attached",
          "skipped",
          "flushed",
          "took_ms"
        ],
        "type": "object"
      },
      "DomainsRequest": {
        "additionalProperties": false,
        "properties": {
          "domains": {
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "minItems": 1,
            "type": [
              "array",
              "null"
            ]
          },
          "list": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "domains"
        ],
        "type": "object"
      },
      "EdgeBackend": {
        "additionalProperties": false,
        "properties": {
          "address": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "up": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "address",
          "up"
        ],
        "type": "object"
      },
      "EdgeComponent": {
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "EdgeInfo": {
        "additionalProperties": false,
        "properties": {
          "backends": {
            "items": {
              "$ref": "#/components/schemas/EdgeBackend"
            },
            "type": "array"
          },
          "edge": {
            "$ref": "#/components/schemas/EdgeComponent"
          },
          "node": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "vip": {
            "$ref": "#/components/schemas/EdgeComponent"
          }
        },
        "required": [
          "edge",
          "vip",
          "backends",
          "node",
          "took_ms"
        ],
        "type": "object"
      },
      "Endpoint": {
        "additionalProperties": false,
        "properties": {
          "dnsName": {
            "type": "string"
          },
          "kudurru": {
            "$ref": "#/components/schemas/EndpointExt"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "providerSpecific": {
            "items": {
              "$ref": "#/components/schemas/ProviderSpecific"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "recordTTL": {
            "format": "int64",
            "type": "integer"
          },
          "recordType": {
            "type": "string"
          },
          "setIdentifier": {
            "type": "string"
          },
          "targets": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "dnsName",
          "recordType",
          "targets"
        ],
        "type": "object"
      },
      "EndpointExt": {
        "additionalProperties": false,
        "properties": {
          "comment": {
            "type": "string"
          },
          "disabled": {
            "type": "boolean"
          },
          "expiresAt": {
            "format": "date-time",
            "type": "string"
          },
          "view": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Error": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorBody"
          },
          "took_ms": {
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "error",
          "took_ms"
        ],
        "type": "object"
      },
      "ErrorBody": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "hint": {},
          "key": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "missing": {
            "$ref": "#/components/schemas/Missing"
          },
          "objects": {
            "items": {
              "$ref": "#/components/schemas/ObjectOwner"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "key",
          "message"
        ],
        "type": "object"
      },
      "Event": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "type": "string"
          },
          "actor": {
            "$ref": "#/components/schemas/Actor"
          },
          "after": {},
          "authz": {
            "type": "string"
          },
          "before": {},
          "hash": {
            "type": "string"
          },
          "id": {
            "format": "int64",
            "type": "integer"
          },
          "manager": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "prev_hash": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "request": {
            "$ref": "#/components/schemas/Request"
          },
          "resource": {
            "$ref": "#/components/schemas/Resource"
          },
          "result": {
            "type": "string"
          },
          "ts": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "ts",
          "actor",
          "action",
          "resource",
          "result",
          "request"
        ],
        "type": "object"
      },
      "Flags": {
        "additionalProperties": false,
        "properties": {
          "AD": {
            "type": "boolean"
          },
          "CD": {
            "type": "boolean"
          },
          "Cached": {
            "type": "boolean"
          },
          "DO": {
            "type": "boolean"
          },
          "ECS": {
            "type": "boolean"
          },
          "Prefetch": {
            "type": "boolean"
          },
          "RD": {
            "type": "boolean"
          },
          "Stale": {
            "type": "boolean"
          },
          "TC": {
            "type": "boolean"
          },
          "Traceparent": {
            "type": "boolean"
          }
        },
        "required": [
          "RD",
          "DO",
          "TC",
          "AD",
          "CD",
          "Cached",
          "Stale",
          "Prefetch",
          "ECS",
          "Traceparent"
        ],
        "type": "object"
      },
      "FlushInputBody": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "FlushResult": {
        "additionalProperties": false,
        "properties": {
          "flushed": {
            "format": "int64",
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "flushed",
          "node",
          "took_ms"
        ],
        "type": "object"
      },
      "IAMUser": {
        "additionalProperties": false,
        "properties": {
          "builtinAdmin": {
            "type": "boolean"
          },
          "disabled": {
            "type": "boolean"
          },
          "displayName": {
            "type": "string"
          },
          "groups": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "lastLoginAt": {
            "format": "date-time",
            "type": "string"
          },
          "mustChangePassword": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "passwordChangedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "name",
          "builtinAdmin",
          "disabled",
          "mustChangePassword"
        ],
        "type": "object"
      },
      "IdentityProviderInfo": {
        "additionalProperties": false,
        "properties": {
          "cliClientID": {
            "type": "string"
          },
          "clientID": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "issuer": {
            "type": "string"
          },
          "redirectURL": {
            "type": "string"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "source": {
            "enum": [
              "config",
              "object"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "displayName",
          "issuer",
          "clientID",
          "scopes",
          "redirectURL",
          "source"
        ],
        "type": "object"
      },
      "ImportResult": {
        "additionalProperties": false,
        "properties": {
          "created": {
            "description": "The DNSZone was created by the import.",
            "type": "boolean"
          },
          "endpoints": {
            "format": "int64",
            "type": "integer"
          },
          "recordSets": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "serial": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "zone": {
            "type": "string"
          },
          "zoneName": {
            "type": "string"
          }
        },
        "required": [
          "zone",
          "zoneName",
          "created",
          "recordSets",
          "endpoints",
          "serial",
          "warnings",
          "took_ms"
        ],
        "type": "object"
      },
      "LatencySummary": {
        "additionalProperties": false,
        "properties": {
          "avg_ms": {
            "format": "double",
            "type": "number"
          },
          "p50_ms": {
            "format": "double",
            "type": "number"
          },
          "p95_ms": {
            "format": "double",
            "type": "number"
          },
          "p99_ms": {
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "avg_ms",
          "p50_ms",
          "p95_ms",
          "p99_ms"
        ],
        "type": "object"
      },
      "ListApplyResult": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ApplyResult"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListCatalogueCategory": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/CatalogueCategory"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListCatalogueIcon": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/CatalogueIcon"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListCatalogueService": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/CatalogueService"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListClientItem": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ClientItem"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListDiagnosisMessage": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/DiagnosisMessage"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListListSearchHit": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ListSearchHit"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListNodeInfo": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/NodeInfo"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListSafeSearchEngine": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/SafeSearchEngine"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListSearchHit": {
        "additionalProperties": false,
        "properties": {
          "list": {
            "type": "string"
          },
          "mode": {
            "type": "string"
          },
          "rule": {
            "type": "string"
          }
        },
        "required": [
          "list",
          "mode",
          "rule"
        ],
        "type": "object"
      },
      "ListSettingKey": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/SettingKey"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListZoneRecord": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ZoneRecord"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ListZoneSummary": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ZoneSummary"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "LoginRequest": {
        "additionalProperties": false,
        "properties": {
          "password": {
            "type": "string"
          },
          "username": {
            "type": "string"
          }
        },
        "required": [
          "username",
          "password"
        ],
        "type": "object"
      },
      "Me": {
        "additionalProperties": false,
        "properties": {
          "csrf": {
            "type": "string"
          },
          "mustChangePassword": {
            "description": "The local user must change the password (POST /auth/password) before using the API.",
            "type": "boolean"
          },
          "permissions": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "type": "object"
          },
          "principal": {
            "$ref": "#/components/schemas/MePrincipal"
          },
          "roles": {
            "description": "Effective grants: role, or role@kind:name for scoped grants.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "principal",
          "roles",
          "permissions",
          "took_ms"
        ],
        "type": "object"
      },
      "MePrincipal": {
        "additionalProperties": false,
        "properties": {
          "auth": {
            "type": "string"
          },
          "groups": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id",
          "name",
          "groups"
        ],
        "type": "object"
      },
      "Missing": {
        "additionalProperties": false,
        "properties": {
          "resource": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "verb": {
            "type": "string"
          }
        },
        "required": [
          "resource",
          "verb",
          "scope"
        ],
        "type": "object"
      },
      "NodeHealth": {
        "additionalProperties": false,
        "properties": {
          "health": {
            "additionalProperties": {},
            "type": "object"
          },
          "node": {
            "type": "string"
          },
          "ready": {
            "type": "boolean"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "node",
          "ready",
          "health",
          "took_ms"
        ],
        "type": "object"
      },
      "NodeInfo": {
        "additionalProperties": false,
        "properties": {
          "address": {
            "type": "string"
          },
          "leader": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "ready": {
            "type": "boolean"
          },
          "self": {
            "type": "boolean"
          },
          "snapshotAge": {
            "description": "Age of the served local.db snapshot (fromSnapshot only).",
            "type": "string"
          },
          "state": {
            "description": "zonecache state: unsynced, fromSnapshot, live.",
            "type": "string"
          },
          "unready": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "self",
          "leader"
        ],
        "type": "object"
      },
      "NodeResult": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "ok": {
            "type": "boolean"
          },
          "took_ms": {
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "name",
          "ok",
          "took_ms"
        ],
        "type": "object"
      },
      "NotifyResult": {
        "additionalProperties": false,
        "properties": {
          "targets": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "zone": {
            "type": "string"
          }
        },
        "required": [
          "zone",
          "targets",
          "took_ms"
        ],
        "type": "object"
      },
      "ObjectList": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Opaque keyset token for the next page; empty on the last page.",
            "type": "string"
          },
          "items": {
            "items": {
              "additionalProperties": {},
              "type": "object"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "took_ms"
        ],
        "type": "object"
      },
      "ObjectOwner": {
        "additionalProperties": false,
        "properties": {
          "kind": {
            "type": "string"
          },
          "managedBy": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "name"
        ],
        "type": "object"
      },
      "PasswordChangeRequest": {
        "additionalProperties": false,
        "properties": {
          "currentPassword": {
            "description": "The current password.",
            "type": "string"
          },
          "newPassword": {
            "description": "The new password (at least 12 characters, different from the current one).",
            "type": "string"
          },
          "revokeTokens": {
            "description": "Also revoke every API token of the user; a password change alone revokes sessions, not tokens.",
            "type": "boolean"
          }
        },
        "required": [
          "currentPassword",
          "newPassword"
        ],
        "type": "object"
      },
      "Point": {
        "additionalProperties": false,
        "properties": {
          "authoritative": {
            "format": "int64",
            "type": "integer"
          },
          "blocked": {
            "format": "int64",
            "type": "integer"
          },
          "cached": {
            "format": "int64",
            "type": "integer"
          },
          "forwarded": {
            "format": "int64",
            "type": "integer"
          },
          "other": {
            "format": "int64",
            "type": "integer"
          },
          "total": {
            "format": "int64",
            "type": "integer"
          },
          "ts": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "ts",
          "total",
          "blocked",
          "cached",
          "forwarded",
          "authoritative",
          "other"
        ],
        "type": "object"
      },
      "PolicyCategory": {
        "additionalProperties": false,
        "properties": {
          "allowed": {
            "description": "Of those, the ones allowedServices excepts.",
            "format": "int64",
            "type": "integer"
          },
          "icon": {
            "description": "A Lucide icon name.",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "known": {
            "description": "The catalogue in service has the category.",
            "type": "boolean"
          },
          "name": {
            "description": "The catalogue name; the ID when unknown.",
            "type": "string"
          },
          "services": {
            "description": "Services in the category now.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "known",
          "services",
          "allowed"
        ],
        "type": "object"
      },
      "PolicyClient": {
        "additionalProperties": false,
        "properties": {
          "count": {
            "format": "int64",
            "type": "integer"
          },
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "count"
        ],
        "type": "object"
      },
      "PolicyDomain": {
        "additionalProperties": false,
        "properties": {
          "count": {
            "format": "int64",
            "type": "integer"
          },
          "domain": {
            "type": "string"
          }
        },
        "required": [
          "domain",
          "count"
        ],
        "type": "object"
      },
      "PolicyEffectiveService": {
        "additionalProperties": false,
        "properties": {
          "category": {
            "type": "string"
          },
          "icon": {
            "description": "Logo path, /api/v1/catalogue/icons/{slug}.svg; absent when there is none.",
            "type": "string"
          },
          "iconOnDark": {
            "description": "The logo drawn for dark backgrounds, when the default one is dark artwork.",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "known": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "origin": {
            "enum": [
              "kudurru",
              "adguard"
            ],
            "type": "string"
          },
          "rules": {
            "format": "int64",
            "type": "integer"
          },
          "via": {
            "description": "service: named in blockedServices; category: a service of a blocked category.",
            "enum": [
              "service",
              "category"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "known",
          "rules",
          "via",
          "origin"
        ],
        "type": "object"
      },
      "PolicyGroup": {
        "additionalProperties": false,
        "properties": {
          "clients": {
            "description": "Client matchers of the group (spec.clients).",
            "format": "int64",
            "type": "integer"
          },
          "enabled": {
            "type": "boolean"
          },
          "exists": {
            "type": "boolean"
          },
          "ref": {
            "type": "string"
          },
          "seen24h": {
            "description": "Distinct clients this node's query log attributed to the group (as their first group) in the last 24 hours; absent without a query log.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "ref",
          "exists",
          "enabled",
          "clients"
        ],
        "type": "object"
      },
      "PolicyList": {
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "entries": {
            "format": "int64",
            "type": "integer"
          },
          "exists": {
            "type": "boolean"
          },
          "mode": {
            "description": "The list's own spec.mode (how it is applied); the role when it does not exist.",
            "type": "string"
          },
          "ready": {
            "type": "boolean"
          },
          "ref": {
            "type": "string"
          },
          "role": {
            "description": "Which reference field names it: blockListRefs (block) or allowListRefs (allow).",
            "enum": [
              "block",
              "allow"
            ],
            "type": "string"
          },
          "sourcesEnabled": {
            "format": "int64",
            "type": "integer"
          },
          "sourcesTotal": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "ref",
          "role",
          "mode",
          "exists",
          "enabled",
          "ready",
          "entries",
          "sourcesEnabled",
          "sourcesTotal"
        ],
        "type": "object"
      },
      "PolicySafeSearch": {
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "engines": {
            "description": "Every engine the catalogue rewrites (all apply when enabled).",
            "items": {
              "$ref": "#/components/schemas/PolicySafeSearchEngine"
            },
            "type": "array"
          },
          "mode": {
            "enum": [
              "strict",
              "moderate"
            ],
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "mode",
          "engines"
        ],
        "type": "object"
      },
      "PolicySafeSearchEngine": {
        "additionalProperties": false,
        "properties": {
          "icon": {
            "description": "Logo path, /api/v1/catalogue/icons/{slug}.svg; absent when there is none.",
            "type": "string"
          },
          "iconOnDark": {
            "description": "The logo drawn for dark backgrounds, when the default one is dark artwork.",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "PolicySchedule": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "description": "Why the schedule is invalid; the policy then applies at all times.",
            "type": "string"
          },
          "nextChange": {
            "description": "When now flips next (within eight days).",
            "format": "date-time",
            "type": "string"
          },
          "now": {
            "description": "The schedule allows the policy now.",
            "type": "boolean"
          },
          "summary": {
            "description": "\"Mon-Fri 08:00-17:00 (Europe/Berlin)\"",
            "type": "string"
          }
        },
        "required": [
          "now",
          "summary"
        ],
        "type": "object"
      },
      "PolicyService": {
        "additionalProperties": false,
        "properties": {
          "icon": {
            "description": "Logo path, /api/v1/catalogue/icons/{slug}.svg; absent when there is none.",
            "type": "string"
          },
          "iconOnDark": {
            "description": "The logo drawn for dark backgrounds, when the default one is dark artwork.",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "known": {
            "description": "The catalogue in service has the ID.",
            "type": "boolean"
          },
          "name": {
            "description": "The catalogue name; the ID when unknown.",
            "type": "string"
          },
          "rules": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "known",
          "rules"
        ],
        "type": "object"
      },
      "PolicyState": {
        "additionalProperties": false,
        "properties": {
          "active": {
            "description": "enabled and the schedule allows it now (an invalid schedule applies at all times).",
            "type": "boolean"
          },
          "allowedServices": {
            "description": "The spec.allowedServices entries: services of a blocked category this policy does not block.",
            "items": {
              "$ref": "#/components/schemas/PolicyService"
            },
            "type": "array"
          },
          "blockMode": {
            "description": "spec.blockMode, else blocking.defaultResponse; a BlockList's own response still overrides it for that list.",
            "type": "string"
          },
          "blockTTL": {
            "type": "string"
          },
          "categories": {
            "description": "The spec.blockedCategories entries.",
            "items": {
              "$ref": "#/components/schemas/PolicyCategory"
            },
            "type": "array"
          },
          "conditions": {
            "items": {
              "$ref": "#/components/schemas/Condition"
            },
            "type": "array"
          },
          "effectiveServices": {
            "description": "Every service the policy blocks with the catalogue in service: blockedServices, then the services of blockedCategories minus allowedServices.",
            "items": {
              "$ref": "#/components/schemas/PolicyEffectiveService"
            },
            "type": "array"
          },
          "enabled": {
            "description": "false while the kudurru.io/enabled annotation is \"false\".",
            "type": "boolean"
          },
          "groups": {
            "items": {
              "$ref": "#/components/schemas/PolicyGroup"
            },
            "type": "array"
          },
          "lists": {
            "items": {
              "$ref": "#/components/schemas/PolicyList"
            },
            "type": "array"
          },
          "managedBy": {
            "type": "string"
          },
          "policy": {
            "description": "namespace/name",
            "type": "string"
          },
          "priority": {
            "format": "int64",
            "type": "integer"
          },
          "safeSearch": {
            "$ref": "#/components/schemas/PolicySafeSearch"
          },
          "schedule": {
            "$ref": "#/components/schemas/PolicySchedule"
          },
          "services": {
            "description": "The spec.blockedServices entries.",
            "items": {
              "$ref": "#/components/schemas/PolicyService"
            },
            "type": "array"
          },
          "shadowedBy": {
            "description": "Enabled policies (namespace/name, rank order) that outrank this one for at least one of its client groups: they decide for those clients and their settings win; the lists of all active policies still apply.",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "stats24h": {
            "$ref": "#/components/schemas/PolicyStats24h"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "upstreamGroup": {
            "$ref": "#/components/schemas/PolicyUpstreamGroup"
          }
        },
        "required": [
          "policy",
          "enabled",
          "active",
          "priority",
          "groups",
          "lists",
          "services",
          "categories",
          "allowedServices",
          "effectiveServices",
          "safeSearch",
          "blockMode",
          "conditions",
          "took_ms"
        ],
        "type": "object"
      },
      "PolicyStats24h": {
        "additionalProperties": false,
        "properties": {
          "blocked": {
            "format": "int64",
            "type": "integer"
          },
          "blockedPercent": {
            "format": "double",
            "type": "number"
          },
          "queries": {
            "format": "int64",
            "type": "integer"
          },
          "topBlocked": {
            "items": {
              "$ref": "#/components/schemas/PolicyDomain"
            },
            "type": "array"
          },
          "topClients": {
            "items": {
              "$ref": "#/components/schemas/PolicyClient"
            },
            "type": "array"
          }
        },
        "required": [
          "queries",
          "blocked",
          "blockedPercent",
          "topBlocked",
          "topClients"
        ],
        "type": "object"
      },
      "PolicyUpstreamGroup": {
        "additionalProperties": false,
        "properties": {
          "exists": {
            "description": "upstreams.groups has it; queries fall back to the default group otherwise.",
            "type": "boolean"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "exists"
        ],
        "type": "object"
      },
      "Processed": {
        "additionalProperties": false,
        "properties": {
          "processed": {
            "$ref": "#/components/schemas/ProcessedItems"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "processed",
          "took_ms"
        ],
        "type": "object"
      },
      "ProcessedItem": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "type": "string"
          },
          "item": {
            "type": "string"
          }
        },
        "required": [
          "item"
        ],
        "type": "object"
      },
      "ProcessedItems": {
        "additionalProperties": false,
        "properties": {
          "errors": {
            "items": {
              "$ref": "#/components/schemas/ProcessedItem"
            },
            "type": "array"
          },
          "success": {
            "items": {
              "$ref": "#/components/schemas/ProcessedItem"
            },
            "type": "array"
          }
        },
        "required": [
          "success",
          "errors"
        ],
        "type": "object"
      },
      "ProviderSpecific": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "value"
        ],
        "type": "object"
      },
      "PurgeResult": {
        "additionalProperties": false,
        "properties": {
          "deleted": {
            "format": "int64",
            "type": "integer"
          },
          "node": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "deleted",
          "node",
          "took_ms"
        ],
        "type": "object"
      },
      "QueriesBody": {
        "additionalProperties": false,
        "properties": {
          "cursor_next": {
            "type": "string"
          },
          "earliest_ts_disk": {
            "format": "date-time",
            "type": "string"
          },
          "earliest_ts_memory": {
            "format": "date-time",
            "type": "string"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "queries": {
            "items": {
              "$ref": "#/components/schemas/QueryRow"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "records_filtered": {
            "format": "int64",
            "type": "integer"
          },
          "records_total": {
            "format": "int64",
            "type": "integer"
          },
          "scope": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "queries",
          "records_total",
          "records_filtered",
          "scope",
          "nodes",
          "partial",
          "took_ms"
        ],
        "type": "object"
      },
      "QueryActionInputBody": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "allow",
              "deny"
            ],
            "type": "string"
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "action"
        ],
        "type": "object"
      },
      "QueryClient": {
        "additionalProperties": false,
        "properties": {
          "group": {
            "type": "string"
          },
          "ip": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "ip"
        ],
        "type": "object"
      },
      "QueryReply": {
        "additionalProperties": false,
        "properties": {
          "answer": {
            "type": "string"
          },
          "time_ms": {
            "format": "double",
            "type": "number"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "QueryRow": {
        "additionalProperties": false,
        "properties": {
          "client": {
            "$ref": "#/components/schemas/QueryClient"
          },
          "cname": {
            "type": "string"
          },
          "dnssec": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "ecs": {
            "type": "string"
          },
          "ede": {
            "format": "int64",
            "type": "integer"
          },
          "flags": {
            "$ref": "#/components/schemas/Flags"
          },
          "id": {
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "list": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "policy": {
            "type": "string"
          },
          "proto": {
            "type": "string"
          },
          "qclass": {
            "format": "int64",
            "type": "integer"
          },
          "qtype": {
            "type": "string"
          },
          "rcode": {
            "type": "string"
          },
          "reply": {
            "$ref": "#/components/schemas/QueryReply"
          },
          "rule": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "status_class": {
            "type": "string"
          },
          "trace_id": {
            "type": "string"
          },
          "ts": {
            "format": "date-time",
            "type": "string"
          },
          "upstream": {
            "type": "string"
          },
          "zone": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "ts",
          "node",
          "proto",
          "client",
          "domain",
          "qtype",
          "qclass",
          "status",
          "status_class",
          "rcode",
          "reply",
          "dnssec",
          "flags"
        ],
        "type": "object"
      },
      "QuerylogStatusBody": {
        "additionalProperties": false,
        "properties": {
          "db_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "oldest_ts": {
            "format": "date-time",
            "type": "string"
          },
          "partial": {
            "type": "boolean"
          },
          "privacy": {
            "type": "string"
          },
          "retention": {
            "$ref": "#/components/schemas/Retention"
          },
          "rows": {
            "format": "int64",
            "type": "integer"
          },
          "scope": {
            "type": "string"
          },
          "subscribers": {
            "format": "int64",
            "type": "integer"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "wal_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "writer": {
            "$ref": "#/components/schemas/Stats"
          }
        },
        "required": [
          "rows",
          "db_bytes",
          "wal_bytes",
          "privacy",
          "retention",
          "writer",
          "subscribers",
          "scope",
          "nodes",
          "partial",
          "took_ms"
        ],
        "type": "object"
      },
      "RecentBlockedBody": {
        "additionalProperties": false,
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/BlockedItem"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "scope": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "scope",
          "nodes",
          "partial",
          "took_ms"
        ],
        "type": "object"
      },
      "RecordBody": {
        "additionalProperties": false,
        "properties": {
          "dnsName": {
            "type": "string"
          },
          "kudurru": {
            "$ref": "#/components/schemas/EndpointExt"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "managedBy": {
            "type": "string"
          },
          "recordSet": {
            "type": "string"
          },
          "recordTTL": {
            "format": "int64",
            "type": "integer"
          },
          "recordType": {
            "type": "string"
          },
          "setIdentifier": {
            "type": "string"
          },
          "targets": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "recordSet",
          "dnsName",
          "recordType",
          "targets",
          "took_ms"
        ],
        "type": "object"
      },
      "RefreshBody": {
        "additionalProperties": false,
        "properties": {
          "list": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "list",
          "took_ms"
        ],
        "type": "object"
      },
      "Request": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string"
          },
          "ip": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "ua": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Resource": {
        "additionalProperties": false,
        "properties": {
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "Retention": {
        "additionalProperties": false,
        "properties": {
          "max_db_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "raw_seconds": {
            "format": "int64",
            "type": "integer"
          },
          "rollup_1d": {
            "type": "string"
          },
          "rollup_1h": {
            "type": "string"
          },
          "rollup_1m": {
            "type": "string"
          }
        },
        "required": [
          "raw_seconds",
          "max_db_bytes",
          "rollup_1m",
          "rollup_1h",
          "rollup_1d"
        ],
        "type": "object"
      },
      "RoleBindingInfo": {
        "additionalProperties": false,
        "properties": {
          "managedBy": {
            "type": "string"
          },
          "name": {
            "description": "The object name, or rbac.bindings[i] for config bindings.",
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "scope": {
            "$ref": "#/components/schemas/BindingScope"
          },
          "source": {
            "enum": [
              "config",
              "object"
            ],
            "type": "string"
          },
          "subjects": {
            "items": {
              "$ref": "#/components/schemas/BindingSubject"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "source",
          "name",
          "role",
          "scope",
          "subjects"
        ],
        "type": "object"
      },
      "SafeSearchEngine": {
        "additionalProperties": false,
        "properties": {
          "addresses": {
            "description": "Addresses answered directly when the vendor documents an address instead of a host name.",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "domains": {
            "description": "Number of host names rewritten.",
            "format": "int64",
            "type": "integer"
          },
          "icon": {
            "description": "Logo path, /api/v1/catalogue/icons/{slug}.svg; absent when there is none.",
            "type": "string"
          },
          "iconOnDark": {
            "description": "The logo drawn for dark backgrounds, when the default one is dark artwork.",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "list": {
            "description": "The list name the query log records for its rewrites (safesearch:\u003cid\u003e).",
            "type": "string"
          },
          "moderateTarget": {
            "description": "CNAME target in moderate mode (safeSearchMode: moderate); empty when the engine has one level.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "source": {
            "description": "The vendor documentation the rewrite follows.",
            "type": "string"
          },
          "target": {
            "description": "CNAME target in strict mode.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "list",
          "domains",
          "source"
        ],
        "type": "object"
      },
      "ServiceAccountInfo": {
        "additionalProperties": false,
        "properties": {
          "builtinAdmin": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          },
          "disabled": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "tokens": {
            "description": "Number of API tokens the account owns.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "namespace",
          "name",
          "disabled",
          "builtinAdmin",
          "tokens"
        ],
        "type": "object"
      },
      "SessionInfo": {
        "additionalProperties": false,
        "properties": {
          "csrf": {
            "description": "The X-Kudurru-CSRF value of the session.",
            "type": "string"
          },
          "expiresAt": {
            "description": "End of the session lifetime.",
            "format": "date-time",
            "type": "string"
          },
          "idleExpiresAt": {
            "description": "End of the session if idle.",
            "format": "date-time",
            "type": "string"
          },
          "mustChangePassword": {
            "description": "Every route but the self-service ones answers 403 password_change_required until POST /auth/password.",
            "type": "boolean"
          },
          "permissions": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "type": "object"
          },
          "principal": {
            "$ref": "#/components/schemas/SessionPrincipal"
          },
          "roles": {
            "description": "Effective grants: role, or role@kind:name for scoped grants.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "scopedPermissions": {
            "additionalProperties": {
              "additionalProperties": {
                "items": {
                  "type": "string"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "type": "object"
            },
            "description": "Verbs per resource for each scoped grant, keyed by scope (zone:home-example-com).",
            "type": "object"
          }
        },
        "required": [
          "principal",
          "roles",
          "permissions"
        ],
        "type": "object"
      },
      "SessionPrincipal": {
        "additionalProperties": false,
        "properties": {
          "authMethod": {
            "description": "cookie, token, jwt, k8s, ...",
            "type": "string"
          },
          "groups": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "kind": {
            "description": "User, ServiceAccount, KubernetesServiceAccount, LocalRoot or Node.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "provider": {
            "description": "local, or the identity provider id.",
            "type": "string"
          },
          "tokenID": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id",
          "name",
          "groups"
        ],
        "type": "object"
      },
      "SetBlockingInputBody": {
        "additionalProperties": false,
        "properties": {
          "blocking": {
            "type": "boolean"
          },
          "timer": {
            "format": "double",
            "minimum": 0,
            "type": "number"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "blocking"
        ],
        "type": "object"
      },
      "SettingField": {
        "additionalProperties": false,
        "properties": {
          "default": {},
          "enum": {
            "items": {
              "$ref": "#/components/schemas/SettingOption"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/SettingField"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "format": {
            "enum": [
              "ip",
              "ipv4",
              "ipv6",
              "cidr",
              "hostport",
              "url",
              "domain",
              "upstream",
              "email"
            ],
            "type": "string"
          },
          "help": {
            "type": "string"
          },
          "items": {
            "$ref": "#/components/schemas/SettingShape"
          },
          "keys": {
            "$ref": "#/components/schemas/SettingShape"
          },
          "label": {
            "type": "string"
          },
          "max": {
            "format": "int64",
            "type": "integer"
          },
          "min": {
            "format": "int64",
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "presets": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "ref": {
            "enum": [
              "upstreamGroup",
              "clientGroup",
              "blockList",
              "policy",
              "zone"
            ],
            "type": "string"
          },
          "required": {
            "type": "boolean"
          },
          "type": {
            "enum": [
              "string",
              "int",
              "bool",
              "duration",
              "bytes",
              "string[]",
              "list",
              "map",
              "object"
            ],
            "type": "string"
          },
          "values": {
            "$ref": "#/components/schemas/SettingShape"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object"
      },
      "SettingKey": {
        "additionalProperties": false,
        "properties": {
          "default": {},
          "enum": {
            "items": {
              "$ref": "#/components/schemas/SettingOption"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "envLocked": {
            "type": "boolean"
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/SettingField"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "format": {
            "enum": [
              "ip",
              "ipv4",
              "ipv6",
              "cidr",
              "hostport",
              "url",
              "domain",
              "upstream",
              "email"
            ],
            "type": "string"
          },
          "group": {
            "type": "string"
          },
          "help": {
            "type": "string"
          },
          "hostOnly": {
            "type": "boolean"
          },
          "items": {
            "$ref": "#/components/schemas/SettingShape"
          },
          "keys": {
            "$ref": "#/components/schemas/SettingShape"
          },
          "label": {
            "type": "string"
          },
          "max": {
            "format": "int64",
            "type": "integer"
          },
          "min": {
            "format": "int64",
            "type": "integer"
          },
          "path": {
            "type": "string"
          },
          "presets": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "ref": {
            "enum": [
              "upstreamGroup",
              "clientGroup",
              "blockList",
              "policy",
              "zone"
            ],
            "type": "string"
          },
          "restartRequired": {
            "type": "boolean"
          },
          "scope": {
            "enum": [
              "node",
              "cluster"
            ],
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "value": {},
          "values": {
            "$ref": "#/components/schemas/SettingShape"
          },
          "writeOnly": {
            "type": "boolean"
          }
        },
        "required": [
          "path",
          "type",
          "scope",
          "default",
          "help",
          "hostOnly",
          "envLocked",
          "restartRequired",
          "writeOnly",
          "value"
        ],
        "type": "object"
      },
      "SettingOption": {
        "additionalProperties": false,
        "properties": {
          "help": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "value",
          "label"
        ],
        "type": "object"
      },
      "SettingShape": {
        "additionalProperties": false,
        "properties": {
          "default": {},
          "enum": {
            "items": {
              "$ref": "#/components/schemas/SettingOption"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/SettingField"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "format": {
            "enum": [
              "ip",
              "ipv4",
              "ipv6",
              "cidr",
              "hostport",
              "url",
              "domain",
              "upstream",
              "email"
            ],
            "type": "string"
          },
          "items": {
            "$ref": "#/components/schemas/SettingShape"
          },
          "keys": {
            "$ref": "#/components/schemas/SettingShape"
          },
          "max": {
            "format": "int64",
            "type": "integer"
          },
          "min": {
            "format": "int64",
            "type": "integer"
          },
          "presets": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "ref": {
            "enum": [
              "upstreamGroup",
              "clientGroup",
              "blockList",
              "policy",
              "zone"
            ],
            "type": "string"
          },
          "type": {
            "enum": [
              "string",
              "int",
              "bool",
              "duration",
              "bytes",
              "string[]",
              "list",
              "map",
              "object"
            ],
            "type": "string"
          },
          "values": {
            "$ref": "#/components/schemas/SettingShape"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "SettingsBody": {
        "additionalProperties": false,
        "properties": {
          "changed": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "node": {
            "type": "string"
          },
          "persisted": {
            "type": "boolean"
          },
          "restartRequired": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "scope": {
            "enum": [
              "node",
              "cluster"
            ],
            "type": "string"
          },
          "settings": {
            "additionalProperties": {},
            "type": "object"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "scope",
          "node",
          "settings",
          "took_ms"
        ],
        "type": "object"
      },
      "SourceEntries": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Token for the next page; empty on the last page.",
            "type": "string"
          },
          "digest": {
            "description": "url and configMap: sha256 of the body this node holds.",
            "type": "string"
          },
          "excluded": {
            "description": "Entries switched off.",
            "format": "int64",
            "type": "integer"
          },
          "fetched": {
            "description": "url and configMap: when this node's body was fetched.",
            "format": "date-time",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/SourceEntry"
            },
            "type": "array"
          },
          "kind": {
            "enum": [
              "inline",
              "url",
              "configMap",
              "entries"
            ],
            "type": "string"
          },
          "matched": {
            "description": "Entries matching q and enabled.",
            "format": "int64",
            "type": "integer"
          },
          "stale": {
            "description": "This node's body is not the one status.sources[].digest publishes yet.",
            "type": "boolean"
          },
          "staleExcludes": {
            "description": "spec.sources[].exclude values that match no entry of the current body.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "total": {
            "description": "Entries in the source.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "matched",
          "excluded",
          "staleExcludes",
          "kind",
          "stale",
          "took_ms"
        ],
        "type": "object"
      },
      "SourceEntriesPatch": {
        "additionalProperties": false,
        "properties": {
          "add": {
            "description": "Inline sources only: lines to add.",
            "items": {
              "type": "string"
            },
            "maxItems": 10000,
            "type": [
              "array",
              "null"
            ]
          },
          "disable": {
            "description": "Entries to switch off: added to spec.sources[].exclude (enabled: false for structured entries).",
            "items": {
              "type": "string"
            },
            "maxItems": 10000,
            "type": [
              "array",
              "null"
            ]
          },
          "enable": {
            "description": "Entries (values as GET lists them) to switch back on.",
            "items": {
              "type": "string"
            },
            "maxItems": 10000,
            "type": [
              "array",
              "null"
            ]
          },
          "remove": {
            "description": "Inline sources only: lines to remove.",
            "items": {
              "type": "string"
            },
            "maxItems": 10000,
            "type": [
              "array",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "SourceEntriesResult": {
        "additionalProperties": false,
        "properties": {
          "added": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "disabled": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "enabled": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "excluded": {
            "description": "Exclude values, or structured entries switched off, after the change.",
            "format": "int64",
            "type": "integer"
          },
          "removed": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "resourceVersion": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "total": {
            "description": "Inline lines or structured entries after the change (0 for url and configMap sources).",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "added",
          "removed",
          "enabled",
          "disabled",
          "total",
          "excluded",
          "resourceVersion",
          "took_ms"
        ],
        "type": "object"
      },
      "SourceEntry": {
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "description": "false when switched off (spec.sources[].exclude, or enabled: false of a structured entry).",
            "type": "boolean"
          },
          "line": {
            "description": "1-based line of the body (inline: position in spec.sources[].inline; entries: position in spec.sources[].entries).",
            "format": "int64",
            "type": "integer"
          },
          "value": {
            "description": "inline: the line as written; url and configMap: the rule as the source's format normalises it (one item per host of a hosts line); entries: the rendered rule.",
            "type": "string"
          }
        },
        "required": [
          "value",
          "line",
          "enabled"
        ],
        "type": "object"
      },
      "Stats": {
        "additionalProperties": false,
        "properties": {
          "batches": {
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "rollup_flushes": {
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "rows": {
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "batches",
          "rows",
          "rollup_flushes"
        ],
        "type": "object"
      },
      "SuggestionsBody": {
        "additionalProperties": false,
        "properties": {
          "field": {
            "type": "string"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "scope": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "values": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "field",
          "values",
          "scope",
          "nodes",
          "partial",
          "took_ms"
        ],
        "type": "object"
      },
      "SummaryBody": {
        "additionalProperties": false,
        "properties": {
          "approximate": {
            "type": "boolean"
          },
          "clients": {
            "$ref": "#/components/schemas/SummaryClients"
          },
          "domains_on_lists": {
            "format": "int64",
            "type": "integer"
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "latency": {
            "$ref": "#/components/schemas/LatencySummary"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "protocols": {
            "additionalProperties": {
              "format": "int64",
              "type": "integer"
            },
            "type": "object"
          },
          "queries": {
            "$ref": "#/components/schemas/SummaryQueries"
          },
          "rcodes": {
            "additionalProperties": {
              "format": "int64",
              "type": "integer"
            },
            "type": "object"
          },
          "scope": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "types": {
            "additionalProperties": {
              "format": "int64",
              "type": "integer"
            },
            "type": "object"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "queries",
          "clients",
          "domains_on_lists",
          "rcodes",
          "protocols",
          "types",
          "latency",
          "approximate",
          "scope",
          "nodes",
          "partial",
          "from",
          "until",
          "took_ms"
        ],
        "type": "object"
      },
      "SummaryClients": {
        "additionalProperties": false,
        "properties": {
          "active": {
            "format": "int64",
            "type": "integer"
          },
          "total": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "active",
          "total"
        ],
        "type": "object"
      },
      "SummaryQueries": {
        "additionalProperties": false,
        "properties": {
          "authoritative": {
            "format": "int64",
            "type": "integer"
          },
          "blocked": {
            "format": "int64",
            "type": "integer"
          },
          "cached": {
            "format": "int64",
            "type": "integer"
          },
          "dropped": {
            "format": "int64",
            "type": "integer"
          },
          "forwarded": {
            "format": "int64",
            "type": "integer"
          },
          "other": {
            "format": "int64",
            "type": "integer"
          },
          "percent_blocked": {
            "format": "double",
            "type": "number"
          },
          "qps_1m": {
            "format": "double",
            "type": "number"
          },
          "qps_avg": {
            "format": "double",
            "type": "number"
          },
          "total": {
            "format": "int64",
            "type": "integer"
          },
          "unique_domains": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "total",
          "blocked",
          "percent_blocked",
          "cached",
          "forwarded",
          "authoritative",
          "dropped",
          "other",
          "unique_domains",
          "qps_1m",
          "qps_avg"
        ],
        "type": "object"
      },
      "TimeseriesBody": {
        "additionalProperties": false,
        "properties": {
          "approximate": {
            "type": "boolean"
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "points": {
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "scope": {
            "type": "string"
          },
          "step": {
            "format": "int64",
            "type": "integer"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "step",
          "points",
          "approximate",
          "scope",
          "nodes",
          "partial",
          "from",
          "until",
          "took_ms"
        ],
        "type": "object"
      },
      "TokenInfo": {
        "additionalProperties": false,
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "expiresAt": {
            "description": "null: the token never expires.",
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "lastUsedAt": {
            "format": "date-time",
            "type": "string"
          },
          "lastUsedIP": {
            "type": "string"
          },
          "owner": {
            "$ref": "#/components/schemas/TokenOwner"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "owner",
          "createdAt",
          "expiresAt"
        ],
        "type": "object"
      },
      "TokenOwner": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "The owner's principal id (local:alice, oidc:...).",
            "type": "string"
          },
          "kind": {
            "enum": [
              "User",
              "ServiceAccount"
            ],
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "namespace": {
            "description": "The service account's namespace.",
            "type": "string"
          },
          "provider": {
            "description": "local, or the identity provider id.",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "name"
        ],
        "type": "object"
      },
      "TopBody": {
        "additionalProperties": false,
        "properties": {
          "approximate": {
            "type": "boolean"
          },
          "blocked": {
            "type": "boolean"
          },
          "cutoff_rank": {
            "format": "int64",
            "type": "integer"
          },
          "dim": {
            "type": "string"
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/TopItem"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "scope": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "total_in_window": {
            "format": "int64",
            "type": "integer"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          },
          "upstreams": {
            "items": {
              "$ref": "#/components/schemas/UpstreamItem"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "dim",
          "blocked",
          "items",
          "total_in_window",
          "approximate",
          "scope",
          "nodes",
          "partial",
          "from",
          "until",
          "took_ms"
        ],
        "type": "object"
      },
      "TopItem": {
        "additionalProperties": false,
        "properties": {
          "blocked": {
            "format": "int64",
            "type": "integer"
          },
          "count": {
            "format": "int64",
            "type": "integer"
          },
          "group": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "last_seen": {
            "description": "Clients only: the newest query from the client on this node (hour precision once its query rows aged out).",
            "format": "date-time",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "percent": {
            "format": "double",
            "type": "number"
          },
          "total": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "key",
          "count",
          "total",
          "blocked",
          "percent"
        ],
        "type": "object"
      },
      "UnblockAllow": {
        "additionalProperties": false,
        "properties": {
          "added": {
            "description": "The approval added the entry (it was not on the list); only then does its end remove it.",
            "type": "boolean"
          },
          "entry": {
            "description": "The line in the list's inline source ui.",
            "type": "string"
          },
          "expiresAt": {
            "description": "End of a time-limited approval; absent is permanent.",
            "format": "date-time",
            "type": "string"
          },
          "group": {
            "description": "The ClientGroup of a group approval, ns/name.",
            "type": "string"
          },
          "list": {
            "description": "The allow BlockList, ns/name (ui-allow or ui-allow-\u003cgroup\u003e).",
            "type": "string"
          },
          "match": {
            "enum": [
              "exact",
              "subdomains"
            ],
            "type": "string"
          },
          "policies": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "removed": {
            "description": "When the entry was released (expiry or revocation).",
            "format": "date-time",
            "type": "string"
          },
          "scope": {
            "enum": [
              "everyone",
              "group"
            ],
            "type": "string"
          }
        },
        "required": [
          "scope",
          "match",
          "list",
          "entry",
          "added",
          "policies"
        ],
        "type": "object"
      },
      "UnblockApproval": {
        "additionalProperties": false,
        "properties": {
          "duration": {
            "description": "Go duration (1h, 24h, 168h); empty is permanent. The entry is removed when it ends.",
            "maxLength": 32,
            "type": "string"
          },
          "group": {
            "description": "The ClientGroup of a group approval (ns/name or a name in the request's namespace); default the request's first group.",
            "maxLength": 300,
            "type": "string"
          },
          "match": {
            "description": "exact: the name only; subdomains: the name and every name below it (||name^). Default exact.",
            "enum": [
              "exact",
              "subdomains"
            ],
            "type": "string"
          },
          "note": {
            "description": "Shown to the user on the block page.",
            "maxLength": 500,
            "type": "string"
          },
          "scope": {
            "description": "everyone: the everyone list ui-allow, attached to every policy of the namespace that kudurru may edit (policies managed by a file or an integration are skipped). group: ui-allow-\u003cgroup\u003e, attached to the policies of the group. Default everyone. Approving needs only unblockrequests.decide: the approval writes the allow list and the policy references itself.",
            "enum": [
              "everyone",
              "group"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "UnblockBlock": {
        "additionalProperties": false,
        "properties": {
          "kind": {
            "description": "list, service, safesearch, policy (allow-only) or cname.",
            "type": "string"
          },
          "list": {
            "description": "The deciding list: ns/name, service:\u003cid\u003e or safesearch:\u003cengine\u003e.",
            "type": "string"
          },
          "policy": {
            "description": "The client's policy, ns/name.",
            "type": "string"
          },
          "rule": {
            "type": "string"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "UnblockCounts": {
        "additionalProperties": false,
        "properties": {
          "approved": {
            "format": "int64",
            "type": "integer"
          },
          "denied": {
            "format": "int64",
            "type": "integer"
          },
          "expired": {
            "format": "int64",
            "type": "integer"
          },
          "pending": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "pending",
          "approved",
          "denied",
          "expired"
        ],
        "type": "object"
      },
      "UnblockDecision": {
        "additionalProperties": false,
        "properties": {
          "allow": {
            "$ref": "#/components/schemas/UnblockAllow"
          },
          "decidedAt": {
            "format": "date-time",
            "type": "string"
          },
          "decidedBy": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "state": {
            "enum": [
              "Approved",
              "Denied",
              "Expired"
            ],
            "type": "string"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "UnblockDecisionResult": {
        "additionalProperties": false,
        "properties": {
          "attached": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "flushed": {
            "format": "int64",
            "type": "integer"
          },
          "request": {
            "$ref": "#/components/schemas/UnblockRequest"
          },
          "skipped": {
            "description": "Policies that should reference the list but are managed elsewhere; add the list there.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "request",
          "attached",
          "skipped",
          "flushed",
          "took_ms"
        ],
        "type": "object"
      },
      "UnblockDenial": {
        "additionalProperties": false,
        "properties": {
          "note": {
            "description": "Shown to the user on the block page.",
            "maxLength": 500,
            "type": "string"
          }
        },
        "type": "object"
      },
      "UnblockRequest": {
        "additionalProperties": false,
        "properties": {
          "allow": {
            "$ref": "#/components/schemas/UnblockAllow"
          },
          "block": {
            "$ref": "#/components/schemas/UnblockBlock"
          },
          "client": {
            "description": "The client address (full), its /24 or /48 network address (prefix), or absent (hidden).",
            "type": "string"
          },
          "clientPrivacy": {
            "description": "How the client was recorded under querylog.privacy.",
            "enum": [
              "full",
              "prefix",
              "hidden"
            ],
            "type": "string"
          },
          "contact": {
            "description": "Plain text the user typed.",
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "decidedAt": {
            "format": "date-time",
            "type": "string"
          },
          "decidedBy": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "expiresAt": {
            "description": "When a pending request expires undecided (unblockRequests.pendingExpiry).",
            "format": "date-time",
            "type": "string"
          },
          "groups": {
            "description": "The client's ClientGroups at request time, ns/name.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "history": {
            "items": {
              "$ref": "#/components/schemas/UnblockDecision"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "node": {
            "description": "The node whose block page took the request.",
            "type": "string"
          },
          "note": {
            "description": "The administrator's note, shown on the block page.",
            "type": "string"
          },
          "policies": {
            "description": "The client's policies at request time, highest priority first.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "reason": {
            "description": "Plain text the user typed (at most 500 characters).",
            "type": "string"
          },
          "requestedAt": {
            "description": "The latest submission.",
            "format": "date-time",
            "type": "string"
          },
          "requesterName": {
            "description": "Plain text the user typed.",
            "type": "string"
          },
          "resourceVersion": {
            "type": "string"
          },
          "state": {
            "enum": [
              "Pending",
              "Approved",
              "Denied",
              "Expired"
            ],
            "type": "string"
          },
          "submissions": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "namespace",
          "name",
          "domain",
          "clientPrivacy",
          "groups",
          "policies",
          "createdAt",
          "requestedAt",
          "submissions",
          "state",
          "history",
          "resourceVersion"
        ],
        "type": "object"
      },
      "UnblockRequestList": {
        "additionalProperties": false,
        "properties": {
          "continue": {
            "description": "Token for the next page; empty on the last page.",
            "type": "string"
          },
          "counts": {
            "$ref": "#/components/schemas/UnblockCounts",
            "description": "Every request by state (not only this page)."
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/UnblockRequest"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "items",
          "counts",
          "took_ms"
        ],
        "type": "object"
      },
      "UpstreamItem": {
        "additionalProperties": false,
        "properties": {
          "addr": {
            "type": "string"
          },
          "avg_ms": {
            "format": "double",
            "type": "number"
          },
          "errors": {
            "format": "int64",
            "type": "integer"
          },
          "p95_ms": {
            "format": "double",
            "type": "number"
          },
          "percent": {
            "format": "double",
            "type": "number"
          },
          "timeouts": {
            "format": "int64",
            "type": "integer"
          },
          "total": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "addr",
          "total",
          "errors",
          "timeouts",
          "percent",
          "avg_ms",
          "p95_ms"
        ],
        "type": "object"
      },
      "UpstreamServer": {
        "additionalProperties": false,
        "properties": {
          "backoff_until": {
            "format": "date-time",
            "type": "string"
          },
          "consecutive_failures": {
            "format": "int64",
            "type": "integer"
          },
          "group": {
            "type": "string"
          },
          "healthy": {
            "type": "boolean"
          },
          "rtt_ms": {
            "format": "double",
            "type": "number"
          },
          "server": {
            "type": "string"
          }
        },
        "required": [
          "group",
          "server",
          "healthy",
          "consecutive_failures",
          "rtt_ms"
        ],
        "type": "object"
      },
      "UpstreamsBody": {
        "additionalProperties": false,
        "properties": {
          "approximate": {
            "type": "boolean"
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeResult"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "partial": {
            "type": "boolean"
          },
          "scope": {
            "type": "string"
          },
          "servers": {
            "items": {
              "$ref": "#/components/schemas/UpstreamServer"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "until": {
            "format": "date-time",
            "type": "string"
          },
          "upstreams": {
            "items": {
              "$ref": "#/components/schemas/UpstreamItem"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "servers",
          "upstreams",
          "approximate",
          "scope",
          "nodes",
          "partial",
          "from",
          "until",
          "took_ms"
        ],
        "type": "object"
      },
      "VersionOutputBody": {
        "additionalProperties": false,
        "properties": {
          "api": {
            "description": "API version (the /api/v1 contract).",
            "type": "string"
          },
          "commit": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "go": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "platform": {
            "type": "string"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "version",
          "commit",
          "date",
          "go",
          "platform",
          "node",
          "api",
          "took_ms"
        ],
        "type": "object"
      },
      "ZoneDeleteResult": {
        "additionalProperties": false,
        "properties": {
          "dryRun": {
            "type": "boolean"
          },
          "endpointCount": {
            "format": "int64",
            "type": "integer"
          },
          "flushed": {
            "format": "int64",
            "type": "integer"
          },
          "recordSetCount": {
            "format": "int64",
            "type": "integer"
          },
          "recordSets": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "type": {
            "type": "string"
          },
          "zone": {
            "type": "string"
          },
          "zoneName": {
            "type": "string"
          }
        },
        "required": [
          "zone",
          "zoneName",
          "type",
          "dryRun",
          "recordSets",
          "recordSetCount",
          "endpointCount",
          "flushed",
          "took_ms"
        ],
        "type": "object"
      },
      "ZoneDetail": {
        "additionalProperties": false,
        "properties": {
          "deleteRefusal": {
            "enum": [
              "default_zone",
              "managed_by"
            ],
            "type": "string"
          },
          "managedBy": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "object": {
            "additionalProperties": {},
            "type": "object"
          },
          "ready": {
            "type": "boolean"
          },
          "reason": {
            "type": "string"
          },
          "recordCount": {
            "format": "int64",
            "type": "integer"
          },
          "recordSets": {
            "format": "int64",
            "type": "integer"
          },
          "resourceVersion": {
            "type": "string"
          },
          "serial": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "took_ms": {
            "description": "Server-side duration of the request in milliseconds.",
            "format": "double",
            "type": "number"
          },
          "type": {
            "type": "string"
          },
          "upstreamGroup": {
            "type": "string"
          },
          "zoneName": {
            "type": "string"
          }
        },
        "required": [
          "object",
          "name",
          "zoneName",
          "type",
          "serial",
          "recordCount",
          "recordSets",
          "ready",
          "took_ms"
        ],
        "type": "object"
      },
      "ZoneRecord": {
        "additionalProperties": false,
        "properties": {
          "dnsName": {
            "type": "string"
          },
          "kudurru": {
            "$ref": "#/components/schemas/EndpointExt"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "managedBy": {
            "type": "string"
          },
          "recordSet": {
            "type": "string"
          },
          "recordTTL": {
            "format": "int64",
            "type": "integer"
          },
          "recordType": {
            "type": "string"
          },
          "setIdentifier": {
            "type": "string"
          },
          "targets": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "recordSet",
          "dnsName",
          "recordType",
          "targets"
        ],
        "type": "object"
      },
      "ZoneSummary": {
        "additionalProperties": false,
        "properties": {
          "deleteRefusal": {
            "enum": [
              "default_zone",
              "managed_by"
            ],
            "type": "string"
          },
          "managedBy": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "ready": {
            "type": "boolean"
          },
          "reason": {
            "type": "string"
          },
          "recordCount": {
            "format": "int64",
            "type": "integer"
          },
          "recordSets": {
            "format": "int64",
            "type": "integer"
          },
          "resourceVersion": {
            "type": "string"
          },
          "serial": {
            "format": "int32",
            "minimum": 0,
            "type": "integer"
          },
          "type": {
            "type": "string"
          },
          "upstreamGroup": {
            "type": "string"
          },
          "zoneName": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "zoneName",
          "type",
          "serial",
          "recordCount",
          "recordSets",
          "ready"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearer": {
        "description": "kdr_\u003cid\u003e_\u003csecret\u003e API token, OIDC ID token or Kubernetes ServiceAccount token",
        "scheme": "bearer",
        "type": "http"
      },
      "cookie": {
        "description": "Session cookie; unsafe methods also need X-Kudurru-CSRF",
        "in": "cookie",
        "name": "kudurru_session",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "description": "The kudurru REST API (docs/architecture.md §10). Errors are {error:{key,message,hint}, took_ms}; lists are {items, continue, took_ms} with opaque keyset continue tokens.",
    "license": {
      "name": "Apache-2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0"
    },
    "title": "kudurru API",
    "version": "v1"
  },
  "openapi": "3.1.0",
  "paths": {
    "/allowlist": {
      "get": {
        "description": "Allowed names are never blocked: an allow entry wins over every block list of the policies it applies through. Entries are stored on the BlockLists ui-allow (everyone) and ui-allow-\u003cgroup\u003e (one ClientGroup), referenced by the policies concerned. Newest first.",
        "operationId": "listAllowlist",
        "parameters": [
          {
            "description": "Only entries, or only list exceptions.",
            "explode": false,
            "in": "query",
            "name": "kind",
            "schema": {
              "description": "Only entries, or only list exceptions.",
              "enum": [
                "entry",
                "exception"
              ],
              "type": "string"
            }
          },
          {
            "description": "Only this namespace (default: every namespace).",
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "description": "Only this namespace (default: every namespace).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "type",
            "schema": {
              "enum": [
                "exact",
                "wildcard",
                "regex"
              ],
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "enabled",
            "schema": {
              "enum": [
                "true",
                "false"
              ],
              "type": "string"
            }
          },
          {
            "description": "everyone, a ClientGroup (ns/name), or list:\u003cns/name\u003e for the exceptions of one list.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "everyone, a ClientGroup (ns/name), or list:\u003cns/name\u003e for the exceptions of one list.",
              "type": "string"
            }
          },
          {
            "description": "Substring of the value, comment or list, case-insensitive.",
            "explode": false,
            "in": "query",
            "name": "q",
            "schema": {
              "description": "Substring of the value, comment or list, case-insensitive.",
              "type": "string"
            }
          },
          {
            "description": "Page size (default 100).",
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "description": "Page size (default 100).",
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainEntries"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List Allowlist entries",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "post": {
        "description": "Adds one entry per value, of one type and scope. A value that exists already gets the new comment and switch (when given) and its scope widened. The lists are created on demand and referenced from the policies of the scope (every policy of the namespace for everyone, the policies naming the group otherwise); policies managed by a file or an integration are reported in skipped. Refused values are listed in processed.errors; a scope error (unknown group, no policy covers it) answers 422.",
        "operationId": "createAllowlistEntries",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainEntriesCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWriteResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Add Allowlist entries",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/allowlist/{id}": {
      "delete": {
        "description": "Removes every copy; a list left empty is deleted and its policy references removed. For a list exception: removes the exclusion, so the list's entry applies again.",
        "operationId": "deleteAllowlistEntry",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a Allowlist entry",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      },
      "get": {
        "operationId": "getAllowlistEntry",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainEntry"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get a Allowlist entry",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "patch": {
        "description": "Switch it on or off, change its comment, value, type or scope. A new scope moves the entry between the everyone list and the group lists.",
        "operationId": "patchAllowlistEntry",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainEntryPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWriteResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Change a Allowlist entry",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/allowlist:batch": {
      "post": {
        "operationId": "batchAllowlistEntries",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainEntriesBatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWriteResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Switch on, off or delete several Allowlist entries",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/apply": {
      "post": {
        "description": "Whole-object apply with manager \"api\". The body is multi-document YAML (application/yaml) or JSON (an object, an array of objects, or a kind: List). Every document is authorized, validated and applied on its own; the response lists one result per document in order.",
        "operationId": "apply",
        "parameters": [
          {
            "in": "header",
            "name": "Content-Type",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              }
            },
            "application/yaml": {
              "schema": {
                "contentMediaType": "application/octet-stream",
                "format": "binary",
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListApplyResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Apply objects (multi-document YAML or a JSON array)",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "write"
        }
      }
    },
    "/audit": {
      "get": {
        "operationId": "listAudit",
        "parameters": [
          {
            "description": "Resource kind (DNSZone, blocking, ...).",
            "explode": false,
            "in": "query",
            "name": "kind",
            "schema": {
              "description": "Resource kind (DNSZone, blocking, ...).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "name",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Actor name or \u003ckind\u003e:\u003cname\u003e.",
            "explode": false,
            "in": "query",
            "name": "actor",
            "schema": {
              "description": "Actor name or \u003ckind\u003e:\u003cname\u003e.",
              "type": "string"
            }
          },
          {
            "description": "RFC 3339.",
            "explode": false,
            "in": "query",
            "name": "since",
            "schema": {
              "description": "RFC 3339.",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "description": "cursor_next (or continue) of the previous page, read with the same order.",
            "explode": false,
            "in": "query",
            "name": "cursor",
            "schema": {
              "description": "cursor_next (or continue) of the previous page, read with the same order.",
              "type": "string"
            }
          },
          {
            "description": "Same as cursor.",
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "description": "Same as cursor.",
              "type": "string"
            }
          },
          {
            "description": "asc: oldest first (the default); desc: newest first.",
            "explode": false,
            "in": "query",
            "name": "order",
            "schema": {
              "default": "asc",
              "description": "asc: oldest first (the default); desc: newest first.",
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPage"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Audit events of this node (oldest first; order=desc for newest first)",
        "tags": [
          "audit"
        ],
        "x-kudurru-permission": {
          "resource": "audit",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/audit/export": {
      "get": {
        "operationId": "exportAudit",
        "parameters": [
          {
            "description": "Resource kind (DNSZone, blocking, ...).",
            "explode": false,
            "in": "query",
            "name": "kind",
            "schema": {
              "description": "Resource kind (DNSZone, blocking, ...).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "name",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Actor name or \u003ckind\u003e:\u003cname\u003e.",
            "explode": false,
            "in": "query",
            "name": "actor",
            "schema": {
              "description": "Actor name or \u003ckind\u003e:\u003cname\u003e.",
              "type": "string"
            }
          },
          {
            "description": "RFC 3339.",
            "explode": false,
            "in": "query",
            "name": "since",
            "schema": {
              "description": "RFC 3339.",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "description": "cursor_next (or continue) of the previous page, read with the same order.",
            "explode": false,
            "in": "query",
            "name": "cursor",
            "schema": {
              "description": "cursor_next (or continue) of the previous page, read with the same order.",
              "type": "string"
            }
          },
          {
            "description": "Same as cursor.",
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "description": "Same as cursor.",
              "type": "string"
            }
          },
          {
            "description": "asc: oldest first (the default); desc: newest first.",
            "explode": false,
            "in": "query",
            "name": "order",
            "schema": {
              "default": "asc",
              "description": "asc: oldest first (the default); desc: newest first.",
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/x-ndjson": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "application/x-ndjson, one AuditEvent per line"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Audit events as JSON lines",
        "tags": [
          "audit"
        ],
        "x-kudurru-permission": {
          "resource": "audit",
          "scope": "cluster",
          "verb": "export"
        }
      }
    },
    "/auth/login": {
      "post": {
        "description": "Brute-force limited per client address and user: 429 with Retry-After.",
        "operationId": "login",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Local login (sets the session cookie)",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "public"
      }
    },
    "/auth/logout": {
      "post": {
        "operationId": "logout",
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Clear the session cookie",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "authenticated"
      }
    },
    "/auth/me": {
      "get": {
        "operationId": "me",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "The authenticated principal, roles, permissions and CSRF token",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "authenticated"
      }
    },
    "/auth/oidc/{idp}/callback": {
      "get": {
        "operationId": "oidcCallback",
        "parameters": [
          {
            "in": "path",
            "name": "idp",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "OIDC redirect target (302 to the app)",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "public"
      }
    },
    "/auth/oidc/{idp}/start": {
      "get": {
        "operationId": "oidcStart",
        "parameters": [
          {
            "description": "Same-origin path to return to after the login.",
            "in": "query",
            "name": "next",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "idp",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Start an OIDC login (302 to the IdP)",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "public"
      }
    },
    "/auth/password": {
      "post": {
        "operationId": "changePassword",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PasswordChangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Change the local user's own password (a cookie session gets a new cookie)",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "authenticated"
      }
    },
    "/auth/status": {
      "get": {
        "operationId": "authStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthStatus"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Login options",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "public"
      }
    },
    "/auth/tokens": {
      "get": {
        "operationId": "listTokens",
        "parameters": [
          {
            "description": "true lists every owner's tokens (needs tokens.read).",
            "in": "query",
            "name": "all",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthListTokenInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List own API tokens",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "authenticated"
      },
      "post": {
        "operationId": "createToken",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedToken"
                }
              }
            },
            "description": "Created"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create a personal API token (the secret is returned once)",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "authenticated"
      }
    },
    "/auth/tokens/{id}": {
      "delete": {
        "operationId": "deleteToken",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Revoke one API token (someone else's needs tokens.delete)",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "authenticated"
      },
      "get": {
        "operationId": "getToken",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get one API token (someone else's needs tokens.read)",
        "tags": [
          "auth"
        ],
        "x-kudurru-permission": "authenticated"
      }
    },
    "/blocklists": {
      "get": {
        "operationId": "listBlocklists",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "labelSelector",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObjectList"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List blocklists",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "post": {
        "operationId": "createBlocklists",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create a BlockList",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/blocklists/_search": {
      "get": {
        "operationId": "searchBlockLists",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "domain",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListListSearchHit"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Which lists contain a domain",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/blocklists/{namespace}/{name}": {
      "delete": {
        "operationId": "deleteBlocklists",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a BlockList",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "delete"
        }
      },
      "get": {
        "operationId": "getBlocklists",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get a BlockList",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "put": {
        "operationId": "putBlocklists",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create or replace a BlockList",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/blocklists/{namespace}/{name}/refresh": {
      "post": {
        "operationId": "refreshBlockList",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RefreshBody"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Fetch a BlockList's sources now",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "refresh"
        }
      }
    },
    "/blocklists/{namespace}/{name}/sources/{source}/entries": {
      "get": {
        "description": "Every source type: the lines of an inline source, the structured entries of an entries source, and for URL and ConfigMap sources the rules of the body this node's list cache holds (the leader fetches it, replicas pull it by digest; 503 while this node has none). Each item says whether it is switched on. {source} is the source's name (spec.sources[].name, else the name status.sources[] reports) or its index. q filters by substring (case-insensitive), enabled by switch. The ETag header is the object's resourceVersion for If-Match on PATCH.",
        "operationId": "listSourceEntries",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Source name or index.",
            "in": "path",
            "name": "source",
            "required": true,
            "schema": {
              "description": "Source name or index.",
              "type": "string"
            }
          },
          {
            "description": "Substring filter, case-insensitive.",
            "explode": false,
            "in": "query",
            "name": "q",
            "schema": {
              "description": "Substring filter, case-insensitive.",
              "type": "string"
            }
          },
          {
            "description": "Only entries switched on (true) or off (false).",
            "explode": false,
            "in": "query",
            "name": "enabled",
            "schema": {
              "description": "Only entries switched on (true) or off (false).",
              "enum": [
                "true",
                "false"
              ],
              "type": "string"
            }
          },
          {
            "description": "Page size (default 100).",
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "description": "Page size (default 100).",
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceEntries"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the BlockList.",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Page through the entries of a BlockList source",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "patch": {
        "description": "Edits the source through the same write path as PUT /blocklists/{namespace}/{name}: If-Match, the managedBy rules and validation apply (a bootstrap-managed list such as the starter list is taken over, D84). enable and disable work for every source type: they edit spec.sources[].exclude, each value normalised to the rule(s) the source's format reads from it, or the enabled switch of structured entries. Switching an entry off affects only this list; to allow a name everywhere use the Allowlist. add and remove edit spec.sources[].inline and are for inline sources only; entries already present are not added twice and removals of absent entries are ignored.",
        "operationId": "patchSourceEntries",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Source name or index.",
            "in": "path",
            "name": "source",
            "required": true,
            "schema": {
              "description": "Source name or index.",
              "type": "string"
            }
          },
          {
            "description": "Apply only when the stored resourceVersion equals this value (412 otherwise).",
            "in": "header",
            "name": "If-Match",
            "schema": {
              "description": "Apply only when the stored resourceVersion equals this value (412 otherwise).",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SourceEntriesPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceEntriesResult"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Switch entries of a BlockList source off and on, add and remove inline entries",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/blocklists:batchDelete": {
      "post": {
        "operationId": "batchDeleteBlocklists",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchDeleteInputBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Processed"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete several blocklists",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "delete"
        }
      }
    },
    "/blockpage/preview": {
      "get": {
        "description": "The same HTML the block page listener serves, marked as a preview. It renders whether or not blockPage.enabled is set.",
        "operationId": "previewBlockPage",
        "parameters": [
          {
            "description": "Blocked name to show; default blocked.example. The reason shown is an example: the preview reads neither the query log nor the policies.",
            "explode": false,
            "in": "query",
            "name": "domain",
            "schema": {
              "description": "Blocked name to show; default blocked.example. The reason shown is an example: the preview reads neither the query log nor the policies.",
              "maxLength": 253,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "contentEncoding": "base64",
                  "type": "string"
                }
              }
            },
            "description": "OK",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "Content-Security-Policy": {
                "schema": {
                  "type": "string"
                }
              },
              "Content-Type": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Frame-Options": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Render the block page (text/html) with the current blockPage settings",
        "tags": [
          "settings"
        ],
        "x-kudurru-permission": {
          "resource": "settings",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/cache/flush": {
      "post": {
        "operationId": "flushCache",
        "parameters": [
          {
            "description": "Same as the body field.",
            "explode": false,
            "in": "query",
            "name": "name",
            "schema": {
              "description": "Same as the body field.",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlushInputBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlushResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Flush the response cache (or one name)",
        "tags": [
          "runtime"
        ],
        "x-kudurru-permission": {
          "resource": "cache",
          "scope": "cluster",
          "verb": "flush"
        }
      }
    },
    "/catalogue": {
      "get": {
        "operationId": "getCatalogue",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogueInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "The blocked-services and safe-search catalogue in service",
        "tags": [
          "catalogue"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/catalogue/categories": {
      "get": {
        "operationId": "listCatalogueCategories",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListCatalogueCategory"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Categories Policy.spec.blockedCategories can block",
        "tags": [
          "catalogue"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/catalogue/icons": {
      "get": {
        "operationId": "listCatalogueIcons",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListCatalogueIcon"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Logos embedded in this build",
        "tags": [
          "catalogue"
        ],
        "x-kudurru-permission": "public"
      }
    },
    "/catalogue/icons/{file}": {
      "get": {
        "description": "{file} is {slug}.svg. The SVGs come from homarr-labs/dashboard-icons (Apache-2.0) and carry no script, event handler or external reference. Strong ETag; If-None-Match answers 304. Show them with \u003cimg\u003e; the logos are trademarks of their owners and identify the service only.",
        "operationId": "getCatalogueIcon",
        "parameters": [
          {
            "description": "{slug}.svg",
            "in": "path",
            "name": "file",
            "required": true,
            "schema": {
              "description": "{slug}.svg",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-None-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "image/svg+xml": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The SVG document",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "Content-Length": {
                "schema": {
                  "type": "string"
                }
              },
              "Content-Security-Policy": {
                "schema": {
                  "type": "string"
                }
              },
              "Content-Type": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "Not modified"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "One embedded logo (image/svg+xml)",
        "tags": [
          "catalogue"
        ],
        "x-kudurru-permission": "public"
      }
    },
    "/catalogue/safesearch": {
      "get": {
        "operationId": "listCatalogueSafeSearch",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListSafeSearchEngine"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Search engines Policy.spec.safeSearch rewrites",
        "tags": [
          "catalogue"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/catalogue/services": {
      "get": {
        "operationId": "listCatalogueServices",
        "parameters": [
          {
            "description": "Only services of this category.",
            "explode": false,
            "in": "query",
            "name": "category",
            "schema": {
              "description": "Only services of this category.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListCatalogueService"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Services Policy.spec.blockedServices can block",
        "tags": [
          "catalogue"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/clientgroups": {
      "get": {
        "operationId": "listClientgroups",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "labelSelector",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObjectList"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List clientgroups",
        "tags": [
          "clientgroups"
        ],
        "x-kudurru-permission": {
          "resource": "clientgroups",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "post": {
        "operationId": "createClientgroups",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create a ClientGroup",
        "tags": [
          "clientgroups"
        ],
        "x-kudurru-permission": {
          "resource": "clientgroups",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/clientgroups/{namespace}/{name}": {
      "delete": {
        "operationId": "deleteClientgroups",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a ClientGroup",
        "tags": [
          "clientgroups"
        ],
        "x-kudurru-permission": {
          "resource": "clientgroups",
          "scope": "cluster",
          "verb": "delete"
        }
      },
      "get": {
        "operationId": "getClientgroups",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get a ClientGroup",
        "tags": [
          "clientgroups"
        ],
        "x-kudurru-permission": {
          "resource": "clientgroups",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "put": {
        "operationId": "putClientgroups",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create or replace a ClientGroup",
        "tags": [
          "clientgroups"
        ],
        "x-kudurru-permission": {
          "resource": "clientgroups",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/clientgroups:batchDelete": {
      "post": {
        "operationId": "batchDeleteClientgroups",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchDeleteInputBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Processed"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete several clientgroups",
        "tags": [
          "clientgroups"
        ],
        "x-kudurru-permission": {
          "resource": "clientgroups",
          "scope": "cluster",
          "verb": "delete"
        }
      }
    },
    "/clients": {
      "get": {
        "operationId": "listClients",
        "parameters": [
          {
            "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
            "explode": false,
            "in": "query",
            "name": "window",
            "schema": {
              "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
              "type": "string"
            }
          },
          {
            "description": "Window start (RFC 3339); overrides window.",
            "explode": false,
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Window start (RFC 3339); overrides window.",
              "type": "string"
            }
          },
          {
            "description": "Window end (RFC 3339); default now.",
            "explode": false,
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Window end (RFC 3339); default now.",
              "type": "string"
            }
          },
          {
            "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
              "enum": [
                "node",
                "cluster",
                ""
              ],
              "type": "string"
            }
          },
          {
            "description": "Node to answer for (scope=node); only this node is served today.",
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "description": "Node to answer for (scope=node); only this node is served today.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListClientItem"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Client inventory from the query log",
        "tags": [
          "stats"
        ],
        "x-kudurru-permission": {
          "resource": "clients",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/cluster": {
      "get": {
        "operationId": "getCluster",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClusterInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Store, leader and shape",
        "tags": [
          "cluster"
        ],
        "x-kudurru-permission": {
          "resource": "cluster",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/denylist": {
      "get": {
        "description": "Denied names are blocked for the clients the entry applies to, unless an allow list of their policy allows them. Entries are stored on the BlockLists ui-deny (everyone) and ui-deny-\u003cgroup\u003e (one ClientGroup), referenced by the policies concerned. Newest first.",
        "operationId": "listDenylist",
        "parameters": [
          {
            "description": "Only entries, or only list exceptions.",
            "explode": false,
            "in": "query",
            "name": "kind",
            "schema": {
              "description": "Only entries, or only list exceptions.",
              "enum": [
                "entry",
                "exception"
              ],
              "type": "string"
            }
          },
          {
            "description": "Only this namespace (default: every namespace).",
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "description": "Only this namespace (default: every namespace).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "type",
            "schema": {
              "enum": [
                "exact",
                "wildcard",
                "regex"
              ],
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "enabled",
            "schema": {
              "enum": [
                "true",
                "false"
              ],
              "type": "string"
            }
          },
          {
            "description": "everyone, a ClientGroup (ns/name), or list:\u003cns/name\u003e for the exceptions of one list.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "everyone, a ClientGroup (ns/name), or list:\u003cns/name\u003e for the exceptions of one list.",
              "type": "string"
            }
          },
          {
            "description": "Substring of the value, comment or list, case-insensitive.",
            "explode": false,
            "in": "query",
            "name": "q",
            "schema": {
              "description": "Substring of the value, comment or list, case-insensitive.",
              "type": "string"
            }
          },
          {
            "description": "Page size (default 100).",
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "description": "Page size (default 100).",
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainEntries"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List Denylist entries",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "post": {
        "description": "Adds one entry per value, of one type and scope. A value that exists already gets the new comment and switch (when given) and its scope widened. The lists are created on demand and referenced from the policies of the scope (every policy of the namespace for everyone, the policies naming the group otherwise); policies managed by a file or an integration are reported in skipped. Refused values are listed in processed.errors; a scope error (unknown group, no policy covers it) answers 422.",
        "operationId": "createDenylistEntries",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainEntriesCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWriteResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Add Denylist entries",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/denylist/{id}": {
      "delete": {
        "description": "Removes every copy; a list left empty is deleted and its policy references removed. For a list exception: removes the exclusion, so the list's entry applies again.",
        "operationId": "deleteDenylistEntry",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a Denylist entry",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      },
      "get": {
        "operationId": "getDenylistEntry",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainEntry"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get a Denylist entry",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "patch": {
        "description": "Switch it on or off, change its comment, value, type or scope. A new scope moves the entry between the everyone list and the group lists.",
        "operationId": "patchDenylistEntry",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainEntryPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWriteResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Change a Denylist entry",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/denylist:batch": {
      "post": {
        "operationId": "batchDenylistEntries",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainEntriesBatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWriteResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Switch on, off or delete several Denylist entries",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/dns/blocking": {
      "get": {
        "operationId": "getBlocking",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockingState"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Blocking state of this node",
        "tags": [
          "runtime"
        ],
        "x-kudurru-permission": {
          "resource": "blocking",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "post": {
        "operationId": "setBlocking",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetBlockingInputBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockingState"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Enable blocking, or disable it for a while",
        "tags": [
          "runtime"
        ],
        "x-kudurru-permission": {
          "resource": "blocking",
          "scope": "cluster",
          "verb": "toggle"
        }
      }
    },
    "/dns/query": {
      "post": {
        "operationId": "dnsQuery",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DNSQueryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DNSQueryResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Run one query through the pipeline in-process (built-in dig)",
        "tags": [
          "runtime"
        ],
        "x-kudurru-permission": {
          "resource": "stats",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/dnsrecordsets:batchDelete": {
      "post": {
        "operationId": "batchDeleteDnsrecordsets",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchDeleteInputBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Processed"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete several dnsrecordsets",
        "tags": [
          "dnsrecordsets"
        ],
        "x-kudurru-permission": {
          "resource": "records",
          "scope": "cluster or per object",
          "verb": "delete"
        }
      }
    },
    "/dnszones:batchDelete": {
      "post": {
        "description": "Each zone is deleted alone, as DELETE /objects/dnszones/{name} does: a zone that record sets still reference fails with zone_not_empty and the root zone with default_zone (D148).",
        "operationId": "batchDeleteDnszones",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchDeleteInputBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Processed"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete several dnszones",
        "tags": [
          "dnszones"
        ],
        "x-kudurru-permission": {
          "resource": "zones",
          "scope": "cluster or per object",
          "verb": "delete"
        }
      }
    },
    "/doctor": {
      "get": {
        "operationId": "doctor",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DoctorReport"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "The checks of `kudurru doctor` as this node sees them",
        "tags": [
          "cluster"
        ],
        "x-kudurru-permission": {
          "resource": "settings",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/domains": {
      "get": {
        "description": "The entries of both the Allowlist and the Denylist, newest first, with the same filters as GET /allowlist.",
        "operationId": "listDomainEntries",
        "parameters": [
          {
            "description": "Only Allowlist (allow) or Denylist (deny) entries.",
            "explode": false,
            "in": "query",
            "name": "action",
            "schema": {
              "description": "Only Allowlist (allow) or Denylist (deny) entries.",
              "enum": [
                "allow",
                "deny"
              ],
              "type": "string"
            }
          },
          {
            "description": "Only entries, or only list exceptions.",
            "explode": false,
            "in": "query",
            "name": "kind",
            "schema": {
              "description": "Only entries, or only list exceptions.",
              "enum": [
                "entry",
                "exception"
              ],
              "type": "string"
            }
          },
          {
            "description": "Only this namespace (default: every namespace).",
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "description": "Only this namespace (default: every namespace).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "type",
            "schema": {
              "enum": [
                "exact",
                "wildcard",
                "regex"
              ],
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "enabled",
            "schema": {
              "enum": [
                "true",
                "false"
              ],
              "type": "string"
            }
          },
          {
            "description": "everyone, a ClientGroup (ns/name), or list:\u003cns/name\u003e for the exceptions of one list.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "everyone, a ClientGroup (ns/name), or list:\u003cns/name\u003e for the exceptions of one list.",
              "type": "string"
            }
          },
          {
            "description": "Substring of the value, comment or list, case-insensitive.",
            "explode": false,
            "in": "query",
            "name": "q",
            "schema": {
              "description": "Substring of the value, comment or list, case-insensitive.",
              "type": "string"
            }
          },
          {
            "description": "Page size (default 100).",
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "description": "Page size (default 100).",
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainEntries"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List Allowlist and Denylist entries together",
        "tags": [
          "domains"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/domains/{action}/{kind}": {
      "post": {
        "operationId": "addDomains",
        "parameters": [
          {
            "in": "path",
            "name": "action",
            "required": true,
            "schema": {
              "enum": [
                "allow",
                "deny"
              ],
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "enum": [
                "exact",
                "regex"
              ],
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Processed"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Allow or deny domains through the UI lists",
        "tags": [
          "blocklists"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/edge": {
      "get": {
        "operationId": "getEdge",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EdgeInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "dnsdist backends and VIP owners",
        "tags": [
          "cluster"
        ],
        "x-kudurru-permission": {
          "resource": "edge",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/iam/identityproviders": {
      "get": {
        "operationId": "listIdentityProviders",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthListIdentityProviderInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List identityproviders (read-only; the write API is v0.2)",
        "tags": [
          "iam"
        ],
        "x-kudurru-permission": {
          "resource": "identityproviders",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/iam/rolebindings": {
      "get": {
        "operationId": "listRoleBindings",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthListRoleBindingInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List rolebindings (read-only; the write API is v0.2)",
        "tags": [
          "iam"
        ],
        "x-kudurru-permission": {
          "resource": "rolebindings",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/iam/serviceaccounts": {
      "get": {
        "operationId": "listServiceAccounts",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthListServiceAccountInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List serviceaccounts (read-only; the write API is v0.2)",
        "tags": [
          "iam"
        ],
        "x-kudurru-permission": {
          "resource": "serviceaccounts",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/iam/users": {
      "get": {
        "operationId": "listUsers",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthListIAMUser"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List users (read-only; the write API is v0.2)",
        "tags": [
          "iam"
        ],
        "x-kudurru-permission": {
          "resource": "users",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/info/messages": {
      "get": {
        "operationId": "infoMessages",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDiagnosisMessage"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Diagnosis messages (objects, policies, lists, readiness)",
        "tags": [
          "cluster"
        ],
        "x-kudurru-permission": {
          "resource": "settings",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/node/config": {
      "get": {
        "operationId": "getNodeConfig",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "This node's host-local settings (redacted)",
        "tags": [
          "settings"
        ],
        "x-kudurru-permission": {
          "resource": "settings",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "patch": {
        "operationId": "patchNodeConfig",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Change this node's settings (hostOnly keys refused)",
        "tags": [
          "settings"
        ],
        "x-kudurru-permission": {
          "resource": "node",
          "scope": "cluster",
          "verb": "config"
        }
      }
    },
    "/nodes": {
      "get": {
        "operationId": "listNodes",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListNodeInfo"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Nodes of the cluster",
        "tags": [
          "cluster"
        ],
        "x-kudurru-permission": {
          "resource": "cluster",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/nodes/{name}/health": {
      "get": {
        "operationId": "nodeHealth",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NodeHealth"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Readiness detail of one node",
        "tags": [
          "cluster"
        ],
        "x-kudurru-permission": {
          "resource": "cluster",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/objects/{kind}": {
      "get": {
        "operationId": "listObjects",
        "parameters": [
          {
            "description": "Lower-case plural kind: dnszones, dnsrecordsets, blocklists, clientgroups, policies.",
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "description": "Lower-case plural kind: dnszones, dnsrecordsets, blocklists, clientgroups, policies.",
              "type": "string"
            }
          },
          {
            "description": "Only objects in this namespace (namespaced kinds).",
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "description": "Only objects in this namespace (namespaced kinds).",
              "type": "string"
            }
          },
          {
            "description": "Equality selector, e.g. app=web,tier=edge.",
            "explode": false,
            "in": "query",
            "name": "labelSelector",
            "schema": {
              "description": "Equality selector, e.g. app=web,tier=edge.",
              "type": "string"
            }
          },
          {
            "description": "Page size (default 500).",
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "description": "Page size (default 500).",
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "description": "Token from the previous page.",
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "description": "Token from the previous page.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObjectList"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List objects of a kind",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "read"
        }
      },
      "post": {
        "operationId": "createObject",
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create an object (409 when it exists)",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "write"
        }
      }
    },
    "/objects/{kind}/{namespace}/{name}": {
      "delete": {
        "operationId": "deleteObject",
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a namespaced object",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "delete"
        }
      },
      "get": {
        "operationId": "getObject",
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get a namespaced object",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "read"
        }
      },
      "put": {
        "operationId": "putObject",
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Replace only when the stored resourceVersion equals this value (412 otherwise).",
            "in": "header",
            "name": "If-Match",
            "schema": {
              "description": "Replace only when the stored resourceVersion equals this value (412 otherwise).",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create or replace a namespaced object",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "write"
        }
      }
    },
    "/objects/{kind}/{name}": {
      "delete": {
        "description": "A DNSZone is deleted alone only when no DNSRecordSet references it: otherwise 409 zone_not_empty (error.objects lists them; DELETE /zones/{zone} deletes the zone with its record sets). The root zone \".\" is 409 default_zone (D148).",
        "operationId": "deleteClusterObject",
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a cluster-scoped object",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "delete"
        }
      },
      "get": {
        "operationId": "getClusterObject",
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get a cluster-scoped object (dnszones)",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "read"
        }
      },
      "put": {
        "operationId": "putClusterObject",
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Replace only when the stored resourceVersion equals this value (412 otherwise).",
            "in": "header",
            "name": "If-Match",
            "schema": {
              "description": "Replace only when the stored resourceVersion equals this value (412 otherwise).",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create or replace a cluster-scoped object",
        "tags": [
          "objects"
        ],
        "x-kudurru-permission": {
          "resources": [
            "zones",
            "records",
            "blocklists",
            "clientgroups",
            "policies"
          ],
          "scope": "cluster or per object",
          "verb": "write"
        }
      }
    },
    "/policies": {
      "get": {
        "operationId": "listPolicies",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "labelSelector",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObjectList"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List policies",
        "tags": [
          "policies"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "post": {
        "operationId": "createPolicies",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create a Policy",
        "tags": [
          "policies"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/policies/{namespace}/{name}": {
      "delete": {
        "operationId": "deletePolicies",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a Policy",
        "tags": [
          "policies"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "delete"
        }
      },
      "get": {
        "operationId": "getPolicies",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get a Policy",
        "tags": [
          "policies"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "put": {
        "operationId": "putPolicies",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {},
                  "type": "object"
                }
              }
            },
            "description": "Created",
            "headers": {
              "ETag": {
                "schema": {
                  "description": "The resourceVersion of the object.",
                  "type": "string"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create or replace a Policy",
        "tags": [
          "policies"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/policies/{namespace}/{name}/state": {
      "get": {
        "description": "Enabled and active now (schedule), rank against other policies, the state of every referenced group, list, service and the upstream group, and the last 24 hours of the queries this policy decided on this node.",
        "operationId": "getPolicyState",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PolicyState"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "A policy's current state",
        "tags": [
          "policies"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/policies:batchDelete": {
      "post": {
        "operationId": "batchDeletePolicies",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchDeleteInputBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Processed"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete several policies",
        "tags": [
          "policies"
        ],
        "x-kudurru-permission": {
          "resource": "policies",
          "scope": "cluster",
          "verb": "delete"
        }
      }
    },
    "/queries": {
      "get": {
        "operationId": "listQueries",
        "parameters": [
          {
            "description": "IP, CIDR or client name (* wildcards).",
            "explode": false,
            "in": "query",
            "name": "client",
            "schema": {
              "description": "IP, CIDR or client name (* wildcards).",
              "type": "string"
            }
          },
          {
            "description": "Exact name or * wildcard.",
            "explode": false,
            "in": "query",
            "name": "domain",
            "schema": {
              "description": "Exact name or * wildcard.",
              "type": "string"
            }
          },
          {
            "description": "Comma-separated statuses (blocked_list,forwarded).",
            "explode": false,
            "in": "query",
            "name": "status",
            "schema": {
              "description": "Comma-separated statuses (blocked_list,forwarded).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "status_class",
            "schema": {
              "enum": [
                "permitted",
                "cached",
                "blocked",
                "error",
                ""
              ],
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "qtype",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "upstream",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "list",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "zone",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Deciding policy, namespace/name.",
            "explode": false,
            "in": "query",
            "name": "policy",
            "schema": {
              "description": "Deciding policy, namespace/name.",
              "type": "string"
            }
          },
          {
            "description": "RFC 3339, inclusive.",
            "explode": false,
            "in": "query",
            "name": "since",
            "schema": {
              "description": "RFC 3339, inclusive.",
              "type": "string"
            }
          },
          {
            "description": "RFC 3339, exclusive.",
            "explode": false,
            "in": "query",
            "name": "until",
            "schema": {
              "description": "RFC 3339, exclusive.",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueriesBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Query log page (keyset cursor, newest first)",
        "tags": [
          "querylog"
        ],
        "x-kudurru-permission": {
          "resource": "querylog",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/queries/stream": {
      "get": {
        "description": "text/event-stream of query rows: `id:` is the query id, `event: query`, `data:` one JSON row shaped like GET /queries items. Reconnects send Last-Event-ID and receive the rows after it from the in-memory ring first. A comment line is sent every 15 s.",
        "operationId": "queryStream",
        "parameters": [
          {
            "description": "IP, CIDR or client name (* wildcards).",
            "explode": false,
            "in": "query",
            "name": "client",
            "schema": {
              "description": "IP, CIDR or client name (* wildcards).",
              "type": "string"
            }
          },
          {
            "description": "Exact name or * wildcard.",
            "explode": false,
            "in": "query",
            "name": "domain",
            "schema": {
              "description": "Exact name or * wildcard.",
              "type": "string"
            }
          },
          {
            "description": "Comma-separated statuses (blocked_list,forwarded).",
            "explode": false,
            "in": "query",
            "name": "status",
            "schema": {
              "description": "Comma-separated statuses (blocked_list,forwarded).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "status_class",
            "schema": {
              "enum": [
                "permitted",
                "cached",
                "blocked",
                "error",
                ""
              ],
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "qtype",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "upstream",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "list",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "zone",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Deciding policy, namespace/name.",
            "explode": false,
            "in": "query",
            "name": "policy",
            "schema": {
              "description": "Deciding policy, namespace/name.",
              "type": "string"
            }
          },
          {
            "description": "RFC 3339, inclusive.",
            "explode": false,
            "in": "query",
            "name": "since",
            "schema": {
              "description": "RFC 3339, inclusive.",
              "type": "string"
            }
          },
          {
            "description": "RFC 3339, exclusive.",
            "explode": false,
            "in": "query",
            "name": "until",
            "schema": {
              "description": "RFC 3339, exclusive.",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Resume after this event id (EventSource reconnects send it).",
            "in": "header",
            "name": "Last-Event-ID",
            "schema": {
              "description": "Resume after this event id (EventSource reconnects send it).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "last_event_id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Event stream"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Live query tail (Server-Sent Events)",
        "tags": [
          "querylog"
        ],
        "x-kudurru-permission": {
          "resource": "querylog",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/queries/suggestions": {
      "get": {
        "operationId": "querySuggestions",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "field",
            "required": true,
            "schema": {
              "enum": [
                "domain",
                "client",
                "upstream",
                "list",
                "zone",
                "policy"
              ],
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "prefix",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "n",
            "schema": {
              "format": "int64",
              "maximum": 100,
              "minimum": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuggestionsBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Filter value suggestions",
        "tags": [
          "querylog"
        ],
        "x-kudurru-permission": {
          "resource": "querylog",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/queries/{id}/actions": {
      "post": {
        "operationId": "queryAction",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "int64",
              "minimum": 0,
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryActionInputBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Processed"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Allow or deny the domain of a logged query",
        "tags": [
          "querylog"
        ],
        "x-kudurru-permission": {
          "resource": "blocklists",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/querylog": {
      "delete": {
        "operationId": "purgeQuerylog",
        "parameters": [
          {
            "description": "Delete rows older than this instant (RFC 3339); absent deletes every row.",
            "explode": false,
            "in": "query",
            "name": "before",
            "schema": {
              "description": "Delete rows older than this instant (RFC 3339); absent deletes every row.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurgeResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete query-log rows",
        "tags": [
          "querylog"
        ],
        "x-kudurru-permission": {
          "resource": "querylog",
          "scope": "cluster",
          "verb": "purge"
        }
      }
    },
    "/querylog/status": {
      "get": {
        "operationId": "querylogStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuerylogStatusBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Query-log size, retention and writer state",
        "tags": [
          "querylog"
        ],
        "x-kudurru-permission": {
          "resource": "querylog",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/settings": {
      "get": {
        "operationId": "getSettings",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Cluster-scope settings (redacted)",
        "tags": [
          "settings"
        ],
        "x-kudurru-permission": {
          "resource": "settings",
          "scope": "cluster",
          "verb": "read"
        }
      },
      "patch": {
        "operationId": "patchSettings",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": {},
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Change cluster-scope settings (JSON merge patch)",
        "tags": [
          "settings"
        ],
        "x-kudurru-permission": {
          "resource": "settings",
          "scope": "cluster",
          "verb": "write"
        }
      }
    },
    "/settings/_schema": {
      "get": {
        "operationId": "settingsSchema",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListSettingKey"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "The settings metadata table",
        "tags": [
          "settings"
        ],
        "x-kudurru-permission": {
          "resource": "settings",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/stats/clients/timeseries": {
      "get": {
        "operationId": "statsClientTimeseries",
        "parameters": [
          {
            "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
            "explode": false,
            "in": "query",
            "name": "window",
            "schema": {
              "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
              "type": "string"
            }
          },
          {
            "description": "Window start (RFC 3339); overrides window.",
            "explode": false,
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Window start (RFC 3339); overrides window.",
              "type": "string"
            }
          },
          {
            "description": "Window end (RFC 3339); default now.",
            "explode": false,
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Window end (RFC 3339); default now.",
              "type": "string"
            }
          },
          {
            "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
              "enum": [
                "node",
                "cluster",
                ""
              ],
              "type": "string"
            }
          },
          {
            "description": "Node to answer for (scope=node); only this node is served today.",
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "description": "Node to answer for (scope=node); only this node is served today.",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "step",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "n",
            "schema": {
              "format": "int64",
              "maximum": 100,
              "minimum": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientTimeseriesBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Per-client query volume over time",
        "tags": [
          "stats"
        ],
        "x-kudurru-permission": {
          "resource": "stats",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/stats/recent_blocked": {
      "get": {
        "operationId": "statsRecentBlocked",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "n",
            "schema": {
              "format": "int64",
              "maximum": 100,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecentBlockedBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Most recently blocked queries",
        "tags": [
          "stats"
        ],
        "x-kudurru-permission": {
          "resource": "querylog",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/stats/summary": {
      "get": {
        "operationId": "statsSummary",
        "parameters": [
          {
            "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
            "explode": false,
            "in": "query",
            "name": "window",
            "schema": {
              "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
              "type": "string"
            }
          },
          {
            "description": "Window start (RFC 3339); overrides window.",
            "explode": false,
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Window start (RFC 3339); overrides window.",
              "type": "string"
            }
          },
          {
            "description": "Window end (RFC 3339); default now.",
            "explode": false,
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Window end (RFC 3339); default now.",
              "type": "string"
            }
          },
          {
            "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
              "enum": [
                "node",
                "cluster",
                ""
              ],
              "type": "string"
            }
          },
          {
            "description": "Node to answer for (scope=node); only this node is served today.",
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "description": "Node to answer for (scope=node); only this node is served today.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SummaryBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Stat tiles and sidebar counters",
        "tags": [
          "stats"
        ],
        "x-kudurru-permission": {
          "resource": "stats",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/stats/timeseries": {
      "get": {
        "operationId": "statsTimeseries",
        "parameters": [
          {
            "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
            "explode": false,
            "in": "query",
            "name": "window",
            "schema": {
              "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
              "type": "string"
            }
          },
          {
            "description": "Window start (RFC 3339); overrides window.",
            "explode": false,
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Window start (RFC 3339); overrides window.",
              "type": "string"
            }
          },
          {
            "description": "Window end (RFC 3339); default now.",
            "explode": false,
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Window end (RFC 3339); default now.",
              "type": "string"
            }
          },
          {
            "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
              "enum": [
                "node",
                "cluster",
                ""
              ],
              "type": "string"
            }
          },
          {
            "description": "Node to answer for (scope=node); only this node is served today.",
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "description": "Node to answer for (scope=node); only this node is served today.",
              "type": "string"
            }
          },
          {
            "description": "Bucket width (Go duration) or auto (default).",
            "explode": false,
            "in": "query",
            "name": "step",
            "schema": {
              "description": "Bucket width (Go duration) or auto (default).",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeseriesBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Query volume by status class over time",
        "tags": [
          "stats"
        ],
        "x-kudurru-permission": {
          "resource": "stats",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/stats/top": {
      "get": {
        "operationId": "statsTop",
        "parameters": [
          {
            "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
            "explode": false,
            "in": "query",
            "name": "window",
            "schema": {
              "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
              "type": "string"
            }
          },
          {
            "description": "Window start (RFC 3339); overrides window.",
            "explode": false,
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Window start (RFC 3339); overrides window.",
              "type": "string"
            }
          },
          {
            "description": "Window end (RFC 3339); default now.",
            "explode": false,
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Window end (RFC 3339); default now.",
              "type": "string"
            }
          },
          {
            "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
              "enum": [
                "node",
                "cluster",
                ""
              ],
              "type": "string"
            }
          },
          {
            "description": "Node to answer for (scope=node); only this node is served today.",
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "description": "Node to answer for (scope=node); only this node is served today.",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "dim",
            "required": true,
            "schema": {
              "enum": [
                "domains",
                "clients",
                "upstreams",
                "lists",
                "zones"
              ],
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "n",
            "schema": {
              "format": "int64",
              "maximum": 100,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "blocked",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TopBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Top domains, clients, upstreams, lists or zones",
        "tags": [
          "stats"
        ],
        "x-kudurru-permission": {
          "resource": "stats",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/stats/upstreams": {
      "get": {
        "operationId": "statsUpstreams",
        "parameters": [
          {
            "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
            "explode": false,
            "in": "query",
            "name": "window",
            "schema": {
              "description": "Window ending now, as a Go duration (24h, 7d is 168h); default 24h.",
              "type": "string"
            }
          },
          {
            "description": "Window start (RFC 3339); overrides window.",
            "explode": false,
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Window start (RFC 3339); overrides window.",
              "type": "string"
            }
          },
          {
            "description": "Window end (RFC 3339); default now.",
            "explode": false,
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Window end (RFC 3339); default now.",
              "type": "string"
            }
          },
          {
            "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
            "explode": false,
            "in": "query",
            "name": "scope",
            "schema": {
              "description": "node (default) or cluster; cluster is answered by this node until scatter-gather lands.",
              "enum": [
                "node",
                "cluster",
                ""
              ],
              "type": "string"
            }
          },
          {
            "description": "Node to answer for (scope=node); only this node is served today.",
            "explode": false,
            "in": "query",
            "name": "node",
            "schema": {
              "description": "Node to answer for (scope=node); only this node is served today.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpstreamsBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Traffic and health per upstream",
        "tags": [
          "stats"
        ],
        "x-kudurru-permission": {
          "resource": "stats",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/unblockrequests": {
      "get": {
        "description": "Cluster-wide: the requests are UnblockRequest objects in the store. counts covers every request, so ?state=Pending\u0026limit=1 is the pending count.",
        "operationId": "listUnblockRequests",
        "parameters": [
          {
            "description": "Only requests in this state.",
            "explode": false,
            "in": "query",
            "name": "state",
            "schema": {
              "description": "Only requests in this state.",
              "enum": [
                "Pending",
                "Approved",
                "Denied",
                "Expired"
              ],
              "type": "string"
            }
          },
          {
            "description": "Page size (default 100).",
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "description": "Page size (default 100).",
              "format": "int64",
              "maximum": 500,
              "minimum": 0,
              "type": "integer"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "continue",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnblockRequestList"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List the unblock requests users made on the block page, newest first",
        "tags": [
          "unblockrequests"
        ],
        "x-kudurru-permission": {
          "resource": "unblockrequests",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/unblockrequests/{namespace}/{name}": {
      "delete": {
        "description": "A permanent approval's entry stays on its list. A time-limited approval in force answers 409: deny it first, which removes its entry.",
        "operationId": "deleteUnblockRequest",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete an unblock request",
        "tags": [
          "unblockrequests"
        ],
        "x-kudurru-permission": {
          "resource": "unblockrequests",
          "scope": "cluster",
          "verb": "delete"
        }
      },
      "get": {
        "operationId": "getUnblockRequest",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnblockRequest"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get an unblock request",
        "tags": [
          "unblockrequests"
        ],
        "x-kudurru-permission": {
          "resource": "unblockrequests",
          "scope": "cluster",
          "verb": "read"
        }
      }
    },
    "/unblockrequests/{namespace}/{name}/approve": {
      "post": {
        "description": "Adds the name to the allow list of the scope (creating the list and attaching it to the policies concerned), records the decision and flushes the name from this node's response cache. Every node recompiles its lists and flushes its local edge cache. A time-limited approval's entry is removed by the leader when it ends. There is no per-client scope: a policy applies to ClientGroups, and a one-client group would take the client out of its own group's policy.",
        "operationId": "approveUnblockRequest",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnblockApproval"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnblockDecisionResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Approve an unblock request: add the allow entry",
        "tags": [
          "unblockrequests"
        ],
        "x-kudurru-permission": {
          "resource": "unblockrequests",
          "scope": "cluster",
          "verb": "decide"
        }
      }
    },
    "/unblockrequests/{namespace}/{name}/deny": {
      "post": {
        "operationId": "denyUnblockRequest",
        "parameters": [
          {
            "in": "path",
            "name": "namespace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnblockDenial"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnblockDecisionResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Deny an unblock request (revokes an approval in force)",
        "tags": [
          "unblockrequests"
        ],
        "x-kudurru-permission": {
          "resource": "unblockrequests",
          "scope": "cluster",
          "verb": "decide"
        }
      }
    },
    "/version": {
      "get": {
        "operationId": "getVersion",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VersionOutputBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Build information of this node",
        "tags": [
          "meta"
        ],
        "x-kudurru-permission": "public"
      }
    },
    "/zones": {
      "get": {
        "operationId": "listZones",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListZoneSummary"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List zones with serial, record count and readiness",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "zones",
          "scope": "cluster or per object",
          "verb": "read"
        }
      }
    },
    "/zones/{zone}": {
      "delete": {
        "description": "Deletes the DNSZone and every DNSRecordSet whose zoneRef names it, in any namespace (D148): in one transaction on the sqlite driver; on the kube driver record sets first and the zone last, so a failure keeps the zone and the delete can be retried. Needs zones.delete on the zone, and records.delete on it when record sets exist. 409 default_zone for the root zone \".\"; 409 managed_by (error.objects lists them) when the zone or a record set is managed by a file, an integration, Kubernetes or the system. ?dryRun=true runs every check and answers the same summary without deleting. Each object delete is audited by the store; the API adds one zones.delete event.",
        "operationId": "deleteZone",
        "parameters": [
          {
            "description": "DNSZone object name.",
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "description": "DNSZone object name.",
              "type": "string"
            }
          },
          {
            "description": "Run every check and report what would be deleted, without deleting.",
            "explode": false,
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "Run every check and report what would be deleted, without deleting.",
              "type": "boolean"
            }
          },
          {
            "description": "Delete only when the zone's resourceVersion equals this value (412 otherwise).",
            "in": "header",
            "name": "If-Match",
            "schema": {
              "description": "Delete only when the zone's resourceVersion equals this value (412 otherwise).",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ZoneDeleteResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete a zone with every record set that references it",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "zones",
          "scope": "zone",
          "verb": "delete"
        }
      },
      "get": {
        "operationId": "getZone",
        "parameters": [
          {
            "description": "DNSZone object name.",
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "description": "DNSZone object name.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ZoneDetail"
                }
              }
            },
            "description": "OK",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Get one zone",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "zones",
          "scope": "zone",
          "verb": "read"
        }
      }
    },
    "/zones/{zone}/export": {
      "get": {
        "operationId": "exportZone",
        "parameters": [
          {
            "description": "DNSZone object name.",
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "description": "DNSZone object name.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "contentEncoding": "base64",
                  "type": "string"
                }
              }
            },
            "description": "OK",
            "headers": {
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                }
              },
              "Content-Type": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Export the served zone as a BIND master file (text/dns)",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "zones",
          "scope": "zone",
          "verb": "read"
        }
      }
    },
    "/zones/{zone}/import": {
      "post": {
        "operationId": "importZone",
        "parameters": [
          {
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Zone apex when the DNSZone does not exist yet (it is created).",
            "explode": false,
            "in": "query",
            "name": "origin",
            "schema": {
              "description": "Zone apex when the DNSZone does not exist yet (it is created).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "text/dns": {
              "schema": {
                "contentMediaType": "application/octet-stream",
                "format": "binary",
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResult"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Import a BIND master file (text/dns)",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "records",
          "scope": "zone",
          "verb": "write"
        }
      }
    },
    "/zones/{zone}/notify": {
      "post": {
        "operationId": "notifyZone",
        "parameters": [
          {
            "description": "DNSZone object name.",
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "description": "DNSZone object name.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotifyResult"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Send NOTIFY for the zone now",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "zones",
          "scope": "zone",
          "verb": "transfer"
        }
      }
    },
    "/zones/{zone}/records": {
      "get": {
        "operationId": "listZoneRecords",
        "parameters": [
          {
            "description": "DNSZone object name.",
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "description": "DNSZone object name.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListZoneRecord"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "List the endpoints of a zone across record sets",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "records",
          "scope": "zone",
          "verb": "read"
        }
      },
      "post": {
        "operationId": "upsertZoneRecord",
        "parameters": [
          {
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "DNSRecordSet to write; default api-\u003czone\u003e.",
            "explode": false,
            "in": "query",
            "name": "recordSet",
            "schema": {
              "description": "DNSRecordSet to write; default api-\u003czone\u003e.",
              "type": "string"
            }
          },
          {
            "description": "Namespace of the record set; default \"default\".",
            "explode": false,
            "in": "query",
            "name": "namespace",
            "schema": {
              "description": "Namespace of the record set; default \"default\".",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Endpoint"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordBody"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Create or replace one endpoint in a record set",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "records",
          "scope": "zone",
          "verb": "write"
        }
      }
    },
    "/zones/{zone}/records/{name}/{type}": {
      "delete": {
        "operationId": "deleteZoneRecord",
        "parameters": [
          {
            "in": "path",
            "name": "zone",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Owner name, relative to the zone or absolute.",
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "description": "Owner name, relative to the zone or absolute.",
              "type": "string"
            }
          },
          {
            "description": "Record type, e.g. A.",
            "in": "path",
            "name": "type",
            "required": true,
            "schema": {
              "description": "Record type, e.g. A.",
              "type": "string"
            }
          },
          {
            "description": "Only this DNSRecordSet (namespace/name or name).",
            "explode": false,
            "in": "query",
            "name": "recordSet",
            "schema": {
              "description": "Only this DNSRecordSet (namespace/name or name).",
              "type": "string"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "setIdentifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "412": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Precondition Failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Delete the endpoints of one name and type",
        "tags": [
          "zones"
        ],
        "x-kudurru-permission": {
          "resource": "records",
          "scope": "zone",
          "verb": "delete"
        }
      }
    }
  },
  "security": [
    {
      "bearer": []
    },
    {
      "cookie": []
    }
  ],
  "servers": [
    {
      "url": "/api/v1"
    }
  ]
}
