Files
vectordns-server/docs/api-reference.md

3.0 KiB

API Reference

Complete reference for the VectorDNS Go server REST API.

Base URL & Authentication

Base URL: https://<your-vps-host>/api/v1

All requests (except /health) require an API key header:

X-API-Key: <your-shared-secret>

Set API_KEY in your server environment to enable authentication. If left empty, auth is disabled (not recommended for production).


Endpoints

POST /dns/lookup

Resolve DNS records for a domain. Query one or more record types in a single request.

Request:

{
  "domain": "example.com",
  "types": ["A", "AAAA", "MX", "TXT", "NS", "CNAME", "SOA", "CAA", "SRV"],
  "nameserver": "8.8.8.8"
}
Field Required Description
domain Yes The domain to query.
types No Record types to query. Defaults to all 9 supported types if omitted.
nameserver No Specific nameserver to query. Defaults to system resolver.

Response (200):

{
  "domain": "example.com",
  "nameserver": "8.8.8.8",
  "records": {
    "A": [{ "value": "93.184.216.34", "ttl": 300 }],
    "MX": [{ "value": "mail.example.com", "priority": 10, "ttl": 3600 }]
  },
  "query_time_ms": 12
}

POST /dns/propagation

Check DNS propagation across multiple public resolvers. Queries resolvers in parallel and compares results.

Request:

{
  "domain": "example.com",
  "type": "A",
  "resolvers": ["8.8.8.8", "1.1.1.1", "9.9.9.9"]
}
Field Required Description
domain Yes The domain to check.
type Yes The record type to check (e.g. A, MX).
resolvers No List of resolver IPs. Defaults to a built-in list of public resolvers.

Response (200):

{
  "domain": "example.com",
  "type": "A",
  "results": [
    { "resolver": "8.8.8.8", "values": ["93.184.216.34"], "ttl": 300 },
    { "resolver": "1.1.1.1", "values": ["93.184.216.34"], "ttl": 280 },
    { "resolver": "9.9.9.9", "values": ["93.184.216.34"], "ttl": 295 }
  ],
  "consistent": true
}

POST /dns/validate

DNSSEC validation for a domain. Checks the AD flag and verifies the signature chain.

Request:

{
  "domain": "example.com"
}
Field Required Description
domain Yes The domain to validate.

Response (200):

{
  "domain": "example.com",
  "dnssec": true,
  "chain_valid": true,
  "details": "RRSIG verified for A record"
}

GET /health

Health check. No authentication required. Use this for uptime monitoring.

Response (200):

{
  "status": "ok",
  "version": "0.1.0"
}

Error Responses

All errors return a consistent JSON body:

{
  "error": "invalid domain",
  "code": "INVALID_DOMAIN"
}
HTTP Status Code Description
400 INVALID_DOMAIN Malformed or missing domain
400 INVALID_TYPE Unsupported record type
401 UNAUTHORIZED Missing or invalid API key
500 DNS_ERROR Upstream DNS query failed
500 INTERNAL Unexpected server error