AdGuardHome/openapi/openapi.yaml
Artem Baskal 398da7e2d3 + client, home: 2110 Generate .mobileconfig
Close #2110

Squashed commit of the following:

commit 3a652a23b21b4eb16dd7b09f149099c93bf7a977
Merge: 5d0d6c5e 65acfb75
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 21:01:54 2020 +0300

    Merge branch 'master' into feature/2110

commit 5d0d6c5e8704c80ae526d92966dfee0c469019bb
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 00:28:25 2020 +0300

    * (home): minor refactoring

commit e1d10252f5b00c94edb9faa85eaefa3d33ac9cbf
Merge: f859ef14 fb7ca942
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 00:18:46 2020 +0300

    Merge branch 'master' into feature/2110

commit f859ef144c54123d8ff262177148959f7b41a5a4
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Oct 6 19:30:18 2020 +0300

    Update ServerURL, generate all uniqie uuid

commit 3ce7c573229f87579ff150f6519077ced9c5ba23
Merge: e80cf6de a7d2dd7b
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 18:46:03 2020 +0300

    Merge branch 'master' into feature/2110

commit e80cf6ded1c20a4384cb94200134d67b29c0c948
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 18:33:12 2020 +0300

    Describe .mobileconfig in openapi, allow unauthorized access for .mobileconfig

commit 9887d1839f8f7e4888fc23bb64cfc43a42b6f58b
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 16:14:45 2020 +0300

    Change .mobileconfig generation

commit 5298dd706c107f5b02f4278a8773f6af387c36b1
Merge: cd4d1a74 128229ad
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 12:01:16 2020 +0300

    Merge branch 'master' into feature/2110

commit cd4d1a748e2471890b31533e4c24272a3d01cbee
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 1 23:10:14 2020 +0300

    Change dot and doh highlight in setup_dns_privacy_4 locale

commit 50e310ef3b988f2aad5accea92c6b34ecef28585
Merge: 92e0e28b 2f6f65a8
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 1 23:05:45 2020 +0300

    Merge branch 'master' into feature/2110

commit 92e0e28b757953efbbc211ae43b710b070308573
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 28 16:44:25 2020 +0300

    Add ServerAddresses property

commit c8c4cf88abcb0a76c6024d41d3eafab691ff1e38
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 28 13:51:53 2020 +0300

    Fix .mobileconfig display on SetupGuide

commit 9e4fad3c0ed0bfb980ad1cb030272781c13ebaad
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 25 19:08:50 2020 +0300

    2110 + client, home: Generate .mobileconfig
2020-10-08 11:34:36 +03:00

1967 lines
67 KiB
YAML

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"
/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
/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"
/dhcp/add_static_lease:
post:
tags:
- dhcp
operationId: dhcpAddStaticLease
summary: Adds a static lease
requestBody:
$ref: "#/components/requestBodies/DhcpStaticLease"
responses:
"200":
description: OK
/dhcp/remove_static_lease:
post:
tags:
- dhcp
operationId: dhcpRemoveStaticLease
summary: Removes a static lease
requestBody:
$ref: "#/components/requestBodies/DhcpStaticLease"
responses:
"200":
description: OK
/dhcp/reset:
post:
tags:
- dhcp
operationId: dhcpReset
summary: Reset DHCP configuration
responses:
"200":
description: OK
/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:
url:
type: string
enabled:
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
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
- ""
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