{
  "openapi": "3.0.1",
  "info": {
    "description": "DNS API documentation",
    "title": "AdGuard DNS API",
    "version": "1.15"
  },
  "servers": [
    {
      "url": "https://api.adguard-dns.io"
    }
  ],
  "security": [
    {
      "AuthToken": []
    },
    {
      "ApiKey": []
    }
  ],
  "tags": [
    {
      "description": "Operations for obtaining and managing OAuth2 access tokens.\nSupports three grant types: password with optional 2FA, refresh token, and authorization code with PKCE.\nUse these endpoints to authenticate users and manage session lifecycle.\n",
      "name": "Authentication"
    },
    {
      "description": "Operations for managing dedicated IPv4 addresses.\nA dedicated IP address provides a static DNS resolution endpoint for the account.\nSupports listing allocated addresses and allocating new ones.\n",
      "name": "Dedicated IP addresses"
    },
    {
      "description": "Operations for viewing and managing the DNS query log.\nThe query log stores DNS resolution records with filtering, device, and domain information.\nSupports retrieving filtered query logs and clearing the log history.\n",
      "name": "Query log"
    },
    {
      "description": "Operations for retrieving DNS query statistics.\nStatistics provide aggregated data about DNS queries grouped by time, country, domain, device, company, and category.\nSupports time-bounded queries with optional filters and cursor-based pagination.\n",
      "name": "Statistics"
    },
    {
      "description": "Operations for managing DNS server profiles.\nA DNS server profile defines filtering, parental control, and access settings for a group of devices.\nSupports creating, updating, removing DNS servers, managing their settings, and listing with pagination.\n",
      "name": "DNS servers"
    },
    {
      "description": "Operations for retrieving account information.\nThe account represents a user's subscription with associated limits and resources.\nSupports reading current usage and maximum values for devices, DNS servers, queries, and rules.\n",
      "name": "Account"
    },
    {
      "description": "Operations for retrieving reference data used in DNS server configuration.\nReference data includes filter lists for content blocking, web services for parental control,\nand filtering categories for content classification.\nSupports listing all available entries for each data type.\n",
      "name": "Reference data"
    },
    {
      "description": "Operations for managing DNS client devices.\nA device represents a single client (phone, tablet, computer) connected to the account's DNS server.\nSupports listing, creating, updating, removing devices and managing their settings, dedicated IPs, and mobile configuration profiles.\n",
      "name": "Devices"
    }
  ],
  "paths": {
    "/oapi/v1/account/limits": {
      "get": {
        "description": "Returns account limits for the current account.\nUse this endpoint to read current usage and maximum values before creating or updating resources.\n",
        "operationId": "getAccountLimits",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountLimits"
                }
              }
            },
            "description": "Returns account limits"
          }
        },
        "summary": "Gets account limits",
        "tags": [
          "Account"
        ]
      }
    },
    "/oapi/v1/dedicated_addresses/ipv4": {
      "get": {
        "description": "Returns a list of dedicated IPv4 addresses allocated for the account.\nUse this endpoint to review available dedicated addresses before linking them to devices.\n",
        "operationId": "listDedicatedIPv4Addresses",
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DedicatedIPv4Address"
                  }
                }
              }
            },
            "description": "Returns list of dedicated IPv4 addresses"
          }
        },
        "summary": "Lists allocated dedicated IPv4 addresses",
        "tags": [
          "Dedicated IP addresses"
        ]
      },
      "post": {
        "description": "Allocates a new dedicated IPv4 address for the account.\nUse this endpoint when you need a static IP address for DNS resolution.\n",
        "operationId": "allocateDedicatedIPv4Address",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DedicatedIPv4Address"
                }
              }
            },
            "description": "New dedicated IPv4 allocated"
          },
          "429": {
            "description": "Dedicated IPv4 count reached the limit"
          }
        },
        "summary": "Allocates new dedicated IPv4",
        "tags": [
          "Dedicated IP addresses"
        ]
      }
    },
    "/oapi/v1/devices": {
      "get": {
        "deprecated": true,
        "description": "Method is deprecated and scheduled for removal in January 2027. Use the /oapi/v2 version instead.",
        "operationId": "listDevices",
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Device"
                  }
                }
              }
            },
            "description": "Returns list of devices"
          }
        },
        "summary": "Lists devices",
        "tags": [
          "Devices"
        ]
      },
      "post": {
        "description": "Creates a new device in the account.\nProvide the required device fields in the request body.\n",
        "operationId": "createDevice",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Device"
                }
              }
            },
            "description": "Device created"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          },
          "429": {
            "description": "Devices count reached the limit"
          }
        },
        "summary": "Creates a new device",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/devices/{device_id}": {
      "delete": {
        "description": "Removes a device from the account.\nUse this endpoint to delete a device that is no longer needed.\n",
        "operationId": "removeDevice",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Device removed"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Removes a device",
        "tags": [
          "Devices"
        ]
      },
      "get": {
        "description": "Returns details of a specific device.\nUse this endpoint to retrieve device configuration and DNS connection information.\n",
        "operationId": "getDevice",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Device"
                }
              }
            },
            "description": "Returns device details"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Gets a device by ID",
        "tags": [
          "Devices"
        ]
      },
      "put": {
        "description": "Updates a device with the provided fields.\nOnly the specified fields will be modified.\n",
        "operationId": "updateDevice",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Device updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Updates a device",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/devices/{device_id}/dedicated_addresses": {
      "get": {
        "description": "Returns dedicated IPv4 and IPv6 addresses assigned to a device.\nUse this endpoint to review dedicated addresses linked to a specific device.\n",
        "operationId": "listDedicatedAddressesForDevice",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DedicatedIps"
                }
              }
            },
            "description": "Returns dedicated IPv4 and IPv6 addresses"
          }
        },
        "summary": "Lists dedicated IPv4 and IPv6 addresses for a device",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/devices/{device_id}/dedicated_addresses/ipv4": {
      "delete": {
        "description": "Unlinks a dedicated IPv4 address from a device.\nSpecify the IPv4 address to unlink as a query parameter.\n",
        "operationId": "unlinkDedicatedIPv4Address",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Dedicated IPv4 to unlink",
            "in": "query",
            "name": "ip",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Dedicated IPv4 unlinked from the device"
          },
          "404": {
            "description": "Device or address not found"
          }
        },
        "summary": "Unlinks dedicated IPv4 from the device",
        "tags": [
          "Devices"
        ]
      },
      "post": {
        "description": "Links a dedicated IPv4 address to a device.\nProvide the IPv4 address to link in the request body.\n",
        "operationId": "linkDedicatedIPv4Address",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkDedicatedIPv4"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Dedicated IPv4 linked to the device"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          },
          "404": {
            "description": "Device or address not found"
          },
          "429": {
            "description": "Linked dedicated IPv4 count reached the limit"
          }
        },
        "summary": "Links dedicated IPv4 to the device",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/devices/{device_id}/doh.mobileconfig": {
      "get": {
        "description": "Generates and downloads a DNS-over-HTTPS .mobileconfig profile for the device.\nUse this file to configure AdGuard DNS on iOS devices.\nOptional parameters allow excluding specific Wi-Fi networks and domains.\n",
        "operationId": "getDoHMobileConfig",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SSID list of Wi-Fi networks to exclude",
            "in": "query",
            "name": "exclude_wifi_networks",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Domain list to exclude from filtering",
            "in": "query",
            "name": "exclude_domain",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "DNS-over-HTTPS .mobileconfig profile"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Gets DNS-over-HTTPS .mobileconfig file",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/devices/{device_id}/doh_password/reset": {
      "put": {
        "description": "Generates a new DNS-over-HTTPS password for a device.\nUse this endpoint to reset the password if it has been compromised or you want to rotate credentials.\n",
        "operationId": "resetDOHPassword",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "DNS-over-HTTPS password reset"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Resets DNS-over-HTTPS password",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/devices/{device_id}/dot.mobileconfig": {
      "get": {
        "description": "Generates and downloads a DNS-over-TLS .mobileconfig profile for the device.\nUse this file to configure AdGuard DNS on iOS devices.\nOptional parameters allow excluding specific Wi-Fi networks and domains.\n",
        "operationId": "getDoTMobileConfig",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SSID list of Wi-Fi networks to exclude",
            "in": "query",
            "name": "exclude_wifi_networks",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Domain list to exclude from filtering",
            "in": "query",
            "name": "exclude_domain",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "DNS-over-TLS .mobileconfig profile"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Gets DNS-over-TLS .mobileconfig file",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/devices/{device_id}/settings": {
      "get": {
        "description": "Returns the current settings of a device, including protection and DNS-over-HTTPS authentication preferences.\n",
        "operationId": "getDeviceSettings",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceSettings"
                }
              }
            },
            "description": "Returns device settings"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Gets device settings",
        "tags": [
          "Devices"
        ]
      },
      "put": {
        "description": "Updates device settings such as protection status and DNS-over-HTTPS authentication mode.\nProvide the settings to update in the request body.\n",
        "operationId": "updateDeviceSettings",
        "parameters": [
          {
            "in": "path",
            "name": "device_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceSettingsUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Device settings updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          },
          "404": {
            "description": "Device not found"
          }
        },
        "summary": "Updates device settings",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v1/dns_servers": {
      "get": {
        "deprecated": true,
        "description": "Method is deprecated and scheduled for removal in January 2027. Use the /oapi/v2 version instead.",
        "operationId": "listDNSServers",
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DNSServer"
                  }
                }
              }
            },
            "description": "Returns list of DNS servers"
          }
        },
        "summary": "Lists DNS servers",
        "tags": [
          "DNS servers"
        ]
      },
      "post": {
        "description": "Creates a new DNS server.\nYou can attach custom settings via the request body; otherwise the server will be created with default settings.\n",
        "operationId": "createDNSServer",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DNSServerCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DNSServer"
                }
              }
            },
            "description": "DNS server created"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          },
          "429": {
            "description": "DNS servers count reached the limit"
          }
        },
        "summary": "Creates a new DNS server",
        "tags": [
          "DNS servers"
        ]
      }
    },
    "/oapi/v1/dns_servers/{dns_server_id}": {
      "delete": {
        "description": "Removes a DNS server. All devices attached to this DNS server will be moved to the default DNS server.\nDeleting the default DNS server is forbidden.\n",
        "operationId": "removeDNSServer",
        "parameters": [
          {
            "in": "path",
            "name": "dns_server_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "DNS server removed"
          },
          "404": {
            "description": "DNS server not found"
          }
        },
        "summary": "Removes a DNS server",
        "tags": [
          "DNS servers"
        ]
      },
      "get": {
        "description": "Returns details of a specific DNS server.\nUse this endpoint to retrieve DNS server configuration including its linked devices.\n",
        "operationId": "getDNSServer",
        "parameters": [
          {
            "in": "path",
            "name": "dns_server_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DNSServer"
                }
              }
            },
            "description": "Returns DNS server details"
          },
          "404": {
            "description": "DNS server not found"
          }
        },
        "summary": "Gets a DNS server by ID",
        "tags": [
          "DNS servers"
        ]
      },
      "put": {
        "description": "Updates a DNS server with the provided fields.\nOnly the specified fields will be modified.\n",
        "operationId": "updateDNSServer",
        "parameters": [
          {
            "in": "path",
            "name": "dns_server_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DNSServerUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "DNS server updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          },
          "404": {
            "description": "DNS server not found"
          }
        },
        "summary": "Updates a DNS server",
        "tags": [
          "DNS servers"
        ]
      }
    },
    "/oapi/v1/dns_servers/{dns_server_id}/settings": {
      "get": {
        "description": "Returns the current settings of a DNS server, including filtering, parental control, and access configuration.\nUse this endpoint to review the current configuration before making changes.\n",
        "operationId": "getDNSServerSettings",
        "parameters": [
          {
            "in": "path",
            "name": "dns_server_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DNSServerSettings"
                }
              }
            },
            "description": "Returns DNS server settings"
          },
          "404": {
            "description": "DNS server not found"
          }
        },
        "summary": "Gets DNS server settings",
        "tags": [
          "DNS servers"
        ]
      },
      "put": {
        "description": "Updates the settings of a DNS server, such as filtering, parental control, and access configuration.\nProvide the settings to update in the request body.\n",
        "operationId": "updateDNSServerSettings",
        "parameters": [
          {
            "in": "path",
            "name": "dns_server_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DNSServerSettingsUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "DNS server settings updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          },
          "404": {
            "description": "DNS server not found"
          }
        },
        "summary": "Updates DNS server settings",
        "tags": [
          "DNS servers"
        ]
      }
    },
    "/oapi/v1/filter_lists": {
      "get": {
        "description": "Returns available filter lists for the current locale.\nUse this endpoint to retrieve filter definitions before applying them to DNS server settings.\n",
        "operationId": "listFilterLists",
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FilterList"
                  }
                }
              }
            },
            "description": "Returns list of filters"
          }
        },
        "summary": "Lists filter lists",
        "tags": [
          "Reference data"
        ]
      }
    },
    "/oapi/v1/oauth_authorize": {
      "get": {
        "description": "Initiates an OAuth2 authorization flow by redirecting the user to the AdGuard authorization server.\n\nUse `response_type=token` for the Implicit grant or `response_type=code` together with `code_challenge` and `code_challenge_method=S256` for the Authorization Code + PKCE flow.\n\nOn success the authorization server redirects back to `redirect_uri`. For the Implicit grant the access token is embedded in the URL fragment (`#access_token=...`). For the Authorization Code flow a one-time `code` is appended as a query parameter and must be exchanged for tokens via the `/oauth_token` endpoint.\n",
        "operationId": "authorize",
        "parameters": [
          {
            "description": "OAuth2 client identifier",
            "in": "query",
            "name": "client_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Type of grant. Use response_type=token for Implicit grant, response_type=code for Authorization Code + PKCE flow",
            "in": "query",
            "name": "response_type",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "A successful response results in a redirect to this URL",
            "in": "query",
            "name": "redirect_uri",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "An opaque value, used for security purposes",
            "in": "query",
            "name": "state",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Affiliate identifier",
            "in": "query",
            "name": "aid",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Affiliate source",
            "in": "query",
            "name": "source",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "PKCE code challenge: BASE64URL(SHA256(code_verifier)). Required for Authorization Code + PKCE flow",
            "in": "query",
            "name": "code_challenge",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "PKCE challenge method. Only \"S256\" is supported",
            "in": "query",
            "name": "code_challenge_method",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to the authorization server"
          }
        },
        "security": [],
        "summary": "Redirects to the authorization endpoint",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/oapi/v1/oauth_token": {
      "post": {
        "description": "Obtains an access token using one of three grant types:\n\n**1. Password + optional 2FA** (`grant_type=password`):\nProvide `username` and `password`. If two-factor authentication is enabled on the account,\nalso provide `mfa_token`.\n\n**2. Refresh token** (`grant_type=refresh_token`):\nProvide `refresh_token` to exchange it for a new access token without re-entering credentials.\n\n**3. Authorization Code + PKCE** (`grant_type=authorization_code`):\nExchange an authorization code obtained via the `/oauth_authorize` endpoint.\nProvide `code`, `client_id`, `code_verifier`, and `redirect_uri`.\n",
        "operationId": "accessToken",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/AccessTokenCredentials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessTokenResponse"
                }
              }
            },
            "description": "Access token issued"
          },
          "400": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Missing required parameters"
          },
          "401": {
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/AccessTokenErrorResponse"
                }
              }
            },
            "description": "Invalid credentials, MFA token, refresh token, authorization code, or PKCE code_verifier provided"
          }
        },
        "security": [],
        "summary": "Issues an access token",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/oapi/v1/parental_control_categories": {
      "get": {
        "description": "Returns all available parental control filtering categories.\nUse this endpoint to retrieve categories for configuring parental control settings on a DNS server.\n",
        "operationId": "listParentalControlFilteringCategories",
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ParentalControlFilteringCategory"
                  }
                }
              }
            },
            "description": "Returns list of parental control filtering categories"
          }
        },
        "summary": "Lists all parental control filtering categories",
        "tags": [
          "Reference data"
        ]
      }
    },
    "/oapi/v1/query_log": {
      "delete": {
        "description": "Clears all query log entries for the current account.\nUse this endpoint to remove stored DNS query records.\n",
        "operationId": "clearQueryLog",
        "responses": {
          "202": {
            "description": "Query log cleared"
          }
        },
        "summary": "Clears query log",
        "tags": [
          "Query log"
        ]
      },
      "get": {
        "description": "Returns the query log for the specified time period.\nUse filters to narrow the result set and cursor to paginate through the results.\nThe log contains DNS query records with filtering, device, and domain information.\n",
        "operationId": "getQueryLog",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by companies",
            "in": "query",
            "name": "companies",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by statuses",
            "in": "query",
            "name": "statuses",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/FilteringActionStatus"
              }
            }
          },
          {
            "description": "Filter by categories",
            "in": "query",
            "name": "categories",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/CategoryType"
              }
            }
          },
          {
            "description": "Filter by domain name",
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          },
          {
            "description": "Pagination cursor from previous response",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryLogResponse"
                }
              }
            },
            "description": "Returns query log"
          }
        },
        "summary": "Gets query log",
        "tags": [
          "Query log"
        ]
      }
    },
    "/oapi/v1/revoke_token": {
      "post": {
        "description": "Permanently invalidates a refresh token.\nAfter revocation the token cannot be used to obtain new access tokens.\nRevoke the refresh token when the user logs out or when you suspect the token has been compromised.\n",
        "operationId": "revokeToken",
        "parameters": [
          {
            "description": "Refresh token to revoke",
            "in": "query",
            "name": "refresh_token",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Refresh token revoked"
          }
        },
        "security": [],
        "summary": "Revokes a refresh token",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/oapi/v1/stats/blocked_parental_categories": {
      "get": {
        "description": "Returns DNS query statistics for requests blocked by parental control categories.\nUse the time range and filters to narrow the results.\n",
        "operationId": "getBlockedParentalCategoryStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlockedParentalCategoryQueriesStatsList"
                }
              }
            },
            "description": "Returns blocked parental control categories statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets statistics for blocked parental control categories",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/stats/categories": {
      "get": {
        "description": "Returns DNS query statistics grouped by filtering category for the specified period.\nUse the time range and filters to narrow the results.\n",
        "operationId": "getCategoriesQueriesStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryQueriesStatsList"
                }
              }
            },
            "description": "Returns categories statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets categories statistics",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/stats/companies": {
      "get": {
        "description": "Returns DNS query statistics grouped by company for the specified period.\nResponse is paginated, items are arranged by query count.\nFor the initial request a default limit is applied if not specified.\nFor the subsequent requests cursor must be provided (limit can be omitted).\nFiltering parameters, if specified for the initial request, must be provided on each page request as well.\n",
        "operationId": "getCompaniesStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Pagination cursor",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit (may be overridden by cursor)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyQueriesStatsList"
                }
              }
            },
            "description": "Returns companies statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets companies statistics",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/stats/companies/detailed": {
      "get": {
        "description": "Returns detailed DNS query statistics grouped by company for the specified period.\nResponse is paginated, items are arranged by query count.\nFor the initial request a default limit is applied if not specified.\nFor the subsequent requests cursor must be provided (limit can be omitted).\nFiltering parameters, if specified for the initial request, must be provided on each page request as well.\n",
        "operationId": "getDetailedCompaniesStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Pagination cursor",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit (may be overridden by cursor)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyDetailedQueriesStatsList"
                }
              }
            },
            "description": "Returns detailed companies statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets detailed companies statistics",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/stats/countries": {
      "get": {
        "description": "Returns DNS query statistics grouped by country for the specified period.\nResponse is paginated, items are arranged by query count.\nFor the initial request a default limit is applied if not specified.\nFor the subsequent requests cursor must be provided (limit can be omitted).\nFiltering parameters, if specified for the initial request, must be provided on each page request as well.\n",
        "operationId": "getCountriesQueriesStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Pagination cursor",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit (may be overridden by cursor)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountryQueriesStatsList"
                }
              }
            },
            "description": "Returns countries statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets countries statistics",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/stats/devices": {
      "get": {
        "description": "Returns DNS query statistics grouped by device for the specified period.\nResponse is paginated, items are arranged by query count.\nFor the initial request a default limit is applied if not specified.\nFor the subsequent requests cursor must be provided (limit can be omitted).\nFiltering parameters, if specified for the initial request, must be provided on each page request as well.\n",
        "operationId": "getDevicesQueriesStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Pagination cursor",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit (may be overridden by cursor)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceQueriesStatsList"
                }
              }
            },
            "description": "Returns devices statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets devices statistics",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/stats/domains": {
      "get": {
        "description": "Returns DNS query statistics grouped by domain for the specified period.\nResponse is paginated, items are arranged by query count.\nFor the initial request a default limit is applied if not specified.\nFor the subsequent requests cursor must be provided (limit can be omitted).\nFiltering parameters, if specified for the initial request, must be provided on each page request as well.\n",
        "operationId": "getDomainsQueriesStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Pagination cursor",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit (may be overridden by cursor)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainQueriesStatsList"
                }
              }
            },
            "description": "Returns domains statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets domains statistics",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/stats/time": {
      "get": {
        "description": "Returns time-based DNS query statistics for the specified period.\nUse the time range parameters to define the period and filters to narrow the results.\n",
        "operationId": "getTimeQueriesStats",
        "parameters": [
          {
            "description": "Time from in milliseconds (inclusive)",
            "in": "query",
            "name": "time_from_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Time to in milliseconds (inclusive)",
            "in": "query",
            "name": "time_to_millis",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by countries",
            "in": "query",
            "name": "countries",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeQueriesStatsList"
                }
              }
            },
            "description": "Returns time statistics"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Validation failed"
          }
        },
        "summary": "Gets time statistics",
        "tags": [
          "Statistics"
        ]
      }
    },
    "/oapi/v1/web_services": {
      "get": {
        "description": "Returns a list of known web services with their identifiers and icons.\nUse this endpoint to get service data for parental control configuration.\n",
        "operationId": "listWebServices",
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebService"
                  }
                }
              }
            },
            "description": "Returns list of web services"
          }
        },
        "summary": "Lists web services",
        "tags": [
          "Reference data"
        ]
      }
    },
    "/oapi/v2/devices": {
      "get": {
        "description": "Lists devices according to the specified parameters.\nResponse is paginated, items are arranged in the newest-first order.\nFor the initial request a default limit is applied if not specified.\nFor the subsequent requests cursor must be provided (limit can be omitted).\nFiltering parameters, if specified for the initial request, must be provided on each page request as well.\n",
        "operationId": "getDevices",
        "parameters": [
          {
            "description": "Pagination cursor",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit (may be overridden by cursor)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Filter by devices",
            "in": "query",
            "name": "devices",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Search by device name or ID",
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevicesResponse"
                }
              }
            },
            "description": "Returns list of devices"
          }
        },
        "summary": "Lists devices",
        "tags": [
          "Devices"
        ]
      }
    },
    "/oapi/v2/dns_servers": {
      "get": {
        "description": "Lists DNS servers according to the specified parameters.\nBy default there is at least one default server.\nResponse is paginated, items are arranged in the newest-first order.\nFor the initial request a default limit is applied if not specified.\nFor the subsequent requests cursor must be provided (limit can be omitted).\nFiltering parameters, if specified for the initial request, must be provided on each page request as well.\n",
        "operationId": "getDnsServers",
        "parameters": [
          {
            "description": "Pagination cursor",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination limit (may be overridden by cursor)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 1000,
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          },
          {
            "description": "Filter by DNS servers",
            "in": "query",
            "name": "dns_servers",
            "required": false,
            "schema": {
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Search by DNS server name or ID",
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsServersResponse"
                }
              }
            },
            "description": "Returns list of DNS servers"
          }
        },
        "summary": "Lists DNS servers",
        "tags": [
          "DNS servers"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AccessTokenCredentials": {
        "required": [
          "grant_type"
        ],
        "type": "object",
        "properties": {
          "client_id": {
            "type": "string",
            "description": "OAuth2 client identifier",
            "example": "dns_ios"
          },
          "code": {
            "type": "string",
            "description": "Authorization code received from the authorization server",
            "example": "auth_code_xyz"
          },
          "code_verifier": {
            "type": "string",
            "description": "PKCE code verifier (43-128 chars)",
            "example": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"
          },
          "grant_type": {
            "type": "string",
            "description": "OAuth2 grant type. Accepted values: \"password\", \"refresh_token\", \"authorization_code\". Required for Authorization Code + PKCE flow."
          },
          "mfa_token": {
            "type": "string",
            "description": "Two-Factor authentication token (if enabled in account settings)",
            "example": "123456"
          },
          "password": {
            "type": "string",
            "description": "Account password",
            "example": "your_password"
          },
          "redirect_uri": {
            "type": "string",
            "description": "Redirect URI used in the authorization request",
            "example": "https://example.com/callback"
          },
          "refresh_token": {
            "type": "string",
            "description": "Refresh token",
            "example": "H3SW6YFJ-tOPe0FQCM1Jd6VnMiA"
          },
          "username": {
            "type": "string",
            "description": "Account email",
            "example": "user@example.com"
          }
        },
        "description": "Access token request parameters"
      },
      "AccessTokenErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Error type",
            "example": "unauthorized"
          },
          "error_code": {
            "type": "string",
            "description": "Error code",
            "example": "2fa_required"
          },
          "error_description": {
            "type": "string",
            "description": "Error description",
            "example": "2FA is required"
          }
        },
        "description": "Access token error response"
      },
      "AccessTokenResponse": {
        "required": [
          "expires_in"
        ],
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string",
            "description": "Access token",
            "example": "jTFho_aymtN20pZR5RRSQAzd81I"
          },
          "expires_in": {
            "type": "integer",
            "description": "The lifetime in seconds of the access token",
            "format": "int32",
            "example": 2620978
          },
          "refresh_token": {
            "type": "string",
            "description": "Refresh token",
            "example": "H3SW6YFJ-tOPe0FQCM1Jd6VnMiA"
          },
          "token_type": {
            "type": "string",
            "description": "The type of the token issued",
            "example": "bearer"
          }
        },
        "description": "Access token success response"
      },
      "AccountLimits": {
        "required": [
          "access_rules",
          "dedicated_ipv4",
          "devices",
          "dns_servers",
          "requests",
          "user_rules"
        ],
        "type": "object",
        "properties": {
          "access_rules": {
            "$ref": "#/components/schemas/Limit"
          },
          "dedicated_ipv4": {
            "$ref": "#/components/schemas/Limit"
          },
          "devices": {
            "$ref": "#/components/schemas/Limit"
          },
          "dns_servers": {
            "$ref": "#/components/schemas/Limit"
          },
          "requests": {
            "$ref": "#/components/schemas/Limit"
          },
          "user_rules": {
            "$ref": "#/components/schemas/Limit"
          }
        },
        "description": "Account limits"
      },
      "BlockedFilteringCategoryUpdate": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether category blocking is enabled"
          },
          "id": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string",
            "description": "Category identifier",
            "example": "adult"
          }
        },
        "description": "Blocked filtering category update action"
      },
      "BlockedParentalCategoryQueriesStats": {
        "required": [
          "blocked",
          "category"
        ],
        "type": "object",
        "properties": {
          "blocked": {
            "type": "integer",
            "description": "Blocked queries count",
            "format": "int64",
            "example": 14
          },
          "category": {
            "type": "string",
            "description": "Category",
            "example": "audio"
          }
        },
        "description": "Blocked Parental control Category queries stats"
      },
      "BlockedParentalCategoryQueriesStatsList": {
        "required": [
          "stats"
        ],
        "type": "object",
        "properties": {
          "stats": {
            "type": "array",
            "description": "Stats for blocked Parental control Categories",
            "items": {
              "$ref": "#/components/schemas/BlockedParentalCategoryQueriesStats"
            }
          }
        },
        "description": "Blocked Parental control Category queries stats"
      },
      "BlockedWebService": {
        "required": [
          "enabled",
          "id"
        ],
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether service blocking is enabled"
          },
          "id": {
            "type": "string",
            "description": "Web-service identifier",
            "example": "9gag"
          }
        },
        "description": "Blocked web-service"
      },
      "BlockedWebServiceUpdate": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether service blocking is enabled"
          },
          "id": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string",
            "description": "Web-service identifier",
            "example": "9gag"
          }
        },
        "description": "Blocked web-service update action"
      },
      "BlockingMode": {
        "type": "string",
        "description": "Blocking mode",
        "example": "REFUSED",
        "enum": [
          "NONE",
          "NULL_IP",
          "REFUSED",
          "NXDOMAIN",
          "CUSTOM_IP"
        ]
      },
      "BlockingModeSettings": {
        "required": [
          "blocking_mode"
        ],
        "type": "object",
        "properties": {
          "blocking_mode": {
            "$ref": "#/components/schemas/BlockingMode"
          },
          "ipv4_blocking_address": {
            "type": "string",
            "description": "Custom IPv4 address for blocking mode CUSTOM IP",
            "example": "0.0.0.0"
          },
          "ipv6_blocking_address": {
            "type": "string",
            "description": "Custom IPv6 address for blocking mode CUSTOM IP",
            "example": "::"
          }
        },
        "description": "Blocking mode settings"
      },
      "BlockingModeSettingsUpdate": {
        "required": [
          "blocking_mode"
        ],
        "type": "object",
        "properties": {
          "blocking_mode": {
            "$ref": "#/components/schemas/BlockingMode"
          },
          "ipv4_blocking_address": {
            "type": "string",
            "description": "Custom IPv4 address for blocking mode CUSTOM IP",
            "example": "0.0.0.0"
          },
          "ipv6_blocking_address": {
            "type": "string",
            "description": "Custom IPv6 address for blocking mode CUSTOM IP",
            "example": "::"
          }
        },
        "description": "Blocking mode settings"
      },
      "CategoryQueriesStats": {
        "required": [
          "category_type",
          "queries"
        ],
        "type": "object",
        "properties": {
          "category_type": {
            "$ref": "#/components/schemas/CategoryType"
          },
          "queries": {
            "type": "integer",
            "description": "Queries",
            "format": "int64",
            "example": 86
          }
        },
        "description": "Category queries stats"
      },
      "CategoryQueriesStatsList": {
        "required": [
          "stats"
        ],
        "type": "object",
        "properties": {
          "stats": {
            "type": "array",
            "description": "List of queries stats",
            "items": {
              "$ref": "#/components/schemas/CategoryQueriesStats"
            }
          }
        },
        "description": "Category query statistics list"
      },
      "CategoryType": {
        "type": "string",
        "description": "Category type",
        "enum": [
          "ADS",
          "TRACKERS",
          "SOCIAL_MEDIA",
          "CDN",
          "OTHERS"
        ]
      },
      "CompanyDetailedQueriesStats": {
        "required": [
          "company_name",
          "domains_count",
          "top_queries_domain",
          "value"
        ],
        "type": "object",
        "properties": {
          "company_name": {
            "type": "string",
            "description": "Company name",
            "example": "Google"
          },
          "domains_count": {
            "type": "integer",
            "description": "Domains count",
            "format": "int32",
            "example": 100
          },
          "top_blocked_domain": {
            "type": "string",
            "description": "Top domain by blocked queries",
            "example": "advertising.google.com"
          },
          "top_queries_domain": {
            "type": "string",
            "description": "Top domain by queries",
            "example": "ads.apple.com"
          },
          "value": {
            "$ref": "#/components/schemas/QueriesStats"
          }
        },
        "description": "Company detailed queries stats"
      },
      "CompanyDetailedQueriesStatsList": {
        "required": [
          "navigation",
          "stats"
        ],
        "type": "object",
        "properties": {
          "navigation": {
            "$ref": "#/components/schemas/Navigation"
          },
          "pages": {
            "type": "array",
            "description": "Pagination. Field is deprecated and scheduled for removal in January 2027. Use `navigation` instead",
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Page"
            }
          },
          "stats": {
            "type": "array",
            "description": "List of queries stats",
            "items": {
              "$ref": "#/components/schemas/CompanyDetailedQueriesStats"
            }
          }
        },
        "description": "Company detailed queries statistics"
      },
      "CompanyQueriesStats": {
        "required": [
          "company_name",
          "value"
        ],
        "type": "object",
        "properties": {
          "company_name": {
            "type": "string",
            "description": "Company name",
            "example": "Google"
          },
          "value": {
            "$ref": "#/components/schemas/QueriesStats"
          }
        },
        "description": "Company queries stats"
      },
      "CompanyQueriesStatsList": {
        "required": [
          "navigation",
          "stats"
        ],
        "type": "object",
        "properties": {
          "navigation": {
            "$ref": "#/components/schemas/Navigation"
          },
          "stats": {
            "type": "array",
            "description": "List of queries stats",
            "items": {
              "$ref": "#/components/schemas/CompanyQueriesStats"
            }
          }
        },
        "description": "Companies queries statistics"
      },
      "ConnectDeviceType": {
        "type": "string",
        "description": "Connect Device Type",
        "example": "ANDROID",
        "enum": [
          "WINDOWS",
          "ANDROID",
          "MAC",
          "IOS",
          "LINUX",
          "ROUTER",
          "SMART_TV",
          "GAME_CONSOLE",
          "UNKNOWN"
        ]
      },
      "CountryQueriesStats": {
        "required": [
          "country",
          "value"
        ],
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "Country code",
            "example": "US"
          },
          "value": {
            "$ref": "#/components/schemas/QueriesStats"
          }
        },
        "description": "Country queries stats"
      },
      "CountryQueriesStatsList": {
        "required": [
          "navigation",
          "stats"
        ],
        "type": "object",
        "properties": {
          "navigation": {
            "$ref": "#/components/schemas/Navigation"
          },
          "stats": {
            "type": "array",
            "description": "List of queries stats",
            "items": {
              "$ref": "#/components/schemas/CountryQueriesStats"
            }
          }
        },
        "description": "Countries queries statistics"
      },
      "DNSAddresses": {
        "required": [
          "adguard_dns_over_https_url",
          "adguard_dns_over_quic_url",
          "adguard_dns_over_tls_url",
          "adguard_vpn_dns_over_https_url",
          "adguard_vpn_dns_over_quic_url",
          "adguard_vpn_dns_over_tls_url",
          "dns_over_https_url",
          "dns_over_quic_url",
          "dns_over_tls_url"
        ],
        "type": "object",
        "properties": {
          "adguard_dns_over_https_url": {
            "type": "string",
            "description": "AdGuard DNS-over-HTTPS url",
            "example": "adguard:add_dns_server?address=https%3A%2F%2Ff3750181.d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "adguard_dns_over_https_with_auth_url": {
            "type": "string",
            "description": "AdGuard DNS-over-HTTPS with authentication url",
            "example": "adguard:add_dns_server?address=https%3A%2F%2Ff3750181:jaNh9iXS@d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "adguard_dns_over_quic_url": {
            "type": "string",
            "description": "AdGuard DNS-over-QUIC url",
            "example": "adguard:add_dns_server?address=quic%3A%2F%2Ff3750181.d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "adguard_dns_over_tls_url": {
            "type": "string",
            "description": "AdGuard DNS-over-TLS url",
            "example": "adguard:add_dns_server?address=tls%3A%2F%2Ff3750181.d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "adguard_vpn_dns_over_https_url": {
            "type": "string",
            "description": "AdGuard VPN DNS-over-HTTPS url",
            "example": "adguardvpn:add_dns_server?address=https%3A%2F%2Ff3750181.d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "adguard_vpn_dns_over_https_with_auth_url": {
            "type": "string",
            "description": "AdGuard VPN DNS-over-HTTPS with authentication url",
            "example": "adguardvpn:add_dns_server?address=https%3A%2F%2Ff3750181:jaNh9iXS@.d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "adguard_vpn_dns_over_quic_url": {
            "type": "string",
            "description": "AdGuard VPN DNS-over-QUIC url",
            "example": "adguardvpn:add_dns_server?address=quic%3A%2F%2Ff3750181.d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "adguard_vpn_dns_over_tls_url": {
            "type": "string",
            "description": "AdGuard VPN DNS-over-TLS url",
            "example": "adguardvpn:add_dns_server?address=tls%3A%2F%2Ff3750181.d.adguard.ch%2Fdns-query%26name%3DAdGuard%20Personal%20DNS"
          },
          "dns_over_https_url": {
            "type": "string",
            "description": "DNS-over-HTTPS",
            "example": "https://b3e82cd1.adguard-dns.com/dns-query"
          },
          "dns_over_https_with_auth_url": {
            "type": "string",
            "description": "DNS-over-HTTPS with authentication",
            "example": "https://b3e82cd1:jaNh9iXS@d.adguard-dns.com/dns-query"
          },
          "dns_over_quic_url": {
            "type": "string",
            "description": "DNS-over-QUIC",
            "example": "quic://b3e82cd1.adguard-dns.com"
          },
          "dns_over_tls_url": {
            "type": "string",
            "description": "DNS-over-TLS",
            "example": "tls://b3e82cd1.adguard-dns.com"
          },
          "ip_addresses": {
            "type": "array",
            "description": "IP addresses",
            "items": {
              "$ref": "#/components/schemas/IpAddress"
            }
          }
        },
        "description": "DNS connection information"
      },
      "DNSServer": {
        "required": [
          "default",
          "devices_count",
          "id",
          "name",
          "settings"
        ],
        "type": "object",
        "properties": {
          "default": {
            "type": "boolean",
            "description": "Whether this is the default DNS server",
            "example": false
          },
          "device_ids": {
            "type": "array",
            "description": "Scheduled for removal in January 2027",
            "deprecated": true,
            "items": {
              "type": "string",
              "description": "Scheduled for removal in January 2027",
              "deprecated": true
            }
          },
          "devices_count": {
            "type": "integer",
            "description": "Connected devices count",
            "format": "int32",
            "example": 5
          },
          "id": {
            "type": "string",
            "description": "DNS server ID",
            "example": "a9f29be1"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "example": "Main DNS server"
          },
          "settings": {
            "$ref": "#/components/schemas/DNSServerSettings"
          }
        },
        "description": "DNS server"
      },
      "DNSServerAccessSettings": {
        "required": [
          "allowed_clients",
          "block_known_scanners",
          "blocked_clients",
          "blocked_domain_rules",
          "enabled"
        ],
        "type": "object",
        "properties": {
          "allowed_clients": {
            "type": "array",
            "description": "Allowed IP's, CIDR's or ASN's",
            "example": [
              "192.168.1.0/24"
            ],
            "items": {
              "type": "string",
              "description": "Allowed IP's, CIDR's or ASN's",
              "example": "[\"192.168.1.0/24\"]"
            }
          },
          "block_known_scanners": {
            "type": "boolean",
            "description": "Whether known scanners should be blocked"
          },
          "blocked_clients": {
            "type": "array",
            "description": "Blocked IP's, CIDR's or ASN's",
            "example": [
              "10.0.0.0/8"
            ],
            "items": {
              "type": "string",
              "description": "Blocked IP's, CIDR's or ASN's",
              "example": "[\"10.0.0.0/8\"]"
            }
          },
          "blocked_domain_rules": {
            "type": "array",
            "description": "Blocked domain rules",
            "example": [
              "example.org"
            ],
            "items": {
              "type": "string",
              "description": "Blocked domain rules",
              "example": "[\"example.org\"]"
            }
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether access settings are enabled"
          }
        },
        "description": "DNS server access settings"
      },
      "DNSServerAccessSettingsUpdate": {
        "type": "object",
        "properties": {
          "allowed_clients": {
            "type": "array",
            "description": "Allowed IP's, CIDR's or ASN's",
            "example": [
              "192.168.1.0/24"
            ],
            "items": {
              "type": "string",
              "description": "Allowed IP's, CIDR's or ASN's",
              "example": "[\"192.168.1.0/24\"]"
            }
          },
          "block_known_scanners": {
            "type": "boolean",
            "description": "Whether known scanners should be blocked"
          },
          "blocked_clients": {
            "type": "array",
            "description": "Blocked IP's, CIDR's or ASN's",
            "example": [
              "10.0.0.0/8"
            ],
            "items": {
              "type": "string",
              "description": "Blocked IP's, CIDR's or ASN's",
              "example": "[\"10.0.0.0/8\"]"
            }
          },
          "blocked_domain_rules": {
            "type": "array",
            "description": "Blocked domain rules",
            "example": [
              "example.org"
            ],
            "items": {
              "maxLength": 1024,
              "minLength": 0,
              "type": "string",
              "description": "Blocked domain rules",
              "example": "[\"example.org\"]"
            }
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether access settings are enabled"
          }
        },
        "description": "DNS server access settings update"
      },
      "DNSServerCreate": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string",
            "description": "DNS server name",
            "example": "My profile"
          },
          "settings": {
            "$ref": "#/components/schemas/DNSServerSettingsUpdate"
          }
        },
        "description": "DNS server create request"
      },
      "DNSServerSettings": {
        "required": [
          "access_settings",
          "auto_connect_devices_enabled",
          "block_chrome_prefetch",
          "block_firefox_canary",
          "block_private_relay",
          "block_ttl_seconds",
          "blocking_mode_settings",
          "filter_lists_settings",
          "ip_log_enabled",
          "parental_control_settings",
          "protection_enabled",
          "safebrowsing_settings",
          "user_rules_settings"
        ],
        "type": "object",
        "properties": {
          "access_settings": {
            "$ref": "#/components/schemas/DNSServerAccessSettings"
          },
          "auto_connect_devices_enabled": {
            "type": "boolean",
            "description": "Whether to allow auto-connecting through link type"
          },
          "block_chrome_prefetch": {
            "type": "boolean",
            "description": "Whether to block Google Chrome prefetch proxy"
          },
          "block_firefox_canary": {
            "type": "boolean",
            "description": "Whether Firefox Canary should be blocked"
          },
          "block_private_relay": {
            "type": "boolean",
            "description": "Whether private relay should be blocked"
          },
          "block_ttl_seconds": {
            "type": "integer",
            "description": "Blocked response TTL in seconds",
            "format": "int32",
            "example": 3600
          },
          "blocking_mode_settings": {
            "$ref": "#/components/schemas/BlockingModeSettings"
          },
          "filter_lists_settings": {
            "$ref": "#/components/schemas/FilterListsSettings"
          },
          "ip_log_enabled": {
            "type": "boolean",
            "description": "Whether to log IP addresses of requests"
          },
          "parental_control_settings": {
            "$ref": "#/components/schemas/ParentalControlSettings"
          },
          "protection_enabled": {
            "type": "boolean",
            "description": "Whether protection is enabled"
          },
          "safebrowsing_settings": {
            "$ref": "#/components/schemas/SafebrowsingSettings"
          },
          "user_rules_settings": {
            "$ref": "#/components/schemas/UserRulesSettings"
          }
        },
        "description": "DNS server settings"
      },
      "DNSServerSettingsUpdate": {
        "type": "object",
        "properties": {
          "access_settings": {
            "$ref": "#/components/schemas/DNSServerAccessSettingsUpdate"
          },
          "auto_connect_devices_enabled": {
            "type": "boolean",
            "description": "Whether to allow auto-connecting through link type"
          },
          "block_chrome_prefetch": {
            "type": "boolean",
            "description": "Whether to block Google Chrome prefetch proxy"
          },
          "block_firefox_canary": {
            "type": "boolean",
            "description": "Whether Firefox Canary should be blocked"
          },
          "block_private_relay": {
            "type": "boolean",
            "description": "Whether private relay should be blocked"
          },
          "block_ttl_seconds": {
            "maximum": 3600,
            "minimum": 0,
            "type": "integer",
            "description": "TTL for blocked request",
            "format": "int32",
            "example": 3600
          },
          "blocking_mode_settings": {
            "$ref": "#/components/schemas/BlockingModeSettingsUpdate"
          },
          "filter_lists_settings": {
            "$ref": "#/components/schemas/FilterListsSettingsUpdate"
          },
          "ip_log_enabled": {
            "type": "boolean",
            "description": "Whether to log IP addresses of requests"
          },
          "parental_control_settings": {
            "$ref": "#/components/schemas/ParentalControlSettingsUpdate"
          },
          "protection_enabled": {
            "type": "boolean",
            "description": "Whether protection is enabled"
          },
          "safebrowsing_settings": {
            "$ref": "#/components/schemas/SafebrowsingSettingsUpdate"
          },
          "user_rules_settings": {
            "$ref": "#/components/schemas/UserRulesSettingsUpdate"
          }
        },
        "description": "DNS server settings update request"
      },
      "DNSServerUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string",
            "description": "DNS server name",
            "example": "My profile"
          }
        },
        "description": "DNS server update request"
      },
      "DayOfWeek": {
        "type": "string",
        "description": "Day of week",
        "enum": [
          "MONDAY",
          "TUESDAY",
          "WEDNESDAY",
          "THURSDAY",
          "FRIDAY",
          "SATURDAY",
          "SUNDAY"
        ]
      },
      "DedicatedIPv4Address": {
        "required": [
          "ip"
        ],
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "description": "Linked device ID, or null if address is vacant",
            "example": "b3e82cd1"
          },
          "ip": {
            "type": "string",
            "description": "IP address",
            "example": "94.140.14.15"
          }
        },
        "description": "Dedicated IPv4 address"
      },
      "DedicatedIps": {
        "required": [
          "ipv4",
          "ipv4_limit",
          "ipv6"
        ],
        "type": "object",
        "properties": {
          "ipv4": {
            "type": "array",
            "description": "Dedicated IPv4 address",
            "example": [
              "94.140.14.15"
            ],
            "items": {
              "type": "string",
              "description": "Dedicated IPv4 address",
              "example": "[\"94.140.14.15\"]"
            }
          },
          "ipv4_limit": {
            "$ref": "#/components/schemas/Limit"
          },
          "ipv6": {
            "type": "array",
            "description": "Dedicated IPv6 address",
            "example": [
              "2a10:50c0::ad1:ff"
            ],
            "items": {
              "type": "string",
              "description": "Dedicated IPv6 address",
              "example": "[\"2a10:50c0::ad1:ff\"]"
            }
          }
        },
        "description": "Dedicated IPs"
      },
      "Device": {
        "required": [
          "device_type",
          "dns_addresses",
          "dns_server_id",
          "id",
          "name",
          "settings"
        ],
        "type": "object",
        "properties": {
          "device_type": {
            "$ref": "#/components/schemas/ConnectDeviceType"
          },
          "dns_addresses": {
            "$ref": "#/components/schemas/DNSAddresses"
          },
          "dns_server_id": {
            "type": "string",
            "description": "DNS server ID",
            "example": "a9f29be1"
          },
          "id": {
            "type": "string",
            "description": "Device ID",
            "example": "b3e82cd1"
          },
          "name": {
            "type": "string",
            "description": "Device name",
            "example": "My iphone"
          },
          "settings": {
            "$ref": "#/components/schemas/DeviceSettings"
          }
        },
        "description": "Device"
      },
      "DeviceCreate": {
        "required": [
          "device_type",
          "dns_server_id",
          "name"
        ],
        "type": "object",
        "properties": {
          "device_type": {
            "$ref": "#/components/schemas/ConnectDeviceType"
          },
          "dns_server_id": {
            "type": "string",
            "description": "DNS server ID to associate the device with",
            "example": "a9f29be1"
          },
          "name": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string",
            "description": "Device name",
            "example": "My phone"
          }
        },
        "description": "Device create request"
      },
      "DeviceQueriesStats": {
        "required": [
          "device_id",
          "value"
        ],
        "type": "object",
        "properties": {
          "device_id": {
            "type": "string",
            "description": "Device ID",
            "example": "b3e82cd1"
          },
          "last_activity_time_millis": {
            "type": "integer",
            "description": "Last activity time in millis",
            "format": "int64",
            "example": 1655804673000
          },
          "value": {
            "$ref": "#/components/schemas/QueriesStats"
          }
        },
        "description": "Device queries stats"
      },
      "DeviceQueriesStatsList": {
        "required": [
          "navigation",
          "stats"
        ],
        "type": "object",
        "properties": {
          "navigation": {
            "$ref": "#/components/schemas/Navigation"
          },
          "stats": {
            "type": "array",
            "description": "List of queries stats",
            "items": {
              "$ref": "#/components/schemas/DeviceQueriesStats"
            }
          }
        },
        "description": "Devices queries statistics"
      },
      "DeviceSettings": {
        "required": [
          "detect_doh_auth_only",
          "protection_enabled"
        ],
        "type": "object",
        "properties": {
          "detect_doh_auth_only": {
            "type": "boolean",
            "description": "Whether to use only DNS-over-HTTPS with authentication"
          },
          "protection_enabled": {
            "type": "boolean",
            "description": "Whether protection is enabled"
          }
        },
        "description": "Device settings response"
      },
      "DeviceSettingsUpdate": {
        "type": "object",
        "properties": {
          "detect_doh_auth_only": {
            "type": "boolean",
            "description": "Whether to use only DNS-over-HTTPS with authentication"
          },
          "protection_enabled": {
            "type": "boolean",
            "description": "Whether to enable protection"
          }
        },
        "description": "Device settings update request"
      },
      "DeviceUpdate": {
        "type": "object",
        "properties": {
          "device_type": {
            "$ref": "#/components/schemas/ConnectDeviceType"
          },
          "dns_server_id": {
            "type": "string",
            "description": "DNS server ID",
            "example": "a9f29be1"
          },
          "name": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string",
            "description": "Device name",
            "example": "My phone"
          }
        },
        "description": "Device update request"
      },
      "DevicesResponse": {
        "required": [
          "items",
          "navigation"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "description": "List of devices",
            "items": {
              "$ref": "#/components/schemas/Device"
            }
          },
          "navigation": {
            "$ref": "#/components/schemas/Navigation"
          }
        },
        "description": "Paginated devices response"
      },
      "DnsProtoResponseType": {
        "type": "string",
        "description": "DNS proto response type",
        "enum": [
          "RcodeSuccess",
          "RcodeFormatError",
          "RcodeServerFailure",
          "RcodeNameError",
          "RcodeNotImplemented",
          "RcodeRefused",
          "RcodeYXDomain",
          "RcodeYXRrset",
          "RcodeNXRrset",
          "RcodeNotAuth",
          "RcodeNotZone",
          "RcodeBadSig",
          "RcodeBadVers",
          "RcodeBadKey",
          "RcodeBadTime",
          "RcodeBadMode",
          "RcodeBadName",
          "RcodeBadAlg",
          "RcodeBadTrunc",
          "RcodeBadCookie"
        ]
      },
      "DnsProtoType": {
        "type": "object",
        "description": "DNS protocol type",
        "example": "DOT",
        "oneOf": [
          {
            "$ref": "#/components/schemas/SecureDnsProtoType"
          },
          {
            "$ref": "#/components/schemas/RegularDnsProtoType"
          }
        ],
        "properties": {
          "value": {
            "type": "integer",
            "format": "int32"
          }
        },
        "required": [
          "value"
        ]
      },
      "DnsServersResponse": {
        "required": [
          "items",
          "navigation"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "description": "List of DNS servers",
            "items": {
              "$ref": "#/components/schemas/DNSServer"
            }
          },
          "navigation": {
            "$ref": "#/components/schemas/Navigation"
          }
        },
        "description": "Paginated DNS servers response"
      },
      "DomainQueriesStats": {
        "required": [
          "domain",
          "value"
        ],
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Domain name",
            "example": "facebook.com"
          },
          "value": {
            "$ref": "#/components/schemas/QueriesStats"
          }
        },
        "description": "Domain queries stats"
      },
      "DomainQueriesStatsList": {
        "required": [
          "navigation",
          "stats"
        ],
        "type": "object",
        "properties": {
          "navigation": {
            "$ref": "#/components/schemas/Navigation"
          },
          "stats": {
            "type": "array",
            "description": "List of queries stats",
            "items": {
              "$ref": "#/components/schemas/DomainQueriesStats"
            }
          }
        },
        "description": "Domains queries statistics"
      },
      "ErrorCodes": {
        "type": "string",
        "description": "Possible error codes",
        "example": "FIELD_REQUIRED",
        "enum": [
          "BAD_REQUEST",
          "FIELD_REQUIRED",
          "FIELD_WRONG_VALUE",
          "FIELD_REACHED_LIMIT",
          "ALREADY_EXISTS",
          "INSUFFICIENT_LICENSE_TYPE",
          "RESOURCE_REACHED_LIMIT",
          "TOO_MANY_REQUESTS",
          "UNKNOWN",
          "CERT_DOMAIN_NAME",
          "CERT_SELF_SIGNED",
          "CERT_VALIDITY_DATE",
          "ACCESS_FORBIDDEN",
          "INVITATION_ALREADY_ADDED",
          "INVITATION_FOR_ACTIVE_MEMBER",
          "INVITATION_FOR_OWNER",
          "CUSTOM_FILTER_SOURCE_FORBIDDEN",
          "CUSTOM_FILTER_SOURCE_UNREACHABLE"
        ]
      },
      "ErrorResponse": {
        "required": [
          "error_code",
          "fields"
        ],
        "type": "object",
        "properties": {
          "error_code": {
            "$ref": "#/components/schemas/ErrorCodes"
          },
          "fields": {
            "type": "array",
            "description": "Fields errors",
            "items": {
              "$ref": "#/components/schemas/FieldError"
            }
          },
          "message": {
            "type": "string",
            "description": "Error message",
            "example": "Validation failed"
          }
        },
        "description": "Error response"
      },
      "FieldError": {
        "required": [
          "error_code",
          "field"
        ],
        "type": "object",
        "properties": {
          "error_code": {
            "$ref": "#/components/schemas/ErrorCodes"
          },
          "field": {
            "type": "string",
            "description": "Field name",
            "example": "name"
          },
          "message": {
            "type": "string",
            "description": "Error message",
            "example": "Field is required"
          }
        },
        "description": "Fields errors"
      },
      "FilterList": {
        "required": [
          "categories",
          "description",
          "download_url",
          "filter_id",
          "homepage_url",
          "name",
          "rules_count",
          "source_url",
          "tags",
          "time_updated"
        ],
        "type": "object",
        "properties": {
          "categories": {
            "type": "array",
            "description": "Filter categories",
            "items": {
              "$ref": "#/components/schemas/FilterListCategory"
            }
          },
          "description": {
            "type": "string",
            "description": "Filter description",
            "example": "Filter composed of several other filters (AdGuard Base filter, Social Media filter)..."
          },
          "download_url": {
            "type": "string",
            "description": "Filter download url",
            "example": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt"
          },
          "filter_id": {
            "type": "string",
            "description": "Filter ID",
            "example": "adguard_dns_filter"
          },
          "homepage_url": {
            "type": "string",
            "description": "Filter homepage url",
            "example": "https://github.com/AdguardTeam/AdGuardSDNSFilter"
          },
          "name": {
            "type": "string",
            "description": "Filter name",
            "example": "AdGuard DNS filter"
          },
          "rules_count": {
            "type": "integer",
            "description": "Rules count in filter",
            "format": "int32",
            "example": 10000
          },
          "source_url": {
            "type": "string",
            "description": "Filter source url",
            "example": "https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt"
          },
          "tags": {
            "type": "array",
            "description": "Filter tags",
            "example": [
              "purpose:general"
            ],
            "items": {
              "type": "string",
              "description": "Filter tags",
              "example": "[\"purpose:general\"]"
            }
          },
          "time_updated": {
            "type": "string",
            "description": "Filter last updated time",
            "format": "date-time",
            "example": "2024-01-15T10:30:00Z"
          }
        },
        "description": "General filter list info"
      },
      "FilterListCategory": {
        "required": [
          "category",
          "description"
        ],
        "type": "object",
        "properties": {
          "category": {
            "$ref": "#/components/schemas/FilterListCategoryType"
          },
          "description": {
            "type": "string",
            "description": "Localized description",
            "example": "Filters for security threats"
          },
          "value": {
            "type": "string",
            "description": "Filter category value",
            "example": "security"
          }
        },
        "description": "Filter category info"
      },
      "FilterListCategoryType": {
        "type": "string",
        "description": "Filter list category type",
        "enum": [
          "GENERAL",
          "SECURITY",
          "REGIONAL",
          "OTHER"
        ]
      },
      "FilterListItem": {
        "required": [
          "enabled",
          "filter_id"
        ],
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "The flag that the filter is on or off"
          },
          "filter_id": {
            "type": "string",
            "description": "Filter identifier",
            "example": "adguard_dns_filter"
          }
        },
        "description": "Filter"
      },
      "FilterListItemUpdate": {
        "required": [
          "filter_id"
        ],
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether the filter is enabled"
          },
          "filter_id": {
            "minLength": 1,
            "type": "string",
            "description": "Filter identifier",
            "example": "adguard_dns_filter"
          }
        },
        "description": "Filter update action"
      },
      "FilterListsSettings": {
        "required": [
          "enabled",
          "filter_list"
        ],
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether all filters are enabled"
          },
          "filter_list": {
            "type": "array",
            "description": "Filter list",
            "items": {
              "$ref": "#/components/schemas/FilterListItem"
            }
          }
        },
        "description": "Filter lists settings"
      },
      "FilterListsSettingsUpdate": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether all filters are enabled"
          },
          "filter_list": {
            "type": "array",
            "description": "Filter list",
            "items": {
              "$ref": "#/components/schemas/FilterListItemUpdate"
            }
          }
        },
        "description": "Filter lists settings update"
      },
      "FilteringActionSource": {
        "type": "string",
        "description": "Filtering action source",
        "enum": [
          "FILTERS",
          "USER_FILTER",
          "SAFEBROWSING",
          "PARENTAL_SAFE_SEARCH",
          "PARENTAL_YOUTUBE",
          "PARENTAL_ADULT",
          "PARENTAL_BLOCKED_SERVICE",
          "PARENTAL_FILTERING_CATEGORY",
          "PARENTAL_SCHEDULE",
          "NEWLY_REGISTERED_DOMAINS",
          "TYPOSQUATTING",
          "HOMOGLYPH"
        ]
      },
      "FilteringActionStatus": {
        "type": "string",
        "description": "Filtering action status",
        "enum": [
          "UNKNOWN",
          "NONE",
          "REQUEST_BLOCKED",
          "RESPONSE_BLOCKED",
          "REQUEST_ALLOWED",
          "RESPONSE_ALLOWED",
          "MODIFIED"
        ]
      },
      "FilteringInfo": {
        "type": "object",
        "properties": {
          "blocked_service_id": {
            "type": "string",
            "description": "Web service ID",
            "example": "instagram"
          },
          "filter_id": {
            "type": "string",
            "description": "Filter ID",
            "example": "adguard_dns_filter"
          },
          "filter_rule": {
            "type": "string",
            "description": "Filter rule",
            "example": "||example.org^"
          },
          "filtering_category_id": {
            "type": "string",
            "description": "Web service Filtering category ID",
            "example": "gambling"
          },
          "filtering_status": {
            "$ref": "#/components/schemas/FilteringActionStatus"
          },
          "filtering_type": {
            "$ref": "#/components/schemas/FilteringActionSource"
          }
        },
        "description": "Filtering info"
      },
      "IpAddress": {
        "required": [
          "ip_address",
          "type"
        ],
        "type": "object",
        "properties": {
          "ip_address": {
            "type": "string",
            "description": "IP address string",
            "example": "94.140.14.15"
          },
          "type": {
            "$ref": "#/components/schemas/IpType"
          }
        },
        "description": "IP address info"
      },
      "IpType": {
        "type": "string",
        "description": "IP address type",
        "example": "V4",
        "enum": [
          "V4",
          "V6"
        ]
      },
      "Limit": {
        "required": [
          "limit",
          "used"
        ],
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Max count",
            "format": "int32",
            "example": 100
          },
          "used": {
            "type": "integer",
            "description": "Used count",
            "format": "int64",
            "example": 5
          }
        },
        "description": "Entity of the limit"
      },
      "LinkDedicatedIPv4": {
        "required": [
          "ip"
        ],
        "type": "object",
        "properties": {
          "ip": {
            "type": "string",
            "description": "Dedicated IPv4",
            "example": "94.140.14.15"
          }
        },
        "description": "Link dedicated IPv4 request"
      },
      "Navigation": {
        "type": "object",
        "properties": {
          "next": {
            "$ref": "#/components/schemas/NavigationPage"
          },
          "prev": {
            "$ref": "#/components/schemas/NavigationPage"
          }
        },
        "description": "Pagination metadata"
      },
      "NavigationPage": {
        "required": [
          "page_cursor",
          "page_number"
        ],
        "type": "object",
        "properties": {
          "page_cursor": {
            "type": "string",
            "description": "Pagination cursor for this page",
            "example": "MTY0NTQ1MTQxOTQ0MToxOjIwOjMxMTg="
          },
          "page_number": {
            "type": "integer",
            "description": "Page number, positive",
            "format": "int32",
            "example": 1
          }
        },
        "description": "Pagination page descriptor"
      },
      "Page": {
        "required": [
          "current",
          "page_cursor",
          "page_number"
        ],
        "type": "object",
        "properties": {
          "current": {
            "type": "boolean",
            "description": "Whether this is the current page",
            "example": false
          },
          "page_cursor": {
            "type": "string",
            "description": "Pagination cursor",
            "example": "1645451419441:1:20:3118"
          },
          "page_number": {
            "type": "integer",
            "description": "Page number",
            "format": "int32",
            "example": 1
          }
        },
        "description": "Pagination"
      },
      "ParentalControlFilteringCategory": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Category identifier",
            "example": "adult"
          }
        },
        "description": "Parental control filtering category"
      },
      "ParentalControlSettings": {
        "required": [
          "block_adult_websites_enabled",
          "blocked_services",
          "enabled",
          "engines_safe_search_enabled",
          "screen_time_schedule",
          "youtube_safe_search_enabled"
        ],
        "type": "object",
        "properties": {
          "block_adult_websites_enabled": {
            "type": "boolean",
            "description": "Whether to block adult content"
          },
          "blocked_services": {
            "type": "array",
            "description": "List of blocked services",
            "items": {
              "$ref": "#/components/schemas/BlockedWebService"
            }
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether parental control is enabled"
          },
          "engines_safe_search_enabled": {
            "type": "boolean",
            "description": "Whether to enforce safe search on supported search engines"
          },
          "screen_time_schedule": {
            "$ref": "#/components/schemas/ScheduleWeek"
          },
          "youtube_safe_search_enabled": {
            "type": "boolean",
            "description": "Whether to enforce safe search on YouTube"
          }
        },
        "description": "Parental control settings"
      },
      "ParentalControlSettingsUpdate": {
        "type": "object",
        "properties": {
          "block_adult_websites_enabled": {
            "type": "boolean",
            "description": "Whether to block adult content"
          },
          "blocked_filtering_categories": {
            "type": "array",
            "description": "List of filtering categories with restricted access",
            "items": {
              "$ref": "#/components/schemas/BlockedFilteringCategoryUpdate"
            }
          },
          "blocked_services": {
            "type": "array",
            "description": "List of blocked services",
            "items": {
              "$ref": "#/components/schemas/BlockedWebServiceUpdate"
            }
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether parental control is enabled"
          },
          "engines_safe_search_enabled": {
            "type": "boolean",
            "description": "Whether to enforce safe search on supported search engines"
          },
          "screen_time_schedule": {
            "$ref": "#/components/schemas/ScheduleWeekUpdate"
          },
          "youtube_safe_search_enabled": {
            "type": "boolean",
            "description": "Whether to enforce safe search on YouTube"
          }
        },
        "description": "Parental control settings update request"
      },
      "QueriesStats": {
        "required": [
          "blocked",
          "companies",
          "queries"
        ],
        "type": "object",
        "properties": {
          "blocked": {
            "type": "integer",
            "description": "Blocked queries count",
            "format": "int64",
            "example": 14
          },
          "companies": {
            "type": "integer",
            "description": "Companies count",
            "format": "int32",
            "example": 4
          },
          "queries": {
            "type": "integer",
            "description": "Overall queries count",
            "format": "int64",
            "example": 86
          }
        },
        "description": "Aggregated query counts"
      },
      "QueryLogItem": {
        "required": [
          "category_type",
          "company_id",
          "device_id",
          "dns_server_id",
          "dnssec",
          "domain",
          "filtering_info",
          "time_iso",
          "time_millis"
        ],
        "type": "object",
        "properties": {
          "asn": {
            "type": "integer",
            "description": "AS number",
            "format": "int32",
            "example": 25227
          },
          "category_type": {
            "$ref": "#/components/schemas/CategoryType"
          },
          "client_country": {
            "type": "string",
            "description": "Client country code",
            "example": "RU"
          },
          "company_id": {
            "type": "string",
            "description": "Company ID",
            "example": "google"
          },
          "device_id": {
            "type": "string",
            "description": "Device ID",
            "example": "b3e82cd1"
          },
          "dns_proto_type": {
            "$ref": "#/components/schemas/DnsProtoType"
          },
          "dns_request_type": {
            "type": "string",
            "description": "DNS protocol request type",
            "example": "TypeA"
          },
          "dns_response_type": {
            "$ref": "#/components/schemas/DnsProtoResponseType"
          },
          "dns_server_id": {
            "type": "string",
            "description": "DNS Server ID",
            "example": "293e2f63"
          },
          "dnssec": {
            "type": "boolean",
            "description": "Requested with DNSSec",
            "example": false
          },
          "domain": {
            "type": "string",
            "description": "Domain name",
            "example": "ads.apple.com"
          },
          "filtering_info": {
            "$ref": "#/components/schemas/FilteringInfo"
          },
          "network": {
            "type": "string",
            "description": "Network name",
            "example": "JSC Avantel"
          },
          "response_country": {
            "type": "string",
            "description": "Response country code",
            "example": "US"
          },
          "time_iso": {
            "type": "string",
            "description": "Event time",
            "format": "date-time",
            "example": "2022-02-21T16:50:19.441+03:00"
          },
          "time_millis": {
            "type": "integer",
            "description": "Event time",
            "format": "int64",
            "example": 1645451419441
          }
        },
        "description": "Query log item info"
      },
      "QueryLogResponse": {
        "required": [
          "items",
          "pages"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "description": "Query log items",
            "items": {
              "$ref": "#/components/schemas/QueryLogItem"
            }
          },
          "pages": {
            "type": "array",
            "description": "Pagination",
            "items": {
              "$ref": "#/components/schemas/Page"
            }
          }
        },
        "description": "Query log response"
      },
      "RegularDnsProtoType": {
        "type": "string",
        "description": "Regular DNS proto type. Scheduled for removal: PLAIN_TCP, PLAIN_UDP",
        "enum": [
          "DNS",
          "PLAIN_TCP",
          "PLAIN_UDP"
        ]
      },
      "SafebrowsingSettings": {
        "required": [
          "block_dangerous_domains",
          "block_nrd",
          "blocking_mode_settings",
          "enabled",
          "homoglyph_protection_enabled",
          "typosquatting_protection_enabled"
        ],
        "type": "object",
        "properties": {
          "block_dangerous_domains": {
            "type": "boolean",
            "description": "Whether filtering dangerous domains are enabled"
          },
          "block_nrd": {
            "type": "boolean",
            "description": "Whether filtering newly registered domains are enabled"
          },
          "blocking_mode_settings": {
            "$ref": "#/components/schemas/BlockingModeSettings"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether safebrowsing settings are enabled"
          },
          "homoglyph_protection_enabled": {
            "type": "boolean",
            "description": "Whether homoglyph (IDN) protection is enabled"
          },
          "typosquatting_protection_enabled": {
            "type": "boolean",
            "description": "Whether typosquatting protection is enabled"
          }
        },
        "description": "Safebrowsing settings"
      },
      "SafebrowsingSettingsUpdate": {
        "type": "object",
        "properties": {
          "block_dangerous_domains": {
            "type": "boolean",
            "description": "Whether filtering dangerous domains are enabled"
          },
          "block_nrd": {
            "type": "boolean",
            "description": "Whether filtering newly registered domains are enabled"
          },
          "blocking_mode_settings": {
            "$ref": "#/components/schemas/BlockingModeSettingsUpdate"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether safebrowsing settings are enabled"
          },
          "homoglyph_protection_enabled": {
            "type": "boolean",
            "description": "Whether homoglyph (IDN) protection is enabled"
          },
          "typosquatting_protection_enabled": {
            "type": "boolean",
            "description": "Whether typosquatting protection is enabled"
          }
        },
        "description": "Safebrowsing settings update action"
      },
      "ScheduleDay": {
        "required": [
          "day_of_week",
          "enabled",
          "from_time",
          "to_time"
        ],
        "type": "object",
        "properties": {
          "day_of_week": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "enabled": {
            "type": "boolean",
            "description": "Shows enabled/disabled day"
          },
          "from_time": {
            "$ref": "#/components/schemas/ScheduleTime"
          },
          "to_time": {
            "$ref": "#/components/schemas/ScheduleTime"
          }
        },
        "description": "Describes a schedule for day"
      },
      "ScheduleDayUpdate": {
        "required": [
          "day_of_week"
        ],
        "type": "object",
        "properties": {
          "day_of_week": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether this day schedule is enabled"
          },
          "from_time": {
            "$ref": "#/components/schemas/ScheduleTime"
          },
          "to_time": {
            "$ref": "#/components/schemas/ScheduleTime"
          }
        },
        "description": "Describes a schedule for day"
      },
      "ScheduleTime": {
        "required": [
          "hours",
          "minutes"
        ],
        "type": "object",
        "properties": {
          "hours": {
            "maximum": 23,
            "minimum": 0,
            "type": "integer",
            "description": "Hour in day",
            "format": "int32"
          },
          "minutes": {
            "maximum": 59,
            "minimum": 0,
            "type": "integer",
            "description": "Minute in hour",
            "format": "int32"
          }
        },
        "description": "Describes a time"
      },
      "ScheduleWeek": {
        "required": [
          "daily_schedule"
        ],
        "type": "object",
        "properties": {
          "daily_schedule": {
            "type": "array",
            "description": "Schedule by days",
            "items": {
              "$ref": "#/components/schemas/ScheduleDay"
            }
          }
        },
        "description": "Describes a schedule for week"
      },
      "ScheduleWeekUpdate": {
        "required": [
          "daily_schedule"
        ],
        "type": "object",
        "properties": {
          "daily_schedule": {
            "type": "array",
            "description": "Schedule by days",
            "items": {
              "$ref": "#/components/schemas/ScheduleDayUpdate"
            }
          }
        },
        "description": "Describes a schedule for week"
      },
      "SecureDnsProtoType": {
        "type": "string",
        "description": "Secure DNS proto type. Scheduled for removal: DNSCRYPT_TCP, DNSCRYPT_UDP",
        "enum": [
          "DOH",
          "DOQ",
          "DOT",
          "DNSCRYPT",
          "DNSCRYPT_TCP",
          "DNSCRYPT_UDP"
        ]
      },
      "TimeQueriesStats": {
        "required": [
          "time_millis",
          "value"
        ],
        "type": "object",
        "properties": {
          "time_millis": {
            "type": "integer",
            "description": "Time in millis",
            "format": "int64",
            "example": 1655804673
          },
          "value": {
            "$ref": "#/components/schemas/QueriesStats"
          }
        },
        "description": "Time moment query stats"
      },
      "TimeQueriesStatsList": {
        "required": [
          "stats"
        ],
        "type": "object",
        "properties": {
          "stats": {
            "type": "array",
            "description": "List of queries stats",
            "items": {
              "$ref": "#/components/schemas/TimeQueriesStats"
            }
          }
        },
        "description": "Time series query statistics"
      },
      "UserRulesSettings": {
        "required": [
          "enabled",
          "rules",
          "rules_count"
        ],
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether all rules are enabled"
          },
          "rules": {
            "type": "array",
            "description": "List of rules",
            "example": [
              "||example.org^"
            ],
            "items": {
              "type": "string",
              "description": "List of rules",
              "example": "[\"||example.org^\"]"
            }
          },
          "rules_count": {
            "type": "integer",
            "description": "Rules count in user list",
            "format": "int32",
            "example": 50
          }
        },
        "description": "User rules"
      },
      "UserRulesSettingsUpdate": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Whether all rules are enabled"
          },
          "rules": {
            "type": "array",
            "description": "List of rules",
            "example": [
              "||example.org^"
            ],
            "items": {
              "maxLength": 1024,
              "minLength": 0,
              "type": "string",
              "description": "List of rules",
              "example": "[\"||example.org^\"]"
            }
          }
        },
        "description": "User rules update action"
      },
      "WebService": {
        "required": [
          "icon_svg",
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "icon_svg": {
            "type": "string",
            "description": "SVG icon",
            "example": "\u003Csvg\u003E\u003Cpath d=\"M 44 14 C 44 13...\" /\u003E\u003C/svg\u003E"
          },
          "id": {
            "type": "string",
            "description": "Web-service identifier",
            "example": "9gag"
          },
          "name": {
            "type": "string",
            "description": "Web-service name",
            "example": "9GAG"
          }
        },
        "description": "Web-service"
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "description": "API Key authentication. Enter your key with 'ApiKey ' prefix (e.g., 'ApiKey your-api-key-here')",
        "in": "header",
        "name": "Authorization",
        "type": "apiKey"
      },
      "AuthToken": {
        "description": "Authorization token",
        "in": "header",
        "scheme": "Bearer",
        "type": "http"
      }
    }
  }
}
