2880 lines
82 KiB
YAML
2880 lines
82 KiB
YAML
'openapi': '3.0.3'
|
|
'info':
|
|
'title': 'AdGuard Home'
|
|
'description': >
|
|
AdGuard Home REST-ish API. Our admin web interface is built on top of this
|
|
REST-ish API.
|
|
'version': '0.107'
|
|
'contact':
|
|
'name': 'AdGuard Home'
|
|
'url': 'https://github.com/AdguardTeam/AdGuardHome'
|
|
|
|
'servers':
|
|
- 'url': '/control'
|
|
|
|
'security':
|
|
- 'basicAuth': []
|
|
|
|
'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': 'mobileconfig'
|
|
'description': 'Apple .mobileconfig'
|
|
- '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/DoQ/DoT settings'
|
|
|
|
'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':
|
|
'allOf':
|
|
- '$ref': '#/components/schemas/DNSConfig'
|
|
- 'type': 'object'
|
|
'properties':
|
|
'default_local_ptr_upstreams':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'example':
|
|
- '192.168.168.192'
|
|
- '10.0.0.10'
|
|
'/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'
|
|
'/protection':
|
|
'post':
|
|
'tags':
|
|
- 'global'
|
|
'operationId': 'setProtection'
|
|
'summary': 'Set protection state and duration'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/SetProtectionRequest'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK'
|
|
'/cache_clear':
|
|
'post':
|
|
'tags':
|
|
- 'global'
|
|
'operationId': 'cacheClear'
|
|
'summary': 'Clear DNS cache'
|
|
'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':
|
|
'schema':
|
|
'$ref': '#/components/schemas/UpstreamsConfigResponse'
|
|
'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': >
|
|
upstream "192.168.1.104:1234" fails to exchange: couldn't
|
|
communicate with upstream: read udp
|
|
192.168.1.100:60675->8.8.8.8:1234: i/o timeout
|
|
'/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':
|
|
'deprecated': true
|
|
'description': |
|
|
Deprecated: Use `GET /querylog/config` instead.
|
|
|
|
NOTE: If `interval` was configured by editing configuration file or new
|
|
HTTP API call `PUT /querylog/config/update` and it's not equal to
|
|
previous allowed enum values then it will be equal to `90` days for
|
|
compatibility reasons.
|
|
'tags':
|
|
- 'log'
|
|
'operationId': 'queryLogInfo'
|
|
'summary': 'Get query log parameters'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/QueryLogConfig'
|
|
'/querylog_config':
|
|
'post':
|
|
'deprecated': true
|
|
'description': >
|
|
Deprecated: Use `PUT /querylog/config/update` instead.
|
|
'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.'
|
|
'/querylog/config':
|
|
'get':
|
|
'tags':
|
|
- 'log'
|
|
'operationId': 'getQueryLogConfig'
|
|
'summary': 'Get query log parameters'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/GetQueryLogConfigResponse'
|
|
'/querylog/config/update':
|
|
'put':
|
|
'tags':
|
|
- 'log'
|
|
'operationId': 'putQueryLogConfig'
|
|
'summary': 'Set query log parameters'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/PutQueryLogConfigUpdateRequest'
|
|
'required': true
|
|
'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':
|
|
'deprecated': true
|
|
'description': |
|
|
Deprecated: Use `GET /stats/config` instead.
|
|
|
|
NOTE: If `interval` was configured by editing configuration file or new
|
|
HTTP API call `PUT /stats/config/update` and it's not equal to
|
|
previous allowed enum values then it will be equal to `90` days for
|
|
compatibility reasons.
|
|
'tags':
|
|
- 'stats'
|
|
'operationId': 'statsInfo'
|
|
'summary': 'Get statistics parameters'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/StatsConfig'
|
|
'/stats_config':
|
|
'post':
|
|
'deprecated': true
|
|
'description': >
|
|
Deprecated: Use `PUT /stats/config/update` instead.
|
|
'tags':
|
|
- 'stats'
|
|
'operationId': 'statsConfig'
|
|
'summary': 'Set statistics parameters'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/StatsConfig'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'/stats/config':
|
|
'get':
|
|
'tags':
|
|
- 'stats'
|
|
'operationId': 'getStatsConfig'
|
|
'summary': 'Get statistics parameters'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/GetStatsConfigResponse'
|
|
'/stats/config/update':
|
|
'put':
|
|
'tags':
|
|
- 'stats'
|
|
'operationId': 'putStatsConfig'
|
|
'summary': 'Set statistics parameters'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/PutStatsConfigUpdateRequest'
|
|
'required': true
|
|
'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'
|
|
'500':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/Error'
|
|
'description': 'Not implemented (for example, on Windows).'
|
|
'/dhcp/interfaces':
|
|
'get':
|
|
'tags':
|
|
- 'dhcp'
|
|
'operationId': 'dhcpInterfaces'
|
|
'summary': 'Gets the available interfaces'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/NetInterfaces'
|
|
'500':
|
|
'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'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/DhcpFindActiveReq'
|
|
'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).'
|
|
'/dhcp/reset_leases':
|
|
'post':
|
|
'tags':
|
|
- 'dhcp'
|
|
'operationId': 'dhcpResetLeases'
|
|
'summary': 'Reset DHCP leases'
|
|
'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 don't 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 unnecessary 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':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/SetRulesRequest'
|
|
'description': 'Custom filtering rules.'
|
|
'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':
|
|
'schema':
|
|
'type': 'object'
|
|
'properties':
|
|
'enabled':
|
|
'type': 'boolean'
|
|
'examples':
|
|
'response':
|
|
'value':
|
|
'enabled': false
|
|
'/parental/enable':
|
|
'post':
|
|
'tags':
|
|
- 'parental'
|
|
'operationId': 'parentalEnable'
|
|
'summary': 'Enable parental filtering'
|
|
'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':
|
|
'schema':
|
|
'type': 'object'
|
|
'properties':
|
|
'enable':
|
|
'type': 'boolean'
|
|
'sensitivity':
|
|
'type': 'integer'
|
|
'examples':
|
|
'response':
|
|
'value':
|
|
'enabled': true
|
|
'sensitivity': 13
|
|
'/safesearch/enable':
|
|
'post':
|
|
'deprecated': true
|
|
'tags':
|
|
- 'safesearch'
|
|
'operationId': 'safesearchEnable'
|
|
'summary': 'Enable safesearch'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'/safesearch/disable':
|
|
'post':
|
|
'deprecated': true
|
|
'tags':
|
|
- 'safesearch'
|
|
'operationId': 'safesearchDisable'
|
|
'summary': 'Disable safesearch'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'/safesearch/settings':
|
|
'put':
|
|
'tags':
|
|
- 'safesearch'
|
|
'operationId': 'safesearchSettings'
|
|
'summary': 'Update safesearch settings'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/SafeSearchConfig'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'/safesearch/status':
|
|
'get':
|
|
'tags':
|
|
- 'safesearch'
|
|
'operationId': 'safesearchStatus'
|
|
'summary': 'Get safesearch status'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/SafeSearchConfig'
|
|
'/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 clients by their IP addresses or ClientIDs.
|
|
'parameters':
|
|
- 'name': 'ip0'
|
|
'in': 'query'
|
|
'description': >
|
|
Filter by IP address or ClientIDs. Parameters with names `ip1`,
|
|
`ip2`, and so on are also accepted and interpreted as "ip0 OR ip1 OR
|
|
ip2".
|
|
|
|
TODO(a.garipov): Replace with a better query API.
|
|
'schema':
|
|
'type': 'string'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/ClientsFindResponse'
|
|
'/access/list':
|
|
'get':
|
|
'operationId': 'accessList'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/AccessListResponse'
|
|
'summary': 'List (dis)allowed clients, blocked hosts, etc.'
|
|
'tags':
|
|
- 'clients'
|
|
'/access/set':
|
|
'post':
|
|
'operationId': 'accessSet'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/AccessSetRequest'
|
|
'required': true
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'400':
|
|
'description': >
|
|
Failed to parse JSON or cannot save the list.
|
|
'500':
|
|
'description': 'Internal error.'
|
|
'summary': 'Set (dis)allowed clients, blocked hosts, etc.'
|
|
'tags':
|
|
- 'clients'
|
|
'/blocked_services/services':
|
|
'get':
|
|
'deprecated': true
|
|
'description': >
|
|
Deprecated: Use `GET /blocked_services/all` instead.
|
|
'tags':
|
|
- 'blocked_services'
|
|
'operationId': 'blockedServicesAvailableServices'
|
|
'summary': 'Get available services to use for blocking'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/BlockedServicesArray'
|
|
'/blocked_services/all':
|
|
'get':
|
|
'tags':
|
|
- 'blocked_services'
|
|
'operationId': 'blockedServicesAll'
|
|
'summary': 'Get available services to use for blocking'
|
|
'responses':
|
|
'200':
|
|
'description': 'OK.'
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/BlockedServicesAll'
|
|
'/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':
|
|
'deprecated': true
|
|
'description': >
|
|
Deprecated: Use `PUT /control/profile` instead.
|
|
'tags':
|
|
- 'i18n'
|
|
'operationId': 'changeLanguage'
|
|
'summary': >
|
|
Change current language. Argument must be an ISO 639-1 two-letter code.
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/LanguageSettings'
|
|
'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':
|
|
'deprecated': true
|
|
'description': >
|
|
Deprecated: Use `GET /control/profile` instead.
|
|
'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':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/LanguageSettings'
|
|
'/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.
|
|
'422':
|
|
'description': >
|
|
The specified password does not meet the strength requirements.
|
|
'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.'
|
|
'400':
|
|
'description': >
|
|
Invalid username or password.
|
|
'429':
|
|
'description': >
|
|
Out of login attempts.
|
|
'/logout':
|
|
'get':
|
|
'tags':
|
|
- 'global'
|
|
'operationId': 'logout'
|
|
'summary': 'Perform administrator log-out'
|
|
'responses':
|
|
'302':
|
|
'description': 'OK.'
|
|
'/profile/update':
|
|
'put':
|
|
'tags':
|
|
- 'global'
|
|
'operationId': 'updateProfile'
|
|
'summary': 'Updates current user info'
|
|
'requestBody':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/ProfileInfo'
|
|
'responses':
|
|
'200':
|
|
'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':
|
|
'operationId': 'mobileConfigDoH'
|
|
'parameters':
|
|
- 'description': >
|
|
Host for which the config is generated. If no host is provided,
|
|
`tls.server_name` from the configuration file is used. If
|
|
`tls.server_name` is not set, the API returns an error with a 500
|
|
status.
|
|
'example': 'example.org'
|
|
'in': 'query'
|
|
'name': 'host'
|
|
'required': true
|
|
'schema':
|
|
'type': 'string'
|
|
- 'description': >
|
|
ClientID.
|
|
'example': 'client-1'
|
|
'in': 'query'
|
|
'name': 'client_id'
|
|
'schema':
|
|
'type': 'string'
|
|
'responses':
|
|
'200':
|
|
'description': 'DNS over HTTPS plist file.'
|
|
'500':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/Error'
|
|
'description': 'Server configuration error.'
|
|
'summary': 'Get DNS over HTTPS .mobileconfig.'
|
|
'tags':
|
|
- 'mobileconfig'
|
|
- 'global'
|
|
'/apple/dot.mobileconfig':
|
|
'get':
|
|
'operationId': 'mobileConfigDoT'
|
|
'parameters':
|
|
- 'description': >
|
|
Host for which the config is generated. If no host is provided,
|
|
`tls.server_name` from the configuration file is used. If
|
|
`tls.server_name` is not set, the API returns an error with a 500
|
|
status.
|
|
'example': 'example.org'
|
|
'in': 'query'
|
|
'name': 'host'
|
|
'required': true
|
|
'schema':
|
|
'type': 'string'
|
|
- 'description': >
|
|
ClientID.
|
|
'example': 'client-1'
|
|
'in': 'query'
|
|
'name': 'client_id'
|
|
'schema':
|
|
'type': 'string'
|
|
'responses':
|
|
'200':
|
|
'description': 'DNS over TLS plist file'
|
|
'500':
|
|
'content':
|
|
'application/json':
|
|
'schema':
|
|
'$ref': '#/components/schemas/Error'
|
|
'description': 'Server configuration error.'
|
|
'summary': 'Get DNS over TLS .mobileconfig.'
|
|
'tags':
|
|
- 'mobileconfig'
|
|
- 'global'
|
|
|
|
'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_addresses'
|
|
- 'dns_port'
|
|
- 'http_port'
|
|
- 'protection_enabled'
|
|
- 'protection_disabled_until'
|
|
- 'running'
|
|
- 'version'
|
|
- 'language'
|
|
'properties':
|
|
'dns_addresses':
|
|
'example': ['127.0.0.1']
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'dns_port':
|
|
'type': 'integer'
|
|
'format': 'uint16'
|
|
'example': 53
|
|
'minimum': 1
|
|
'maximum': 65535
|
|
'http_port':
|
|
'type': 'integer'
|
|
'format': 'uint16'
|
|
'example': 80
|
|
'minimum': 1
|
|
'maximum': 65535
|
|
'protection_enabled':
|
|
'type': 'boolean'
|
|
'protection_disabled_duration':
|
|
'type': 'integer'
|
|
'format': 'int64'
|
|
'dhcp_available':
|
|
'type': 'boolean'
|
|
'running':
|
|
'type': 'boolean'
|
|
'version':
|
|
'type': 'string'
|
|
'example': 'v0.123.4'
|
|
'language':
|
|
'type': 'string'
|
|
'example': 'en'
|
|
'DNSConfig':
|
|
'type': 'object'
|
|
'description': 'DNS server 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'
|
|
'ratelimit':
|
|
'type': 'integer'
|
|
'blocking_mode':
|
|
'type': 'string'
|
|
'enum':
|
|
- 'default'
|
|
- 'refused'
|
|
- 'nxdomain'
|
|
- 'null_ip'
|
|
- 'custom_ip'
|
|
'blocking_ipv4':
|
|
'type': 'string'
|
|
'blocking_ipv6':
|
|
'type': 'string'
|
|
'protection_disabled_until':
|
|
'type': 'string'
|
|
'description': 'Protection is pause until this time. Nullable.'
|
|
'example': '2018-11-26T00:02:41+03:00'
|
|
'edns_cs_enabled':
|
|
'type': 'boolean'
|
|
'edns_cs_use_custom':
|
|
'type': 'boolean'
|
|
'edns_cs_custom_ip':
|
|
'type': 'string'
|
|
'disable_ipv6':
|
|
'type': 'boolean'
|
|
'dnssec_enabled':
|
|
'type': 'boolean'
|
|
'cache_size':
|
|
'type': 'integer'
|
|
'cache_ttl_min':
|
|
'type': 'integer'
|
|
'cache_ttl_max':
|
|
'type': 'integer'
|
|
'cache_optimistic':
|
|
'type': 'boolean'
|
|
'upstream_mode':
|
|
'enum':
|
|
- ''
|
|
- 'parallel'
|
|
- 'fastest_addr'
|
|
'use_private_ptr_resolvers':
|
|
'type': 'boolean'
|
|
'resolve_clients':
|
|
'type': 'boolean'
|
|
'local_ptr_upstreams':
|
|
'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'
|
|
'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'
|
|
'private_upstream':
|
|
'type': 'array'
|
|
'description': >
|
|
Local PTR resolvers, 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'
|
|
'UpstreamsConfigResponse':
|
|
'type': 'object'
|
|
'description': 'Upstreams configuration response'
|
|
'additionalProperties':
|
|
'type': 'string'
|
|
'Filter':
|
|
'type': 'object'
|
|
'description': 'Filter subscription info'
|
|
'required':
|
|
- 'enabled'
|
|
- 'id'
|
|
- 'name'
|
|
- 'rules_count'
|
|
- 'url'
|
|
'properties':
|
|
'enabled':
|
|
'type': 'boolean'
|
|
'id':
|
|
'example': 1234
|
|
'format': 'int64'
|
|
'type': 'integer'
|
|
'last_updated':
|
|
'example': '2018-10-30T12:18:57+03:00'
|
|
'format': 'date-time'
|
|
'type': 'string'
|
|
'name':
|
|
'example': 'AdGuard Simplified Domain Names filter'
|
|
'type': 'string'
|
|
'rules_count':
|
|
'example': 5912
|
|
'format': 'uint32'
|
|
'type': 'integer'
|
|
'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'
|
|
'whitelist_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':
|
|
'$ref': '#/components/schemas/FilterSetUrlData'
|
|
'url':
|
|
'type': 'string'
|
|
'whitelist':
|
|
'type': 'boolean'
|
|
'FilterSetUrlData':
|
|
'type': 'object'
|
|
'description': 'Filter update data'
|
|
'required':
|
|
- 'enabled'
|
|
- 'name'
|
|
- 'url'
|
|
'properties':
|
|
'enabled':
|
|
'type': 'boolean'
|
|
'name':
|
|
'example': 'AdGuard Simplified Domain Names filter'
|
|
'type': 'string'
|
|
'url':
|
|
'type': 'string'
|
|
'example': >
|
|
https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
|
|
'FilterRefreshRequest':
|
|
'type': 'object'
|
|
'description': 'Refresh Filters request data'
|
|
'properties':
|
|
'whitelist':
|
|
'type': 'boolean'
|
|
'FilterCheckHostResponse':
|
|
'type': 'object'
|
|
'description': 'Check Host Result'
|
|
'properties':
|
|
'reason':
|
|
'type': 'string'
|
|
'description': 'Request filtering status.'
|
|
'enum':
|
|
- 'NotFilteredNotFound'
|
|
- 'NotFilteredWhiteList'
|
|
- 'NotFilteredError'
|
|
- 'FilteredBlackList'
|
|
- 'FilteredSafeBrowsing'
|
|
- 'FilteredParental'
|
|
- 'FilteredInvalid'
|
|
- 'FilteredSafeSearch'
|
|
- 'FilteredBlockedService'
|
|
- 'Rewrite'
|
|
- 'RewriteEtcHosts'
|
|
- 'RewriteRule'
|
|
'filter_id':
|
|
'deprecated': true
|
|
'description': >
|
|
In case if there's a rule applied to this DNS request, this is ID of
|
|
the filter list that the rule belongs to.
|
|
|
|
Deprecated: use `rules[*].filter_list_id` instead.
|
|
'type': 'integer'
|
|
'rule':
|
|
'deprecated': true
|
|
'type': 'string'
|
|
'example': '||example.org^'
|
|
'description': >
|
|
Filtering rule applied to the request (if any).
|
|
|
|
Deprecated: use `rules[*].text` instead.
|
|
'rules':
|
|
'description': 'Applied rules.'
|
|
'type': 'array'
|
|
'items':
|
|
'$ref': '#/components/schemas/ResultRule'
|
|
'service_name':
|
|
'type': 'string'
|
|
'description': 'Set if reason=FilteredBlockedService'
|
|
'cname':
|
|
'type': 'string'
|
|
'description': 'Set if reason=Rewrite'
|
|
'ip_addrs':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'description': 'Set if reason=Rewrite'
|
|
'FilterRefreshResponse':
|
|
'type': 'object'
|
|
'description': '/filtering/refresh response data'
|
|
'properties':
|
|
'updated':
|
|
'type': 'integer'
|
|
'SetRulesRequest':
|
|
'description': 'Custom filtering rules setting request.'
|
|
'example':
|
|
'rules':
|
|
- '||example.com^'
|
|
- '# comment'
|
|
- '@@||www.example.com^'
|
|
'properties':
|
|
'rules':
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'type': 'object'
|
|
'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.
|
|
'required':
|
|
- 'disabled'
|
|
'properties':
|
|
'disabled':
|
|
'type': 'boolean'
|
|
'description': >
|
|
If true then other fields doesn't appear.
|
|
'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'
|
|
'enum':
|
|
- 'hours'
|
|
- 'days'
|
|
'description': 'Time units'
|
|
'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'
|
|
'additionalProperties':
|
|
'type': 'integer'
|
|
'StatsConfig':
|
|
'type': 'object'
|
|
'description': 'Statistics configuration'
|
|
'properties':
|
|
'interval':
|
|
'description': >
|
|
Time period to keep the data. `0` means that the statistics is
|
|
disabled.
|
|
'enum':
|
|
- 0
|
|
- 1
|
|
- 7
|
|
- 30
|
|
- 90
|
|
'type': 'integer'
|
|
'GetStatsConfigResponse':
|
|
'type': 'object'
|
|
'description': 'Statistics configuration'
|
|
'required':
|
|
- 'enabled'
|
|
- 'interval'
|
|
- 'ignored'
|
|
'properties':
|
|
'enabled':
|
|
'description': 'Are statistics enabled'
|
|
'type': 'boolean'
|
|
'interval':
|
|
'description': 'Statistics rotation interval in milliseconds'
|
|
'type': 'number'
|
|
'ignored':
|
|
'description': 'List of host names, which should not be counted'
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'PutStatsConfigUpdateRequest':
|
|
'$ref': '#/components/schemas/GetStatsConfigResponse'
|
|
'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'
|
|
'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'
|
|
'NetInterfaces':
|
|
'type': 'object'
|
|
'description': >
|
|
Network interfaces dictionary, keys are interface names.
|
|
'additionalProperties':
|
|
'$ref': '#/components/schemas/NetInterface'
|
|
|
|
'DhcpFindActiveReq':
|
|
'description': >
|
|
Request for checking for other DHCP servers in the network.
|
|
'properties':
|
|
'interface':
|
|
'description': 'The name of the network interface'
|
|
'example': 'eth0'
|
|
'type': 'string'
|
|
'type': 'object'
|
|
|
|
'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'
|
|
'enum':
|
|
- 'yes'
|
|
- 'no'
|
|
- 'error'
|
|
'description': >
|
|
The result of searching the other DHCP server.
|
|
'example': 'no'
|
|
'error':
|
|
'type': 'string'
|
|
'description': 'Set if found=error'
|
|
'example': ''
|
|
|
|
'DhcpSearchResultStaticIP':
|
|
'type': 'object'
|
|
'properties':
|
|
'static':
|
|
'type': 'string'
|
|
'enum':
|
|
- 'yes'
|
|
- 'no'
|
|
- 'error'
|
|
'description': >
|
|
The result of determining static IP address.
|
|
'example': 'yes'
|
|
'ip':
|
|
'type': 'string'
|
|
'description': 'Set if static=no'
|
|
'example': ''
|
|
|
|
'DnsAnswer':
|
|
'type': 'object'
|
|
'description': 'DNS answer section'
|
|
'properties':
|
|
'ttl':
|
|
'example': 55
|
|
'format': 'uint32'
|
|
'type': 'integer'
|
|
'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'
|
|
'name':
|
|
'type': 'string'
|
|
'example': 'xn--d1abbgf6aiiy.xn--p1ai'
|
|
'unicode_name':
|
|
'type': 'string'
|
|
'example': 'президент.рф'
|
|
'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'
|
|
'whitelist':
|
|
'type': 'boolean'
|
|
'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'
|
|
'cached':
|
|
'type': 'boolean'
|
|
'description': >
|
|
Defines if the response has been served from cache.
|
|
'upstream':
|
|
'type': 'string'
|
|
'description': >
|
|
Upstream URL starting with tcp://, tls://, https://, or with an IP
|
|
address.
|
|
'answer_dnssec':
|
|
'description': >
|
|
If true, the response had the Authenticated Data (AD) flag set.
|
|
'type': 'boolean'
|
|
'client':
|
|
'description': >
|
|
The client's IP address.
|
|
'example': '192.168.0.1'
|
|
'type': 'string'
|
|
'client_id':
|
|
'description': >
|
|
The ClientID, if provided in DoH, DoQ, or DoT.
|
|
'example': 'cli123'
|
|
'type': 'string'
|
|
'client_info':
|
|
'$ref': '#/components/schemas/QueryLogItemClient'
|
|
'client_proto':
|
|
'enum':
|
|
- 'dot'
|
|
- 'doh'
|
|
- 'doq'
|
|
- 'dnscrypt'
|
|
- ''
|
|
'ecs':
|
|
'type': 'string'
|
|
'example': '192.168.0.0/16'
|
|
'description': >
|
|
The IP network defined by an EDNS Client-Subnet option in the
|
|
request message if any.
|
|
'elapsedMs':
|
|
'type': 'string'
|
|
'example': '54.023928'
|
|
'question':
|
|
'$ref': '#/components/schemas/DnsQuestion'
|
|
'filterId':
|
|
'deprecated': true
|
|
'type': 'integer'
|
|
'example': 123123
|
|
'description': >
|
|
In case if there's a rule applied to this DNS request, this is ID of
|
|
the filter list that the rule belongs to.
|
|
|
|
Deprecated: use `rules[*].filter_list_id` instead.
|
|
'rule':
|
|
'deprecated': true
|
|
'type': 'string'
|
|
'example': '||example.org^'
|
|
'description': >
|
|
Filtering rule applied to the request (if any).
|
|
|
|
Deprecated: use `rules[*].text` instead.
|
|
'rules':
|
|
'description': 'Applied rules.'
|
|
'type': 'array'
|
|
'items':
|
|
'$ref': '#/components/schemas/ResultRule'
|
|
'reason':
|
|
'type': 'string'
|
|
'description': 'Request filtering status.'
|
|
'enum':
|
|
- 'NotFilteredNotFound'
|
|
- 'NotFilteredWhiteList'
|
|
- 'NotFilteredError'
|
|
- 'FilteredBlackList'
|
|
- 'FilteredSafeBrowsing'
|
|
- 'FilteredParental'
|
|
- 'FilteredInvalid'
|
|
- 'FilteredSafeSearch'
|
|
- 'FilteredBlockedService'
|
|
- 'Rewrite'
|
|
- 'RewriteEtcHosts'
|
|
- 'RewriteRule'
|
|
'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'
|
|
'QueryLogItemClient':
|
|
'description': >
|
|
Client information for a query log item.
|
|
'properties':
|
|
'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 allowed or blocked.
|
|
'name':
|
|
'description': >
|
|
Persistent client's name or runtime client's hostname. May be
|
|
empty.
|
|
'type': 'string'
|
|
'whois':
|
|
'$ref': '#/components/schemas/QueryLogItemClientWhois'
|
|
'required':
|
|
- 'disallowed'
|
|
- 'disallowed_rule'
|
|
- 'name'
|
|
- 'whois'
|
|
'type': 'object'
|
|
'QueryLogItemClientWhois':
|
|
'description': >
|
|
Client WHOIS information, if any.
|
|
'properties':
|
|
'city':
|
|
'description': >
|
|
City, if any.
|
|
'type': 'string'
|
|
'country':
|
|
'description': >
|
|
Country, if any.
|
|
'type': 'string'
|
|
'orgname':
|
|
'description': >
|
|
Organization name, if any.
|
|
'type': 'string'
|
|
'type': 'object'
|
|
'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':
|
|
'description': >
|
|
Time period for query log rotation.
|
|
'type': 'number'
|
|
'enum':
|
|
- 0.25
|
|
- 1
|
|
- 7
|
|
- 30
|
|
- 90
|
|
'anonymize_client_ip':
|
|
'type': 'boolean'
|
|
'description': "Anonymize clients' IP addresses"
|
|
'GetQueryLogConfigResponse':
|
|
'type': 'object'
|
|
'description': 'Query log configuration'
|
|
'required':
|
|
- 'enabled'
|
|
- 'interval'
|
|
- 'anonymize_client_ip'
|
|
- 'ignored'
|
|
'properties':
|
|
'enabled':
|
|
'type': 'boolean'
|
|
'description': 'Is query log enabled'
|
|
'interval':
|
|
'description': >
|
|
Time period for query log rotation in milliseconds.
|
|
'type': 'number'
|
|
'anonymize_client_ip':
|
|
'type': 'boolean'
|
|
'description': "Anonymize clients' IP addresses"
|
|
'ignored':
|
|
'description': 'List of host names, which should not be written to log'
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'PutQueryLogConfigUpdateRequest':
|
|
'$ref': '#/components/schemas/GetQueryLogConfigResponse'
|
|
'ResultRule':
|
|
'description': 'Applied rule.'
|
|
'properties':
|
|
'filter_list_id':
|
|
'description': >
|
|
In case if there's a rule applied to this DNS request, this is ID of
|
|
the filter list that the rule belongs to.
|
|
'example': 123123
|
|
'format': 'int64'
|
|
'type': 'integer'
|
|
'text':
|
|
'description': >
|
|
The text of the filtering rule applied to the request (if any).
|
|
'example': '||example.org^'
|
|
'type': 'string'
|
|
'type': 'object'
|
|
'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': 'uint16'
|
|
'example': 443
|
|
'description': 'HTTPS port. If 0, HTTPS will be disabled.'
|
|
'port_dns_over_tls':
|
|
'type': 'integer'
|
|
'format': 'uint16'
|
|
'example': 853
|
|
'description': 'DNS-over-TLS port. If 0, DoT will be disabled.'
|
|
'port_dns_over_quic':
|
|
'type': 'integer'
|
|
'format': 'uint16'
|
|
'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'
|
|
'private_key_saved':
|
|
'type': 'boolean'
|
|
'example': true
|
|
'description': >
|
|
Set to true if the user has previously saved a private key as
|
|
a string. This is used so that the server and the client don't
|
|
have to send the private key between each other every time,
|
|
which might lead to security issues.
|
|
'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': >
|
|
Set to true if the specified certificates chain is a valid chain of
|
|
X509 certificates.
|
|
'valid_chain':
|
|
'type': 'boolean'
|
|
'example': true
|
|
'description': >
|
|
Set to true if the specified certificates chain is verified and
|
|
issued by a known CA.
|
|
'subject':
|
|
'type': 'string'
|
|
'example': 'CN=example.org'
|
|
'description': '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': 'The issuer of the first certificate in the chain.'
|
|
'not_before':
|
|
'type': 'string'
|
|
'example': '2019-01-31T10:47:32Z'
|
|
'description': >
|
|
The NotBefore field of the first certificate in the chain.
|
|
'not_after':
|
|
'type': 'string'
|
|
'example': '2019-05-01T10:47:32Z'
|
|
'description': >
|
|
The NotAfter field of the first certificate in the chain.
|
|
'dns_names':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'description': >
|
|
The value of SubjectAltNames field of the first certificate in the
|
|
chain.
|
|
'example':
|
|
- '*.example.org'
|
|
'valid_key':
|
|
'type': 'boolean'
|
|
'example': true
|
|
'description': 'Set to true if the key is a valid private key.'
|
|
'key_type':
|
|
'type': 'string'
|
|
'example': 'RSA'
|
|
'enum':
|
|
- 'RSA'
|
|
- 'ECDSA'
|
|
'description': 'Key type.'
|
|
'warning_validation':
|
|
'type': 'string'
|
|
'example': 'You have specified an empty certificate'
|
|
'description': >
|
|
A validation warning message with the issue description.
|
|
'valid_pair':
|
|
'type': 'boolean'
|
|
'example': true
|
|
'description': >
|
|
Set to true if both certificate and private key are correct.
|
|
'NetInterface':
|
|
'type': 'object'
|
|
'description': 'Network interface info'
|
|
'required':
|
|
- 'flags'
|
|
- 'hardware_address'
|
|
- 'name'
|
|
- 'mtu'
|
|
'properties':
|
|
'flags':
|
|
'type': 'string'
|
|
'description': >
|
|
Flags could be any combination of the following values, divided by
|
|
the "|" character: "up", "broadcast", "loopback", "pointtopoint" and
|
|
"multicast".
|
|
'example': 'up|broadcast|multicast'
|
|
'hardware_address':
|
|
'type': 'string'
|
|
'example': '52:54:00:11:09:ba'
|
|
'name':
|
|
'type': 'string'
|
|
'example': 'eth0'
|
|
'ip_addresses':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'mtu':
|
|
'type': 'integer'
|
|
'AddressInfo':
|
|
'type': 'object'
|
|
'description': 'Port information'
|
|
'required':
|
|
- 'ip'
|
|
- 'port'
|
|
'properties':
|
|
'ip':
|
|
'type': 'string'
|
|
'example': '127.0.0.1'
|
|
'port':
|
|
'type': 'integer'
|
|
'format': 'uint16'
|
|
'example': 53
|
|
'AddressesInfo':
|
|
'type': 'object'
|
|
'description': 'AdGuard Home addresses configuration'
|
|
'required':
|
|
- 'dns_port'
|
|
- 'interfaces'
|
|
- 'version'
|
|
- 'web_port'
|
|
'properties':
|
|
'dns_port':
|
|
'type': 'integer'
|
|
'format': 'uint16'
|
|
'example': 53
|
|
'interfaces':
|
|
'$ref': '#/components/schemas/NetInterfaces'
|
|
'version':
|
|
'type': 'string'
|
|
'example': 'v0.123.4'
|
|
'web_port':
|
|
'type': 'integer'
|
|
'format': 'uint16'
|
|
'example': 80
|
|
'SetProtectionRequest':
|
|
'type': 'object'
|
|
'description': 'Protection state configuration'
|
|
'properties':
|
|
'enabled':
|
|
'type': 'boolean'
|
|
'duration':
|
|
'type': 'integer'
|
|
'format': 'uint64'
|
|
'description': 'Duration of a pause, in milliseconds. Enabled should be false.'
|
|
'required':
|
|
- 'enabled'
|
|
'ProfileInfo':
|
|
'type': 'object'
|
|
'description': 'Information about the current user'
|
|
'properties':
|
|
'name':
|
|
'type': 'string'
|
|
'language':
|
|
'type': 'string'
|
|
'theme':
|
|
'type': 'string'
|
|
'description': 'Interface theme'
|
|
'enum':
|
|
- 'auto'
|
|
- 'dark'
|
|
- 'light'
|
|
'required':
|
|
- 'name'
|
|
- 'language'
|
|
- 'theme'
|
|
'SafeSearchConfig':
|
|
'type': 'object'
|
|
'description': 'Safe search settings.'
|
|
'properties':
|
|
'enabled':
|
|
'type': 'boolean'
|
|
'bing':
|
|
'type': 'boolean'
|
|
'duckduckgo':
|
|
'type': 'boolean'
|
|
'google':
|
|
'type': 'boolean'
|
|
'pixabay':
|
|
'type': 'boolean'
|
|
'yandex':
|
|
'type': 'boolean'
|
|
'youtube':
|
|
'type': 'boolean'
|
|
'Client':
|
|
'type': 'object'
|
|
'description': 'Client information.'
|
|
'properties':
|
|
'name':
|
|
'type': 'string'
|
|
'description': 'Name'
|
|
'example': 'localhost'
|
|
'ids':
|
|
'type': 'array'
|
|
'description': 'IP, CIDR, MAC, or ClientID.'
|
|
'items':
|
|
'type': 'string'
|
|
'use_global_settings':
|
|
'type': 'boolean'
|
|
'filtering_enabled':
|
|
'type': 'boolean'
|
|
'parental_enabled':
|
|
'type': 'boolean'
|
|
'safebrowsing_enabled':
|
|
'type': 'boolean'
|
|
'safesearch_enabled':
|
|
'deprecated': true
|
|
'type': 'boolean'
|
|
'safe_search':
|
|
'$ref': '#/components/schemas/SafeSearchConfig'
|
|
'use_global_blocked_services':
|
|
'type': 'boolean'
|
|
'blocked_services':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'upstreams':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'tags':
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'ignore_querylog':
|
|
'description': |
|
|
NOTE: If `ignore_querylog` is not set in HTTP API `GET /clients/add`
|
|
request then default value (false) will be used.
|
|
|
|
If `ignore_querylog` is not set in HTTP API `GET /clients/update`
|
|
request then the existing value will not be changed.
|
|
|
|
This behaviour can be changed in the future versions.
|
|
'type': 'boolean'
|
|
'ignore_statistics':
|
|
'description': |
|
|
NOTE: If `ignore_statistics` is not set in HTTP API `GET
|
|
/clients/add` request then default value (false) will be used.
|
|
|
|
If `ignore_statistics` is not set in HTTP API `GET /clients/update`
|
|
request then the existing value will not be changed.
|
|
|
|
This behaviour can be changed in the future versions.
|
|
'type': 'boolean'
|
|
'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'
|
|
'whois_info':
|
|
'$ref': '#/components/schemas/WhoisInfo'
|
|
'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': 'Client search results.'
|
|
'items':
|
|
'$ref': '#/components/schemas/ClientsFindEntry'
|
|
'example':
|
|
- 'cli42':
|
|
'name': 'Client 42'
|
|
'ids': ['cli42']
|
|
'use_global_settings': true
|
|
'filtering_enabled': true
|
|
'parental_enabled': true
|
|
'safebrowsing_enabled': true
|
|
'safesearch_enabled': true
|
|
'safe_search': {}
|
|
'use_global_blocked_services': true
|
|
'blocked_services': null
|
|
'upstreams': null
|
|
'whois_info': {}
|
|
'disallowed': false
|
|
'disallowed_rule': ''
|
|
'ignore_querylog': false
|
|
'ignore_statistics': false
|
|
- '1.2.3.4':
|
|
'name': 'Client 1-2-3-4'
|
|
'ids': ['1.2.3.4']
|
|
'use_global_settings': true
|
|
'filtering_enabled': true
|
|
'parental_enabled': true
|
|
'safebrowsing_enabled': true
|
|
'safesearch_enabled': true
|
|
'safe_search': {}
|
|
'use_global_blocked_services': true
|
|
'blocked_services': null
|
|
'upstreams': null
|
|
'whois_info': {}
|
|
'disallowed': false
|
|
'disallowed_rule': ''
|
|
'ignore_querylog': false
|
|
'ignore_statistics': false
|
|
'AccessListResponse':
|
|
'$ref': '#/components/schemas/AccessList'
|
|
'AccessSetRequest':
|
|
'$ref': '#/components/schemas/AccessList'
|
|
'AccessList':
|
|
'description': >
|
|
Client and host access list. Each of the lists should contain only
|
|
unique elements. In addition, allowed and disallowed lists cannot
|
|
contain the same elements.
|
|
'properties':
|
|
'allowed_clients':
|
|
'description': >
|
|
The allowlist of clients: IP addresses, CIDRs, or ClientIDs.
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'disallowed_clients':
|
|
'description': >
|
|
The blocklist of clients: IP addresses, CIDRs, or ClientIDs.
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'blocked_hosts':
|
|
'description': 'The blocklist of hosts.'
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'type': 'object'
|
|
'ClientsFindEntry':
|
|
'type': 'object'
|
|
'additionalProperties':
|
|
'$ref': '#/components/schemas/ClientFindSubEntry'
|
|
'ClientFindSubEntry':
|
|
'type': 'object'
|
|
'description': 'Client information.'
|
|
'properties':
|
|
'name':
|
|
'type': 'string'
|
|
'description': 'Name'
|
|
'example': 'localhost'
|
|
'ids':
|
|
'type': 'array'
|
|
'description': 'IP, CIDR, MAC, or ClientID.'
|
|
'items':
|
|
'type': 'string'
|
|
'use_global_settings':
|
|
'type': 'boolean'
|
|
'filtering_enabled':
|
|
'type': 'boolean'
|
|
'parental_enabled':
|
|
'type': 'boolean'
|
|
'safebrowsing_enabled':
|
|
'type': 'boolean'
|
|
'safesearch_enabled':
|
|
'deprecated': true
|
|
'type': 'boolean'
|
|
'safe_search':
|
|
'$ref': '#/components/schemas/SafeSearchConfig'
|
|
'use_global_blocked_services':
|
|
'type': 'boolean'
|
|
'blocked_services':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'upstreams':
|
|
'type': 'array'
|
|
'items':
|
|
'type': 'string'
|
|
'whois_info':
|
|
'$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
|
|
set to true, and this string is empty, then the client IP is
|
|
disallowed by the "allowed IP list", that is it is not included in
|
|
the allowed list.
|
|
'ignore_querylog':
|
|
'type': 'boolean'
|
|
'ignore_statistics':
|
|
'type': 'boolean'
|
|
'WhoisInfo':
|
|
'type': 'object'
|
|
'additionalProperties':
|
|
'type': 'string'
|
|
|
|
'Clients':
|
|
'type': 'object'
|
|
'properties':
|
|
'clients':
|
|
'$ref': '#/components/schemas/ClientsArray'
|
|
'auto_clients':
|
|
'$ref': '#/components/schemas/ClientsAutoArray'
|
|
'supported_tags':
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'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'
|
|
'BlockedServicesAll':
|
|
'properties':
|
|
'blocked_services':
|
|
'items':
|
|
'$ref': '#/components/schemas/BlockedService'
|
|
'type': 'array'
|
|
'required':
|
|
- 'blocked_services'
|
|
'type': 'object'
|
|
'BlockedService':
|
|
'properties':
|
|
'icon_svg':
|
|
'description': >
|
|
The SVG icon as a Base64-encoded string to make it easier to embed
|
|
it into a data URL.
|
|
'type': 'string'
|
|
'id':
|
|
'description': >
|
|
The ID of this service.
|
|
'type': 'string'
|
|
'name':
|
|
'description': >
|
|
The human-readable name of this service.
|
|
'type': 'string'
|
|
'rules':
|
|
'description': >
|
|
The array of the filtering rules.
|
|
'items':
|
|
'type': 'string'
|
|
'type': 'array'
|
|
'required':
|
|
- 'icon_svg'
|
|
- 'id'
|
|
- 'name'
|
|
- 'rules'
|
|
'type': 'object'
|
|
'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': 'uint16'
|
|
'example': 53
|
|
'autofix':
|
|
'type': 'boolean'
|
|
'example': false
|
|
'CheckConfigResponse':
|
|
'type': 'object'
|
|
'required':
|
|
- 'dns'
|
|
- 'web'
|
|
- 'static_ip'
|
|
'properties':
|
|
'dns':
|
|
'$ref': '#/components/schemas/CheckConfigResponseInfo'
|
|
'web':
|
|
'$ref': '#/components/schemas/CheckConfigResponseInfo'
|
|
'static_ip':
|
|
'$ref': '#/components/schemas/CheckConfigStaticIpInfo'
|
|
'CheckConfigResponseInfo':
|
|
'type': 'object'
|
|
'required':
|
|
- 'status'
|
|
- 'can_autofix'
|
|
'properties':
|
|
'status':
|
|
'type': 'string'
|
|
'default': ''
|
|
'can_autofix':
|
|
'type': 'boolean'
|
|
'example': false
|
|
'CheckConfigStaticIpInfoStatic':
|
|
'type': 'string'
|
|
'example': 'no'
|
|
'enum':
|
|
- 'yes'
|
|
- 'no'
|
|
- 'error'
|
|
'description': 'Can be: yes, no, error'
|
|
'CheckConfigStaticIpInfo':
|
|
'type': 'object'
|
|
'properties':
|
|
'static':
|
|
'$ref': '#/components/schemas/CheckConfigStaticIpInfoStatic'
|
|
'ip':
|
|
'type': 'string'
|
|
'default': ''
|
|
'example': '192.168.1.1'
|
|
'description': 'Current dynamic IP address. Set if static=no'
|
|
'error':
|
|
'type': 'string'
|
|
'default': ''
|
|
'description': 'Error text. Set if static=error'
|
|
'InitialConfiguration':
|
|
'type': 'object'
|
|
'description': >
|
|
AdGuard Home initial configuration for the first-install wizard.
|
|
'required':
|
|
- 'dns'
|
|
- 'web'
|
|
- 'username'
|
|
- 'password'
|
|
'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':
|
|
'name':
|
|
'type': 'string'
|
|
'description': 'User name'
|
|
'password':
|
|
'type': 'string'
|
|
'description': 'Password'
|
|
'Error':
|
|
'description': 'A generic JSON error response.'
|
|
'properties':
|
|
'message':
|
|
'description': 'The error message, an opaque string.'
|
|
'type': 'string'
|
|
'type': 'object'
|
|
'LanguageSettings':
|
|
'description': 'Language settings object.'
|
|
'properties':
|
|
'language':
|
|
'description': 'The current language or the language to set.'
|
|
'type': 'string'
|
|
'required':
|
|
- 'language'
|
|
'type': 'object'
|
|
'securitySchemes':
|
|
'basicAuth':
|
|
'type': 'http'
|
|
'scheme': 'basic'
|