openapi: 3.0.3 info: title: AdGuard Home description: AdGuard Home REST API. Admin web interface is built on top of this REST API. version: "0.104" contact: name: "AdGuard Home" url: "https://github.com/AdguardTeam/AdGuardHome" servers: - url: /control tags: - name: clients description: Clients list operations - name: dhcp description: Built-in DHCP server controls - name: filtering description: Rule-based filtering - name: global description: AdGuard Home server general settings and controls - name: i18n description: Application localization - name: install description: First-time install configuration handlers - name: log description: AdGuard Home query log - name: parental description: Blocking adult and explicit materials - name: safebrowsing description: Blocking malware/phishing sites - name: safesearch description: Enforce family-friendly results in search engines - name: stats description: AdGuard Home statistics - name: tls description: AdGuard Home HTTPS/DOH/DOT settings - name: mobileconfig description: Apple .mobileconfig paths: /status: get: tags: - global operationId: status summary: Get DNS server current status and general settings responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/ServerStatus" /dns_info: get: tags: - global operationId: dnsInfo summary: Get general DNS parameters responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/DNSConfig" /dns_config: post: tags: - global operationId: dnsConfig summary: Set general DNS parameters requestBody: content: application/json: schema: $ref: "#/components/schemas/DNSConfig" responses: "200": description: OK /test_upstream_dns: post: tags: - global operationId: testUpstreamDNS summary: Test upstream configuration requestBody: content: application/json: schema: $ref: "#/components/schemas/UpstreamsConfig" description: Upstream configuration to be tested responses: "200": description: Status of testing each requested server, with "OK" meaning that server works, any other text means an error. content: application/json: examples: response: value: 1.1.1.1: OK 1.0.0.1: OK 8.8.8.8: OK 8.8.4.4: OK 192.168.1.104:53535: Couldn't communicate with DNS server /version.json: post: tags: - global operationId: getVersionJson summary: Gets information about the latest available version of AdGuard requestBody: content: application/json: schema: $ref: "#/components/schemas/GetVersionRequest" required: true responses: "200": description: Version info. If response message is empty, UI does not show a version update message. content: application/json: schema: $ref: "#/components/schemas/VersionInfo" "500": description: Cannot write answer "502": description: Cannot retrieve the version.json file contents /update: post: tags: - global operationId: beginUpdate summary: Begin auto-upgrade procedure responses: "200": description: OK "500": description: Failed /querylog: get: tags: - log operationId: queryLog summary: Get DNS server query log. parameters: - name: older_than in: query description: Filter by older than schema: type: string - name: offset in: query description: Specify the ranking number of the first item on the page. Even though it is possible to use "offset" and "older_than", we recommend choosing one of them and sticking to it. schema: type: integer - name: limit in: query description: Limit the number of records to be returned schema: type: integer - name: search in: query description: Filter by domain name or client IP schema: type: string - name: response_status in: query description: Filter by response status schema: type: string enum: - all - filtered - blocked - blocked_safebrowsing - blocked_parental - whitelisted - rewritten - safe_search - processed responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/QueryLog" /querylog_info: get: tags: - log operationId: queryLogInfo summary: Get query log parameters responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/QueryLogConfig" /querylog_config: post: tags: - log operationId: queryLogConfig summary: Set query log parameters requestBody: content: application/json: schema: $ref: "#/components/schemas/QueryLogConfig" responses: "200": description: OK /querylog_clear: post: tags: - log operationId: querylogClear summary: Clear query log responses: "200": description: OK /stats: get: tags: - stats operationId: stats summary: Get DNS server statistics responses: "200": description: Returns statistics data content: application/json: schema: $ref: "#/components/schemas/Stats" /stats_reset: post: tags: - stats operationId: statsReset summary: Reset all statistics to zeroes responses: "200": description: OK /stats_info: get: tags: - stats operationId: statsInfo summary: Get statistics parameters responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/StatsConfig" /stats_config: post: tags: - stats operationId: statsConfig summary: Set statistics parameters requestBody: content: application/json: schema: $ref: "#/components/schemas/StatsConfig" responses: "200": description: OK /tls/status: get: tags: - tls operationId: tlsStatus summary: Returns TLS configuration and its status responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/TlsConfig" /tls/configure: post: tags: - tls operationId: tlsConfigure summary: Updates current TLS configuration requestBody: $ref: "#/components/requestBodies/TlsConfig" responses: "200": description: TLS configuration and its status content: application/json: schema: $ref: "#/components/schemas/TlsConfig" "400": description: Invalid configuration or unavailable port "500": description: Error occurred while applying configuration /tls/validate: post: tags: - tls operationId: tlsValidate summary: Checks if the current TLS configuration is valid requestBody: $ref: "#/components/requestBodies/TlsConfig" responses: "200": description: TLS configuration and its status content: application/json: schema: $ref: "#/components/schemas/TlsConfig" "400": description: Invalid configuration or unavailable port /dhcp/status: get: tags: - dhcp operationId: dhcpStatus summary: Gets the current DHCP settings and status responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/DhcpStatus" "501": content: application/json: schema: $ref: "#/components/schemas/Error" description: Not implemented (for example, on Windows). /dhcp/set_config: post: tags: - dhcp operationId: dhcpSetConfig summary: Updates the current DHCP server configuration requestBody: content: application/json: schema: $ref: "#/components/schemas/DhcpConfig" responses: "200": description: OK "501": content: application/json: schema: $ref: "#/components/schemas/Error" description: Not implemented (for example, on Windows). /dhcp/find_active_dhcp: post: tags: - dhcp operationId: checkActiveDhcp summary: Searches for an active DHCP server on the network responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/DhcpSearchResult" "501": content: application/json: schema: $ref: "#/components/schemas/Error" description: Not implemented (for example, on Windows). /dhcp/add_static_lease: post: tags: - dhcp operationId: dhcpAddStaticLease summary: Adds a static lease requestBody: $ref: "#/components/requestBodies/DhcpStaticLease" responses: "200": description: OK "501": content: application/json: schema: $ref: "#/components/schemas/Error" description: Not implemented (for example, on Windows). /dhcp/remove_static_lease: post: tags: - dhcp operationId: dhcpRemoveStaticLease summary: Removes a static lease requestBody: $ref: "#/components/requestBodies/DhcpStaticLease" responses: "200": description: OK "501": content: application/json: schema: $ref: "#/components/schemas/Error" description: Not implemented (for example, on Windows). /dhcp/reset: post: tags: - dhcp operationId: dhcpReset summary: Reset DHCP configuration responses: "200": description: OK "501": content: application/json: schema: $ref: "#/components/schemas/Error" description: Not implemented (for example, on Windows). /filtering/status: get: tags: - filtering operationId: filteringStatus summary: Get filtering parameters responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/FilterStatus" /filtering/config: post: tags: - filtering operationId: filteringConfig summary: Set filtering parameters requestBody: content: application/json: schema: $ref: "#/components/schemas/FilterConfig" required: true responses: "200": description: OK /filtering/add_url: post: tags: - filtering operationId: filteringAddURL summary: Add filter URL or an absolute file path requestBody: content: application/json: schema: $ref: "#/components/schemas/AddUrlRequest" required: true responses: "200": description: OK /filtering/remove_url: post: tags: - filtering operationId: filteringRemoveURL summary: Remove filter URL requestBody: content: application/json: schema: $ref: "#/components/schemas/RemoveUrlRequest" required: true responses: "200": description: OK /filtering/set_url: post: tags: - filtering operationId: filteringSetURL summary: Set URL parameters requestBody: content: application/json: schema: $ref: "#/components/schemas/FilterSetUrl" responses: "200": description: OK /filtering/refresh: post: tags: - filtering operationId: filteringRefresh summary: > Reload filtering rules from URLs This might be needed if new URL was just added and you dont want to wait for automatic refresh to kick in. This API request is ratelimited, so you can call it freely as often as you like, it wont create unneccessary burden on servers that host the URL. This should work as intended, a `force` parameter is offered as last-resort attempt to make filter lists fresh. If you ever find yourself using `force` to make something work that otherwise wont, this is a bug and report it accordingly. requestBody: content: application/json: schema: $ref: "#/components/schemas/FilterRefreshRequest" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/FilterRefreshResponse" /filtering/set_rules: post: tags: - filtering operationId: filteringSetRules summary: Set user-defined filter rules requestBody: content: text/plain: schema: type: string example: "@@||yandex.ru^|" description: All filtering rules, one line per rule responses: "200": description: OK /filtering/check_host: get: tags: - filtering operationId: filteringCheckHost summary: Check if host name is filtered parameters: - name: name in: query description: Filter by host name schema: type: string responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/FilterCheckHostResponse" /safebrowsing/enable: post: tags: - safebrowsing operationId: safebrowsingEnable summary: Enable safebrowsing responses: "200": description: OK /safebrowsing/disable: post: tags: - safebrowsing operationId: safebrowsingDisable summary: Disable safebrowsing responses: "200": description: OK /safebrowsing/status: get: tags: - safebrowsing operationId: safebrowsingStatus summary: Get safebrowsing status responses: "200": description: OK content: application/json: examples: response: value: enabled: false /parental/enable: post: tags: - parental operationId: parentalEnable summary: Enable parental filtering requestBody: content: text/plain: schema: type: string enum: - EARLY_CHILDHOOD - YOUNG - TEEN - MATURE example: sensitivity=TEEN description: | Age sensitivity for parental filtering, EARLY_CHILDHOOD is 3 YOUNG is 10 TEEN is 13 MATURE is 17 required: true responses: "200": description: OK /parental/disable: post: tags: - parental operationId: parentalDisable summary: Disable parental filtering responses: "200": description: OK /parental/status: get: tags: - parental operationId: parentalStatus summary: Get parental filtering status responses: "200": description: OK content: application/json: examples: response: value: enabled: true sensitivity: 13 /safesearch/enable: post: tags: - safesearch operationId: safesearchEnable summary: Enable safesearch responses: "200": description: OK /safesearch/disable: post: tags: - safesearch operationId: safesearchDisable summary: Disable safesearch responses: "200": description: OK /safesearch/status: get: tags: - safesearch operationId: safesearchStatus summary: Get safesearch status responses: "200": description: OK content: application/json: examples: response: value: enabled: false /clients: get: tags: - clients operationId: clientsStatus summary: Get information about configured clients responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/Clients" /clients/add: post: tags: - clients operationId: clientsAdd summary: Add a new client requestBody: content: application/json: schema: $ref: "#/components/schemas/Client" required: true responses: "200": description: OK /clients/delete: post: tags: - clients operationId: clientsDelete summary: Remove a client requestBody: content: application/json: schema: $ref: "#/components/schemas/ClientDelete" required: true responses: "200": description: OK /clients/update: post: tags: - clients operationId: clientsUpdate summary: Update client information requestBody: content: application/json: schema: $ref: "#/components/schemas/ClientUpdate" required: true responses: "200": description: OK /clients/find: get: tags: - clients operationId: clientsFind summary: Get information about selected clients by their IP address parameters: - name: ip0 in: query description: Filter by IP address schema: type: string responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/ClientsFindResponse" /blocked_services/list: get: tags: - blocked_services operationId: blockedServicesList summary: Get blocked services list responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/BlockedServicesArray" /blocked_services/set: post: tags: - blocked_services operationId: blockedServicesSet summary: Set blocked services list requestBody: content: application/json: schema: $ref: "#/components/schemas/BlockedServicesArray" responses: "200": description: OK /rewrite/list: get: tags: - rewrite operationId: rewriteList summary: Get list of Rewrite rules responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/RewriteList" /rewrite/add: post: tags: - rewrite operationId: rewriteAdd summary: Add a new Rewrite rule requestBody: $ref: "#/components/requestBodies/RewriteEntry" responses: "200": description: OK /rewrite/delete: post: tags: - rewrite operationId: rewriteDelete summary: Remove a Rewrite rule requestBody: $ref: "#/components/requestBodies/RewriteEntry" responses: "200": description: OK /i18n/change_language: post: tags: - i18n operationId: changeLanguage summary: Change current language. Argument must be an ISO 639-1 two-letter code requestBody: content: text/plain: schema: type: string example: en description: New language. It must be known to the server and must be an ISO 639-1 two-letter code responses: "200": description: OK /i18n/current_language: get: tags: - i18n operationId: currentLanguage summary: Get currently set language. Result is ISO 639-1 two-letter code. Empty result means default language. responses: "200": description: OK content: text/plain: examples: response: value: en /install/get_addresses: get: tags: - install operationId: installGetAddresses summary: Gets the network interfaces information. responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/AddressesInfo" /install/check_config: post: tags: - install operationId: installCheckConfig summary: Checks configuration requestBody: content: application/json: schema: $ref: "#/components/schemas/CheckConfigRequest" description: Configuration to be checked required: true responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/CheckConfigResponse" "400": description: Failed to parse JSON or cannot listen on the specified address /install/configure: post: tags: - install operationId: installConfigure summary: Applies the initial configuration. requestBody: content: application/json: schema: $ref: "#/components/schemas/InitialConfiguration" description: Initial configuration JSON required: true responses: "200": description: OK "400": description: Failed to parse initial configuration or cannot listen to the specified addresses "500": description: Cannot start the DNS server /login: post: tags: - global operationId: login summary: Perform administrator log-in requestBody: content: application/json: schema: $ref: "#/components/schemas/Login" required: true responses: "200": description: OK /logout: get: tags: - global operationId: logout summary: Perform administrator log-out responses: "302": description: OK /profile: get: tags: - global operationId: getProfile summary: "" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/ProfileInfo" /apple/doh.mobileconfig: get: tags: - mobileconfig - global operationId: mobileConfigDoH summary: Get DNS over HTTPS .mobileconfig responses: "200": description: DNS over HTTPS plist file /apple/dot.mobileconfig: get: tags: - mobileconfig - global operationId: mobileConfigDoT summary: Get TLS over TLS .mobileconfig responses: "200": description: DNS over TLS plist file components: requestBodies: TlsConfig: content: application/json: schema: $ref: "#/components/schemas/TlsConfig" description: TLS configuration JSON required: true DhcpStaticLease: content: application/json: schema: $ref: "#/components/schemas/DhcpStaticLease" required: true RewriteEntry: content: application/json: schema: $ref: "#/components/schemas/RewriteEntry" required: true schemas: ServerStatus: type: object description: AdGuard Home server status and configuration required: - dns_address - dns_port - protection_enabled - querylog_enabled - running - bootstrap_dns - upstream_dns - version - language properties: dns_address: type: string example: 127.0.0.1 dns_port: type: integer format: int32 example: 53 minimum: 1 maximum: 65535 protection_enabled: type: boolean dhcp_available: type: boolean querylog_enabled: type: boolean running: type: boolean version: type: string example: "0.1" language: type: string example: en DNSConfig: type: object description: Query log configuration properties: bootstrap_dns: type: array description: Bootstrap servers, port is optional after colon. Empty value will reset it to default values items: type: string example: - 8.8.8.8:53 - 1.1.1.1:53 upstream_dns: type: array description: Upstream servers, port is optional after colon. Empty value will reset it to default values items: type: string example: - tls://1.1.1.1 - tls://1.0.0.1 upstream_dns_file: type: string protection_enabled: type: boolean dhcp_available: type: boolean ratelimit: type: integer blocking_mode: type: string enum: - default - refused - nxdomain - null_ip - custom_ip blocking_ipv4: type: string blocking_ipv6: type: string edns_cs_enabled: type: boolean dnssec_enabled: type: boolean cache_size: type: integer cache_ttl_min: type: integer cache_ttl_max: type: integer upstream_mode: enum: - "" - parallel - fastest_addr UpstreamsConfig: type: object description: Upstreams configuration required: - bootstrap_dns - upstream_dns properties: bootstrap_dns: type: array description: Bootstrap servers, port is optional after colon. Empty value will reset it to default values items: type: string example: - 8.8.8.8:53 - 1.1.1.1:53 upstream_dns: type: array description: Upstream servers, port is optional after colon. Empty value will reset it to default values items: type: string example: - tls://1.1.1.1 - tls://1.0.0.1 Filter: type: object description: Filter subscription info required: - enabled - id - lastUpdated - name - rulesCount - url properties: enabled: type: boolean id: type: integer example: 1234 lastUpdated: type: string format: date-time example: 2018-10-30T12:18:57+03:00 name: type: string example: AdGuard Simplified Domain Names filter rulesCount: type: integer example: 5912 url: type: string example: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt FilterStatus: type: object description: Filtering settings properties: enabled: type: boolean interval: type: integer filters: type: array items: $ref: "#/components/schemas/Filter" user_rules: type: array items: type: string FilterConfig: type: object description: Filtering settings properties: enabled: type: boolean interval: type: integer FilterSetUrl: type: object description: Filtering URL settings properties: data: properties: enabled: type: boolean name: type: string url: type: string type: object url: type: string whitelist: type: boolean FilterRefreshRequest: type: object description: Refresh Filters request data properties: whitelist: type: boolean FilterCheckHostResponse: type: object description: Check Host Result properties: reason: type: string description: DNS filter status enum: - NotFilteredNotFound - NotFilteredWhiteList - NotFilteredError - FilteredBlackList - FilteredSafeBrowsing - FilteredParental - FilteredInvalid - FilteredSafeSearch - FilteredBlockedService - ReasonRewrite filter_id: type: integer rule: type: string example: "||example.org^" description: Filtering rule applied to the request (if any) service_name: type: string description: Set if reason=FilteredBlockedService cname: type: string description: Set if reason=ReasonRewrite ip_addrs: type: array items: type: string description: Set if reason=ReasonRewrite FilterRefreshResponse: type: object description: /filtering/refresh response data properties: updated: type: integer GetVersionRequest: type: object description: /version.json request data properties: recheck_now: description: If false, server will check for a new version data only once in several hours type: boolean VersionInfo: type: object description: Information about the latest available version of AdGuard Home properties: new_version: type: string example: v0.9 announcement: type: string example: AdGuard Home v0.9 is now available! announcement_url: type: string example: https://github.com/AdguardTeam/AdGuardHome/releases/tag/v0.9 can_autoupdate: type: boolean Stats: type: object description: Server statistics data properties: time_units: type: string description: Time units (hours | days) example: hours num_dns_queries: type: integer description: Total number of DNS queries example: 123 num_blocked_filtering: type: integer description: Number of requests blocked by filtering rules example: 50 num_replaced_safebrowsing: type: integer description: Number of requests blocked by safebrowsing module example: 5 num_replaced_safesearch: type: integer description: Number of requests blocked by safesearch module example: 5 num_replaced_parental: type: integer description: Number of blocked adult websites example: 15 avg_processing_time: type: number format: float description: Average time in milliseconds on processing a DNS example: 0.34 top_queried_domains: type: array items: $ref: "#/components/schemas/TopArrayEntry" top_clients: type: array items: $ref: "#/components/schemas/TopArrayEntry" top_blocked_domains: type: array items: $ref: "#/components/schemas/TopArrayEntry" dns_queries: type: array items: type: integer blocked_filtering: type: array items: type: integer replaced_safebrowsing: type: array items: type: integer replaced_parental: type: array items: type: integer TopArrayEntry: type: object description: Represent the number of hits per key (domain or client IP) properties: domain_or_ip: type: integer StatsConfig: type: object description: Statistics configuration properties: interval: type: integer description: Time period to keep data (1 | 7 | 30 | 90) DhcpConfig: type: object properties: enabled: type: boolean interface_name: type: string v4: $ref: "#/components/schemas/DhcpConfigV4" v6: $ref: "#/components/schemas/DhcpConfigV6" DhcpConfigV4: type: object properties: gateway_ip: type: string example: 192.168.1.1 subnet_mask: type: string example: 255.255.255.0 range_start: type: string example: 192.168.1.2 range_end: type: string example: 192.168.10.50 lease_duration: type: integer DhcpConfigV6: type: object properties: range_start: type: string lease_duration: type: integer DhcpLease: type: object description: DHCP lease information required: - mac - ip - hostname - expires properties: mac: type: string example: 00:11:09:b3:b3:b8 ip: type: string example: 192.168.1.22 hostname: type: string example: dell expires: type: string example: "2017-07-21T17:32:28Z" DhcpStaticLease: type: object description: DHCP static lease information required: - mac - ip - hostname - expires properties: mac: type: string example: 00:11:09:b3:b3:b8 ip: type: string example: 192.168.1.22 hostname: type: string example: dell DhcpStatus: type: object description: Built-in DHCP server configuration and status required: - config - leases properties: enabled: type: boolean interface_name: type: string v4: $ref: "#/components/schemas/DhcpConfigV4" v6: $ref: "#/components/schemas/DhcpConfigV6" leases: type: array items: $ref: "#/components/schemas/DhcpLease" static_leases: type: array items: $ref: "#/components/schemas/DhcpStaticLease" DhcpSearchResult: type: object description: Information about a DHCP server discovered in the current network properties: v4: $ref: "#/components/schemas/DhcpSearchV4" v6: $ref: "#/components/schemas/DhcpSearchV6" DhcpSearchV4: type: object properties: other_server: $ref: "#/components/schemas/DhcpSearchResultOtherServer" static_ip: $ref: "#/components/schemas/DhcpSearchResultStaticIP" DhcpSearchV6: type: object properties: other_server: $ref: "#/components/schemas/DhcpSearchResultOtherServer" DhcpSearchResultOtherServer: type: object properties: found: type: string description: yes|no|error example: no error: type: string description: Set if found=error example: "" DhcpSearchResultStaticIP: type: object properties: static: type: string description: yes|no|error example: yes ip: type: string description: Set if static=no example: "" DnsAnswer: type: object description: DNS answer section properties: ttl: type: integer example: 55 type: type: string example: A value: type: string example: 217.69.139.201 DnsQuestion: type: object description: DNS question section properties: class: type: string example: IN host: type: string example: example.org type: type: string example: A AddUrlRequest: type: object description: /add_url request data properties: name: type: string url: description: URL or an absolute path to the file containing filtering rules type: string example: https://filters.adtidy.org/windows/filters/15.txt whitelist: type: boolean RemoveUrlRequest: type: object description: /remove_url request data properties: url: description: Previously added URL containing filtering rules type: string example: https://filters.adtidy.org/windows/filters/15.txt QueryLogItem: type: object description: Query log item properties: answer: type: array items: $ref: "#/components/schemas/DnsAnswer" original_answer: type: array description: Answer from upstream server (optional) items: $ref: "#/components/schemas/DnsAnswer" upstream: type: string description: Upstream URL starting with tcp://, tls://, https://, or with an IP address answer_dnssec: type: boolean client: type: string example: 192.168.0.1 client_proto: enum: - dot - doh - doq - "" elapsedMs: type: string example: "54.023928" question: $ref: "#/components/schemas/DnsQuestion" filterId: type: integer example: 123123 description: In case if there's a rule applied to this DNS request, this is ID of the filter that rule belongs to. rule: type: string example: "||example.org^" description: Filtering rule applied to the request (if any) reason: type: string description: DNS filter status enum: - NotFilteredNotFound - NotFilteredWhiteList - NotFilteredError - FilteredBlackList - FilteredSafeBrowsing - FilteredParental - FilteredInvalid - FilteredSafeSearch - FilteredBlockedService - ReasonRewrite service_name: type: string description: Set if reason=FilteredBlockedService status: type: string description: DNS response status example: NOERROR time: type: string description: DNS request processing start time example: 2018-11-26T00:02:41+03:00 QueryLog: type: object description: Query log properties: oldest: type: string example: 2018-11-26T00:02:41+03:00 data: type: array items: $ref: "#/components/schemas/QueryLogItem" QueryLogConfig: type: object description: Query log configuration properties: enabled: type: boolean description: Is query log enabled interval: type: integer description: Time period to keep data (1 | 7 | 30 | 90) anonymize_client_ip: type: boolean description: Anonymize clients' IP addresses TlsConfig: type: object description: TLS configuration settings and status properties: enabled: type: boolean example: "true" description: enabled is the encryption (DOT/DOH/HTTPS) status server_name: type: string example: example.org description: server_name is the hostname of your HTTPS/TLS server force_https: type: boolean example: "true" description: if true, forces HTTP->HTTPS redirect port_https: type: integer format: int32 example: 443 description: HTTPS port. If 0, HTTPS will be disabled. port_dns_over_tls: type: integer format: int32 example: 853 description: DNS-over-TLS port. If 0, DOT will be disabled. port_dns_over_quic: type: integer format: int32 example: 784 description: DNS-over-QUIC port. If 0, DOQ will be disabled. certificate_chain: type: string description: Base64 string with PEM-encoded certificates chain private_key: type: string description: Base64 string with PEM-encoded private key certificate_path: type: string description: Path to certificate file private_key_path: type: string description: Path to private key file valid_cert: type: boolean example: "true" description: valid_cert is true if the specified certificates chain is a valid chain of X509 certificates valid_chain: type: boolean example: "true" description: valid_chain is true if the specified certificates chain is verified and issued by a known CA subject: type: string example: CN=example.org description: subject is the subject of the first certificate in the chain issuer: type: string example: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US description: issuer is the issuer of the first certificate in the chain not_before: type: string example: 2019-01-31T10:47:32Z description: not_before is the NotBefore field of the first certificate in the chain not_after: type: string example: 2019-05-01T10:47:32Z description: not_after is the NotAfter field of the first certificate in the chain dns_names: type: array items: type: string description: dns_names is the value of SubjectAltNames field of the first certificate in the chain example: - "*.example.org" valid_key: type: boolean example: "true" description: valid_key is true if the key is a valid private key key_type: type: string example: RSA description: key_type is either RSA or ECDSA warning_validation: type: string example: You have specified an empty certificate description: warning_validation is a validation warning message with the issue description valid_pair: type: boolean example: "true" description: valid_pair is true if both certificate and private key are correct NetInterface: type: object description: Network interface info properties: flags: type: string example: up|broadcast|multicast hardware_address: type: string example: 52:54:00:11:09:ba name: type: string example: eth0 ipv4_addresses: type: array items: type: string ipv6_addresses: type: array items: type: string gateway_ip: type: string AddressInfo: type: object description: Port information properties: ip: type: string example: 127.0.0.1 port: type: integer format: int32 example: 53 AddressesInfo: type: object description: AdGuard Home addresses configuration properties: dns_port: type: integer format: int32 example: 53 web_port: type: integer format: int32 example: 80 interfaces: type: object description: Network interfaces dictionary (key is the interface name) additionalProperties: $ref: "#/components/schemas/NetInterface" ProfileInfo: type: object description: Information about the current user properties: name: type: string Client: type: object description: Client information properties: name: type: string description: Name example: localhost ids: type: array description: IP, CIDR or MAC address items: type: string use_global_settings: type: boolean filtering_enabled: type: boolean parental_enabled: type: boolean safebrowsing_enabled: type: boolean safesearch_enabled: type: boolean use_global_blocked_services: type: boolean blocked_services: type: array items: type: string upstreams: type: array items: type: string ClientAuto: type: object description: Auto-Client information properties: ip: type: string description: IP address example: 127.0.0.1 name: type: string description: Name example: localhost source: type: string description: The source of this information example: etc/hosts ClientUpdate: type: object description: Client update request properties: name: type: string data: $ref: "#/components/schemas/Client" ClientDelete: type: object description: Client delete request properties: name: type: string ClientsFindResponse: type: array description: Response to clients find operation items: $ref: "#/components/schemas/ClientsFindEntry" ClientsFindEntry: type: object properties: 1.2.3.4: items: $ref: "#/components/schemas/ClientFindSubEntry" ClientFindSubEntry: type: object properties: name: type: string description: Name example: localhost ids: type: array description: IP, CIDR or MAC address items: type: string use_global_settings: type: boolean filtering_enabled: type: boolean parental_enabled: type: boolean safebrowsing_enabled: type: boolean safesearch_enabled: type: boolean use_global_blocked_services: type: boolean blocked_services: type: array items: type: string upstreams: type: array items: type: string whois_info: type: array items: $ref: "#/components/schemas/WhoisInfo" disallowed: type: boolean description: > Whether the client's IP is blocked or not. disallowed_rule: type: string description: > The rule due to which the client is disallowed. If `disallowed` is `true`, and this string is empty - it means that the client IP is disallowed by the "allowed IP list", i.e. it is not included in allowed list. WhoisInfo: type: object properties: key: type: string Clients: type: object properties: clients: $ref: "#/components/schemas/ClientsArray" auto_clients: $ref: "#/components/schemas/ClientsAutoArray" ClientsArray: type: array items: $ref: "#/components/schemas/Client" description: Clients array ClientsAutoArray: type: array items: $ref: "#/components/schemas/ClientAuto" description: Auto-Clients array RewriteList: type: array items: $ref: "#/components/schemas/RewriteEntry" description: Rewrite rules array RewriteEntry: type: object description: Rewrite rule properties: domain: type: string description: Domain name example: example.org answer: type: string description: value of A, AAAA or CNAME DNS record example: 127.0.0.1 BlockedServicesArray: type: array items: type: string CheckConfigRequest: type: object description: Configuration to be checked properties: dns: $ref: "#/components/schemas/CheckConfigRequestInfo" web: $ref: "#/components/schemas/CheckConfigRequestInfo" set_static_ip: type: boolean example: false CheckConfigRequestInfo: type: object properties: ip: type: string example: 127.0.0.1 port: type: integer format: int32 example: 53 autofix: type: boolean example: false CheckConfigResponse: type: object properties: dns: $ref: "#/components/schemas/CheckConfigResponseInfo" web: $ref: "#/components/schemas/CheckConfigResponseInfo" static_ip: $ref: "#/components/schemas/CheckConfigStaticIpInfo" CheckConfigResponseInfo: type: object properties: status: type: string example: "" can_autofix: type: boolean example: false CheckConfigStaticIpInfo: type: object properties: static: type: string example: no description: "Can be: yes, no, error" ip: type: string example: 192.168.1.1 description: Current dynamic IP address. Set if static=no error: type: string example: "" description: Error text. Set if static=error InitialConfiguration: type: object description: AdGuard Home initial configuration (for the first-install wizard) properties: dns: $ref: "#/components/schemas/AddressInfo" web: $ref: "#/components/schemas/AddressInfo" username: type: string description: Basic auth username example: admin password: type: string description: Basic auth password example: password Login: type: object description: Login request data properties: username: type: string description: User name password: type: string description: Password Error: description: A generic JSON error response. properties: message: type: string description: The error message, an opaque string. type: object