{"name":"domain-api","usage":["GET  /v1/query?q=valetheath.com+SPF","POST /v1/query  { \"q\": \"valetheath.com SPF\" }","GET  /v1/lookup/:domain            (all record types)","GET  /v1/lookup/:domain/:type      (spf|dmarc|dkim|bimi|ns|mx|a|aaaa|cname|caa|whois|ssl|expiry|dnssec|blacklist|subdomains|all)","POST /v1/lookup/batch              ({ domains: string[], type? })","GET  /v1/health/:domain            (rolled-up pass/warn/fail checklist + score)","Add ?fresh=1 to bypass the edge cache. Add ?format=csv on batch/health for CSV.","GET  /v1/openapi.json and /v1/docs (Swagger UI) — public, no key required.","Admin (requires a key with the 'admin' flag set — see README): /v1/admin/watched, /v1/admin/alerts, /v1/admin/usage, /v1/admin/run-checks"],"auth":"Send your API key via 'X-API-Key' header or 'Authorization: Bearer <key>'.","rateLimiting":"Responses include X-RateLimit-Limit / X-RateLimit-Remaining headers. Exceeding the limit returns 429 with a Retry-After header. Batch requests are weighted by domain count.","caching":"Results are cached at the edge per record type (minutes for SPF/DMARC/DKIM/MX, longer for NS/DNSSEC, hours for WHOIS/SSL/subdomains). Pass ?fresh=1 to bypass.","idempotency":"Every mutating POST (/v1/query, /v1/lookup/batch, /v1/admin/watched, /v1/admin/run-checks) requires an 'Idempotency-Key' header. Reusing a key with an identical request replays the cached response; reusing it with a different request returns 409.","errors":"Errors are { \"error\": { \"code\", \"message\", \"requestId\", \"details\"? } }."}