{
  "$id": "https://martinheidegger.github.io/dns-query/resolvers.schema.json",
  "$schema": "https://json-schema.org/draft-07/schema",
  "description": "DNS Endpoint consumable JSON format",
  "properties": {
    "resolvers": {
      "items": {
        "additionalProperties": false,
        "properties": {
          "cors": {
            "description": "true, if endpoint supports http/https CORS headers, defaults to false",
            "type": "boolean"
          },
          "country": {
            "type": "string"
          },
          "description": {
            "description": "Description as provided by hoster.",
            "type": "string"
          },
          "docs": {
            "description": "link to documentation",
            "format": "uri",
            "type": "string"
          },
          "endpoint": {
            "oneOf": [
              {
                "additionalProperties": false,
                "description": "http/https endpoints",
                "properties": {
                  "cors": {
                    "description": "(DEPRECATED: Use resolver.cors instead!) true, if endpoint supports http/https CORS headers, defaults to false",
                    "type": "boolean"
                  },
                  "host": {
                    "description": "DNS host for the endpoint",
                    "type": "string"
                  },
                  "ipv4": {
                    "description": "well-known ipv4 address for the host",
                    "format": "ipv4",
                    "type": "string"
                  },
                  "ipv6": {
                    "description": "well-known ipv6 address for the host",
                    "format": "ipv6",
                    "type": "string"
                  },
                  "method": {
                    "description": "Method to request in case of http/https, defaults to GET",
                    "enum": [
                      "POST",
                      "GET"
                    ]
                  },
                  "path": {
                    "description": "Path, prefixed with /, defaults to /dns-query",
                    "type": "string"
                  },
                  "port": {
                    "description": "port to connect to, defaults to 443 for https, 80 for http",
                    "type": "integer"
                  },
                  "protocol": {
                    "description": "https is the default for DoH endpoints, http for debug only!",
                    "enum": [
                      "http:",
                      "https:"
                    ]
                  }
                },
                "required": [
                  "protocol",
                  "host"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "description": "udp4 endpoints",
                "properties": {
                  "ipv4": {
                    "format": "ipv4",
                    "type": "string"
                  },
                  "pk": {
                    "description": "public key for dnscrypt verification",
                    "type": "string"
                  },
                  "port": {
                    "description": "port to connect to, defaults to 53",
                    "type": "integer"
                  },
                  "protocol": {
                    "enum": [
                      "udp4:"
                    ]
                  }
                },
                "required": [
                  "protocol",
                  "ipv4"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "description": "udp6 endpoints",
                "properties": {
                  "ipv6": {
                    "format": "ipv6",
                    "type": "string"
                  },
                  "pk": {
                    "description": "public key for dnscrypt verification",
                    "type": "string"
                  },
                  "port": {
                    "description": "port to connect to, defaults to 53",
                    "type": "integer"
                  },
                  "protocol": {
                    "enum": [
                      "udp6:"
                    ]
                  }
                },
                "required": [
                  "protocol",
                  "ipv6"
                ],
                "type": "object"
              }
            ]
          },
          "filter": {
            "description": "true, if endpoint is known to filters/redirects DNS packets, defaults to false",
            "type": "boolean"
          },
          "location": {
            "additionalProperties": false,
            "properties": {
              "lat": {
                "type": "number"
              },
              "long": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "log": {
            "description": "true, if endpoint is known to log requests, defaults to false",
            "type": "boolean"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "endpoint"
        ],
        "type": "object"
      },
      "type": "array"
    }
  },
  "title": "DNS Endpoint JSON Table",
  "type": "object"
}