{"openapi":"3.1.0","info":{"title":"thenetworkery.com API","version":"1.0.0","summary":"Free network diagnostics as JSON: DNS, email authentication, TLS, IP and routing, calculators, DN42.","description":"Every tool on https://thenetworkery.com is available here. No key or sign-up is needed.\n\n* **Rate limit:** 60 requests a minute per IP address (HTTP 429 with Retry-After above that).\n* **Results:** each answer has an overall `status` (pass, info, warn or fail), the `findings` with explanations and fixes, and the raw `data`.\n* **Text:** curl, wget and HTTPie get plain text where a tool has a text form; send `format=json` to force JSON.\n* **Browsers:** CORS is open, so you can call it from any web page.\n* **Language:** findings are English translation keys plus `params`, so you can show them in your own words.","contact":{"name":"thenetworkery.com","url":"https://thenetworkery.com/about"}},"servers":[{"url":"https://thenetworkery.com/api/v1"}],"security":[],"externalDocs":{"description":"API reference","url":"https://thenetworkery.com/api"},"tags":[{"name":"Discovery","description":"What the API offers."},{"name":"Your connection","description":"About the caller's own connection."},{"name":"DNS","description":"Records, propagation across public resolvers and DNSSEC."},{"name":"Email","description":"SPF, DKIM, DMARC, MTA-STS, BIMI and blocklists."},{"name":"Web & TLS","description":"Certificates, TLS and HTTP security headers."},{"name":"IP & routing","description":"Registration data, BGP routing and hardware addresses."},{"name":"Calculators","description":"Subnet maths and key generation; nothing leaves the server."},{"name":"Developer","description":"Tools for building and testing integrations."},{"name":"DN42","description":"The DN42 hobby network: registry, free resources, peering."}],"paths":{"/":{"get":{"operationId":"listTools","summary":"List the tools","description":"Every tool with its slug, title, summary, parameter names and URL.","tags":["Discovery"],"responses":{"200":{"description":"The tools.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolList"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/my-ip":{"get":{"operationId":"myIp","summary":"What's my IP?","description":"Your public IP address, reverse DNS and network – also as plain text for curl.\n\nWeb page: https://thenetworkery.com/tools/my-ip","tags":["Your connection"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"$ref":"#/components/parameters/format"}]},"post":{"summary":"What's my IP? (JSON body)","operationId":"postMyIp","description":"Your public IP address, reverse DNS and network – also as plain text for curl.\n\nWeb page: https://thenetworkery.com/tools/my-ip","tags":["Your connection"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{}}}}}}},"/dns-lookup":{"get":{"operationId":"dnsLookup","summary":"DNS lookup","description":"Every record for a name from a public resolver of your choice, with plain-English notes.\n\nWeb page: https://thenetworkery.com/tools/dns-lookup","tags":["DNS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"name","in":"query","required":true,"description":"Domain or host name","schema":{"type":"string","maxLength":253},"example":"thenetworkery.com"},{"name":"type","in":"query","required":false,"description":"Record type","schema":{"type":"string","enum":["ALL","A","AAAA","CNAME","MX","NS","TXT","SOA","CAA","SRV","PTR"],"description":"`ALL` – All common types","default":"ALL"},"example":"ALL"},{"name":"resolver","in":"query","required":false,"description":"Resolver","schema":{"type":"string","enum":["cloudflare","google","quad9"],"description":"`cloudflare` – Cloudflare; `google` – Google; `quad9` – Quad9","default":"cloudflare"},"example":"cloudflare"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"DNS lookup (JSON body)","operationId":"postDnsLookup","description":"Every record for a name from a public resolver of your choice, with plain-English notes.\n\nWeb page: https://thenetworkery.com/tools/dns-lookup","tags":["DNS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":253,"description":"Domain or host name"},"type":{"type":"string","enum":["ALL","A","AAAA","CNAME","MX","NS","TXT","SOA","CAA","SRV","PTR"],"description":"`ALL` – All common types","default":"ALL"},"resolver":{"type":"string","enum":["cloudflare","google","quad9"],"description":"`cloudflare` – Cloudflare; `google` – Google; `quad9` – Quad9","default":"cloudflare"}},"required":["name"],"example":{"name":"thenetworkery.com","type":"ALL","resolver":"cloudflare"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":253,"description":"Domain or host name"},"type":{"type":"string","enum":["ALL","A","AAAA","CNAME","MX","NS","TXT","SOA","CAA","SRV","PTR"],"description":"`ALL` – All common types","default":"ALL"},"resolver":{"type":"string","enum":["cloudflare","google","quad9"],"description":"`cloudflare` – Cloudflare; `google` – Google; `quad9` – Quad9","default":"cloudflare"}},"required":["name"],"example":{"name":"thenetworkery.com","type":"ALL","resolver":"cloudflare"}}}}}}},"/dns-propagation":{"get":{"operationId":"dnsPropagation","summary":"DNS propagation check","description":"Ask 15 public resolvers around the world the same question and see who has your change.\n\nWeb page: https://thenetworkery.com/tools/dns-propagation","tags":["DNS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"name","in":"query","required":true,"description":"Domain or host name","schema":{"type":"string","maxLength":253},"example":"thenetworkery.com"},{"name":"type","in":"query","required":false,"description":"Record type","schema":{"type":"string","enum":["A","AAAA","CNAME","MX","NS","TXT","SOA","CAA","SRV","PTR"],"default":"A"},"example":"MX"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"DNS propagation check (JSON body)","operationId":"postDnsPropagation","description":"Ask 15 public resolvers around the world the same question and see who has your change.\n\nWeb page: https://thenetworkery.com/tools/dns-propagation","tags":["DNS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":253,"description":"Domain or host name"},"type":{"type":"string","enum":["A","AAAA","CNAME","MX","NS","TXT","SOA","CAA","SRV","PTR"],"default":"A","description":"Record type"}},"required":["name"],"example":{"name":"thenetworkery.com","type":"MX"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":253,"description":"Domain or host name"},"type":{"type":"string","enum":["A","AAAA","CNAME","MX","NS","TXT","SOA","CAA","SRV","PTR"],"default":"A","description":"Record type"}},"required":["name"],"example":{"name":"thenetworkery.com","type":"MX"}}}}}}},"/dnssec":{"get":{"operationId":"dnssec","summary":"DNSSEC check","description":"Is the zone signed, does the chain of trust validate, and are the algorithms current?\n\nWeb page: https://thenetworkery.com/tools/dnssec","tags":["DNS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"name","in":"query","required":true,"description":"Domain","schema":{"type":"string","maxLength":253},"example":"ietf.org"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"DNSSEC check (JSON body)","operationId":"postDnssec","description":"Is the zone signed, does the chain of trust validate, and are the algorithms current?\n\nWeb page: https://thenetworkery.com/tools/dnssec","tags":["DNS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":253,"description":"Domain"}},"required":["name"],"example":{"name":"ietf.org"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":253,"description":"Domain"}},"required":["name"],"example":{"name":"ietf.org"}}}}}}},"/email-auth":{"get":{"operationId":"emailAuth","summary":"Email security check","description":"SPF, DKIM, DMARC, MTA-STS, TLS-RPT and BIMI graded, with the exact records to fix what is missing.\n\nWeb page: https://thenetworkery.com/tools/email-auth","tags":["Email"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"domain","in":"query","required":true,"description":"Domain","schema":{"type":"string","maxLength":253},"example":"gov.uk"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"Email security check (JSON body)","operationId":"postEmailAuth","description":"SPF, DKIM, DMARC, MTA-STS, TLS-RPT and BIMI graded, with the exact records to fix what is missing.\n\nWeb page: https://thenetworkery.com/tools/email-auth","tags":["Email"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","maxLength":253,"description":"Domain"}},"required":["domain"],"example":{"domain":"gov.uk"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"domain":{"type":"string","maxLength":253,"description":"Domain"}},"required":["domain"],"example":{"domain":"gov.uk"}}}}}}},"/blacklist":{"get":{"operationId":"blacklist","summary":"Blacklist check","description":"Is an IP, a domain or its mail servers on the spam blocklists receivers use – and how to get delisted.\n\nWeb page: https://thenetworkery.com/tools/blacklist","tags":["Email"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"target","in":"query","required":true,"description":"IP address or domain","schema":{"type":"string","maxLength":253},"example":"127.0.0.2"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"Blacklist check (JSON body)","operationId":"postBlacklist","description":"Is an IP, a domain or its mail servers on the spam blocklists receivers use – and how to get delisted.\n\nWeb page: https://thenetworkery.com/tools/blacklist","tags":["Email"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","maxLength":253,"description":"IP address or domain"}},"required":["target"],"example":{"target":"127.0.0.2"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"target":{"type":"string","maxLength":253,"description":"IP address or domain"}},"required":["target"],"example":{"target":"127.0.0.2"}}}}}}},"/ssl-check":{"get":{"operationId":"sslCheck","summary":"SSL/TLS certificate check","description":"Certificate, chain, expiry, hostname match, key strength and the TLS version a server negotiates.\n\nWeb page: https://thenetworkery.com/tools/ssl-check","tags":["Web & TLS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"host","in":"query","required":true,"description":"Host name","schema":{"type":"string","maxLength":253},"example":"thenetworkery.com"},{"name":"port","in":"query","required":false,"description":"Port","schema":{"type":"string","enum":["443","8443","465","993","995","636","853","5061"],"description":"`443` – HTTPS (443); `8443` – HTTPS alt (8443); `465` – SMTPS (465); `993` – IMAPS (993); `995` – POP3S (995); `636` – LDAPS (636); `853` – DNS over TLS (853); `5061` – SIP-TLS (5061)","default":"443"},"example":"443"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"SSL/TLS certificate check (JSON body)","operationId":"postSslCheck","description":"Certificate, chain, expiry, hostname match, key strength and the TLS version a server negotiates.\n\nWeb page: https://thenetworkery.com/tools/ssl-check","tags":["Web & TLS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string","maxLength":253,"description":"Host name"},"port":{"type":"string","enum":["443","8443","465","993","995","636","853","5061"],"description":"`443` – HTTPS (443); `8443` – HTTPS alt (8443); `465` – SMTPS (465); `993` – IMAPS (993); `995` – POP3S (995); `636` – LDAPS (636); `853` – DNS over TLS (853); `5061` – SIP-TLS (5061)","default":"443"}},"required":["host"],"example":{"host":"thenetworkery.com","port":"443"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"host":{"type":"string","maxLength":253,"description":"Host name"},"port":{"type":"string","enum":["443","8443","465","993","995","636","853","5061"],"description":"`443` – HTTPS (443); `8443` – HTTPS alt (8443); `465` – SMTPS (465); `993` – IMAPS (993); `995` – POP3S (995); `636` – LDAPS (636); `853` – DNS over TLS (853); `5061` – SIP-TLS (5061)","default":"443"}},"required":["host"],"example":{"host":"thenetworkery.com","port":"443"}}}}}}},"/http-headers":{"get":{"operationId":"httpHeaders","summary":"HTTP headers & security check","description":"Redirect chain, response headers and a graded check of HSTS, CSP and the other security headers.\n\nWeb page: https://thenetworkery.com/tools/http-headers","tags":["Web & TLS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"url","in":"query","required":true,"description":"URL or host name","schema":{"type":"string","format":"uri","maxLength":2048},"example":"http://thenetworkery.com"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"HTTP headers & security check (JSON body)","operationId":"postHttpHeaders","description":"Redirect chain, response headers and a graded check of HSTS, CSP and the other security headers.\n\nWeb page: https://thenetworkery.com/tools/http-headers","tags":["Web & TLS"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"URL or host name"}},"required":["url"],"example":{"url":"http://thenetworkery.com"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"URL or host name"}},"required":["url"],"example":{"url":"http://thenetworkery.com"}}}}}}},"/whois":{"get":{"operationId":"whois","summary":"WHOIS / RDAP lookup","description":"Who holds a domain, IP address or AS number – from the registry, via RDAP.\n\nWeb page: https://thenetworkery.com/tools/whois","tags":["IP & routing"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"query","in":"query","required":true,"description":"Domain, IP, prefix or AS number","schema":{"type":"string","maxLength":255},"example":"AS13335"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"WHOIS / RDAP lookup (JSON body)","operationId":"postWhois","description":"Who holds a domain, IP address or AS number – from the registry, via RDAP.\n\nWeb page: https://thenetworkery.com/tools/whois","tags":["IP & routing"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","maxLength":255,"description":"Domain, IP, prefix or AS number"}},"required":["query"],"example":{"query":"AS13335"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"query":{"type":"string","maxLength":255,"description":"Domain, IP, prefix or AS number"}},"required":["query"],"example":{"query":"AS13335"}}}}}}},"/bgp":{"get":{"operationId":"bgp","summary":"ASN & BGP prefix lookup","description":"Origin AS, visibility, RPKI validity, upstreams and announced prefixes from the global routing table.\n\nWeb page: https://thenetworkery.com/tools/bgp","tags":["IP & routing"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"query","in":"query","required":true,"description":"AS number, IP address or prefix","schema":{"type":"string","maxLength":64},"example":"AS13335"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"ASN & BGP prefix lookup (JSON body)","operationId":"postBgp","description":"Origin AS, visibility, RPKI validity, upstreams and announced prefixes from the global routing table.\n\nWeb page: https://thenetworkery.com/tools/bgp","tags":["IP & routing"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","maxLength":64,"description":"AS number, IP address or prefix"}},"required":["query"],"example":{"query":"AS13335"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"query":{"type":"string","maxLength":64,"description":"AS number, IP address or prefix"}},"required":["query"],"example":{"query":"AS13335"}}}}}}},"/subnet-calculator":{"get":{"operationId":"subnetCalculator","summary":"Subnet calculator","description":"IPv4 and IPv6 prefixes: ranges, masks, host counts, reverse zones and splitting.\n\nWeb page: https://thenetworkery.com/tools/subnet-calculator","tags":["Calculators"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"cidr","in":"query","required":true,"description":"Address or prefix","schema":{"type":"string","maxLength":64},"example":"172.20.0.0/14"},{"name":"split","in":"query","required":false,"description":"Split into prefix length (optional)","schema":{"type":"integer","minimum":0,"maximum":128},"example":"16"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"Subnet calculator (JSON body)","operationId":"postSubnetCalculator","description":"IPv4 and IPv6 prefixes: ranges, masks, host counts, reverse zones and splitting.\n\nWeb page: https://thenetworkery.com/tools/subnet-calculator","tags":["Calculators"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cidr":{"type":"string","maxLength":64,"description":"Address or prefix"},"split":{"type":"integer","minimum":0,"maximum":128,"description":"Split into prefix length (optional)"}},"required":["cidr"],"example":{"cidr":"172.20.0.0/14","split":"16"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"cidr":{"type":"string","maxLength":64,"description":"Address or prefix"},"split":{"type":"integer","minimum":0,"maximum":128,"description":"Split into prefix length (optional)"}},"required":["cidr"],"example":{"cidr":"172.20.0.0/14","split":"16"}}}}}}},"/mcp-server-test":{"post":{"summary":"MCP server tester","operationId":"postMcpServerTest","description":"Connect to a remote MCP server like an AI assistant would: handshake, tools, resources, prompts, OAuth discovery and context cost, checked against the spec.\n\nWeb page: https://thenetworkery.com/tools/mcp-server-test","tags":["Developer"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"MCP server URL"},"token":{"type":"string","maxLength":4096,"description":"Bearer token (optional, never stored) Never stored or logged."},"tool":{"type":"string","maxLength":128,"description":"Call a tool (optional)"},"arguments":{"type":"string","contentMediaType":"application/json","maxLength":20000,"description":"Tool arguments as JSON (optional)"}},"required":["url"],"example":{"url":"https://ipv4.thenetworkery.co.uk/mcp"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"MCP server URL"},"token":{"type":"string","maxLength":4096,"description":"Bearer token (optional, never stored) Never stored or logged."},"tool":{"type":"string","maxLength":128,"description":"Call a tool (optional)"},"arguments":{"type":"string","contentMediaType":"application/json","maxLength":20000,"description":"Tool arguments as JSON (optional)"}},"required":["url"],"example":{"url":"https://ipv4.thenetworkery.co.uk/mcp"}}}}}}},"/mac-lookup":{"get":{"operationId":"macLookup","summary":"MAC address vendor lookup","description":"Who made a network card, from the IEEE registry – and whether the address is randomised.\n\nWeb page: https://thenetworkery.com/tools/mac-lookup","tags":["Calculators"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"mac","in":"query","required":true,"description":"MAC address or prefix","schema":{"type":"string","maxLength":32},"example":"B8:27:EB:12:34:56"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"MAC address vendor lookup (JSON body)","operationId":"postMacLookup","description":"Who made a network card, from the IEEE registry – and whether the address is randomised.\n\nWeb page: https://thenetworkery.com/tools/mac-lookup","tags":["Calculators"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mac":{"type":"string","maxLength":32,"description":"MAC address or prefix"}},"required":["mac"],"example":{"mac":"B8:27:EB:12:34:56"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"mac":{"type":"string","maxLength":32,"description":"MAC address or prefix"}},"required":["mac"],"example":{"mac":"B8:27:EB:12:34:56"}}}}}}},"/dn42-registry":{"get":{"operationId":"dn42Registry","summary":"DN42 registry search","description":"Look up any DN42 object – AS, IP, prefix, maintainer, person or .dn42 domain – with everything linked to it.\n\nWeb page: https://thenetworkery.com/tools/dn42-registry","tags":["DN42"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"query","in":"query","required":true,"description":"AS number, IP, prefix, maintainer, person or domain","schema":{"type":"string","maxLength":100},"example":"AS4242421711"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"DN42 registry search (JSON body)","operationId":"postDn42Registry","description":"Look up any DN42 object – AS, IP, prefix, maintainer, person or .dn42 domain – with everything linked to it.\n\nWeb page: https://thenetworkery.com/tools/dn42-registry","tags":["DN42"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","maxLength":100,"description":"AS number, IP, prefix, maintainer, person or domain"}},"required":["query"],"example":{"query":"AS4242421711"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"query":{"type":"string","maxLength":100,"description":"AS number, IP, prefix, maintainer, person or domain"}},"required":["query"],"example":{"query":"AS4242421711"}}}}}}},"/dn42-free":{"get":{"operationId":"dn42Free","summary":"DN42 free resource finder","description":"Unregistered AS numbers, free IPv4 blocks and a random unused IPv6 /48 – checked against the live registry.\n\nWeb page: https://thenetworkery.com/tools/dn42-free","tags":["DN42"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"size","in":"query","required":false,"description":"IPv4 block size","schema":{"type":"string","enum":["24","25","26","27","28","29"],"description":"`29` – /29 (8); `28` – /28 (16); `27` – /27 (32); `26` – /26 (64); `25` – /25 (128); `24` – /24 (256)","default":"27"},"example":"27"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"DN42 free resource finder (JSON body)","operationId":"postDn42Free","description":"Unregistered AS numbers, free IPv4 blocks and a random unused IPv6 /48 – checked against the live registry.\n\nWeb page: https://thenetworkery.com/tools/dn42-free","tags":["DN42"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"size":{"type":"string","enum":["24","25","26","27","28","29"],"description":"`29` – /29 (8); `28` – /28 (16); `27` – /27 (32); `26` – /26 (64); `25` – /25 (128); `24` – /24 (256)","default":"27"}},"example":{"size":"27"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"size":{"type":"string","enum":["24","25","26","27","28","29"],"description":"`29` – /29 (8); `28` – /28 (16); `27` – /27 (32); `26` – /26 (64); `25` – /25 (128); `24` – /24 (256)","default":"27"}},"example":{"size":"27"}}}}}}},"/dn42-peering-config":{"get":{"operationId":"dn42PeeringConfig","summary":"DN42 peering config generator","description":"WireGuard, BIRD 2 and RouterOS 7 configs for a DN42 peering, following the wiki conventions.\n\nWeb page: https://thenetworkery.com/tools/dn42-peering-config","tags":["DN42"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"our_asn","in":"query","required":true,"description":"Your AS number","schema":{"type":"integer","minimum":1,"maximum":4294967295},"example":"4242421711"},{"name":"peer_asn","in":"query","required":true,"description":"Peer AS number","schema":{"type":"integer","minimum":1,"maximum":4294967295},"example":"4242423914"},{"name":"peer_ll6","in":"query","required":true,"description":"Peer link-local IPv6","schema":{"type":"string","format":"ipv6"},"example":"fe80::3914"},{"name":"our_ll6","in":"query","required":false,"description":"Your link-local IPv6 (optional)","schema":{"type":"string","format":"ipv6"},"example":"fe80::1711"},{"name":"peer_ipv4","in":"query","required":false,"description":"Peer tunnel IPv4 (optional)","schema":{"type":"string","format":"ipv4"},"example":"172.20.53.97"},{"name":"our_ipv4","in":"query","required":false,"description":"Your DN42 IPv4 (optional)","schema":{"type":"string","format":"ipv4"},"example":"172.23.141.33"},{"name":"endpoint","in":"query","required":false,"description":"Peer endpoint host:port (optional)","schema":{"type":"string","maxLength":255},"example":"uk1.example.net:21711"},{"name":"peer_pubkey","in":"query","required":false,"description":"Peer WireGuard public key (optional)","schema":{"type":"string"},"example":"base64…="},{"name":"enh","in":"query","required":false,"description":"Session type","schema":{"type":"string","enum":["yes","no"],"description":"`yes` – One MP-BGP session over IPv6 (extended next hop); `no` – Separate IPv4 and IPv6 sessions","default":"yes"},"example":"yes"},{"$ref":"#/components/parameters/format"}]},"post":{"summary":"DN42 peering config generator (JSON body)","operationId":"postDn42PeeringConfig","description":"WireGuard, BIRD 2 and RouterOS 7 configs for a DN42 peering, following the wiki conventions.\n\nWeb page: https://thenetworkery.com/tools/dn42-peering-config","tags":["DN42"],"responses":{"200":{"description":"The result. curl-like clients may get `text/plain` instead (see the `format` parameter).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResult"}},"text/plain":{"schema":{"type":"string"}}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"our_asn":{"type":"integer","minimum":1,"maximum":4294967295,"description":"Your AS number"},"peer_asn":{"type":"integer","minimum":1,"maximum":4294967295,"description":"Peer AS number"},"peer_ll6":{"type":"string","format":"ipv6","description":"Peer link-local IPv6"},"our_ll6":{"type":"string","format":"ipv6","description":"Your link-local IPv6 (optional)"},"peer_ipv4":{"type":"string","format":"ipv4","description":"Peer tunnel IPv4 (optional)"},"our_ipv4":{"type":"string","format":"ipv4","description":"Your DN42 IPv4 (optional)"},"endpoint":{"type":"string","maxLength":255,"description":"Peer endpoint host:port (optional)"},"peer_pubkey":{"type":"string","description":"Peer WireGuard public key (optional)"},"enh":{"type":"string","enum":["yes","no"],"description":"`yes` – One MP-BGP session over IPv6 (extended next hop); `no` – Separate IPv4 and IPv6 sessions","default":"yes"}},"required":["our_asn","peer_asn","peer_ll6"],"example":{"our_asn":"4242421711","peer_asn":"4242423914","peer_ll6":"fe80::3914","our_ll6":"fe80::1711","peer_ipv4":"172.20.53.97","our_ipv4":"172.23.141.33","endpoint":"uk1.example.net:21711","enh":"yes"}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"our_asn":{"type":"integer","minimum":1,"maximum":4294967295,"description":"Your AS number"},"peer_asn":{"type":"integer","minimum":1,"maximum":4294967295,"description":"Peer AS number"},"peer_ll6":{"type":"string","format":"ipv6","description":"Peer link-local IPv6"},"our_ll6":{"type":"string","format":"ipv6","description":"Your link-local IPv6 (optional)"},"peer_ipv4":{"type":"string","format":"ipv4","description":"Peer tunnel IPv4 (optional)"},"our_ipv4":{"type":"string","format":"ipv4","description":"Your DN42 IPv4 (optional)"},"endpoint":{"type":"string","maxLength":255,"description":"Peer endpoint host:port (optional)"},"peer_pubkey":{"type":"string","description":"Peer WireGuard public key (optional)"},"enh":{"type":"string","enum":["yes","no"],"description":"`yes` – One MP-BGP session over IPv6 (extended next hop); `no` – Separate IPv4 and IPv6 sessions","default":"yes"}},"required":["our_asn","peer_asn","peer_ll6"],"example":{"our_asn":"4242421711","peer_asn":"4242423914","peer_ll6":"fe80::3914","our_ll6":"fe80::1711","peer_ipv4":"172.20.53.97","our_ipv4":"172.23.141.33","endpoint":"uk1.example.net:21711","enh":"yes"}}}}}}}},"components":{"parameters":{"format":{"name":"format","in":"query","required":false,"description":"Response format. Defaults to text for command-line clients (curl, wget, HTTPie) when the tool has a text form, JSON otherwise.","schema":{"type":"string","enum":["json","text"]}}},"responses":{"ValidationError":{"description":"The input is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"RateLimited":{"description":"More than 60 requests a minute from this address.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Finding":{"type":"object","required":["level","title"],"properties":{"level":{"type":"string","enum":["pass","info","warn","fail"]},"title":{"type":"string","description":"English text with :placeholders, filled from params.","examples":["SPF ends in :all."]},"params":{"type":"object","additionalProperties":true,"description":"Values for the placeholders in title, detail and fix."},"detail":{"type":"string","description":"Why it matters."},"fix":{"type":"string","description":"What to change."},"record":{"type":"string","description":"A suggested DNS record or config line, ready to paste."}}},"ToolResult":{"type":"object","required":["tool","input","status","data","findings"],"properties":{"tool":{"type":"string","description":"The tool slug."},"input":{"type":"object","additionalProperties":true,"description":"The input after normalising (e.g. a URL reduced to its host name). Secrets are left out."},"status":{"type":"string","enum":["pass","info","warn","fail"],"description":"The worst finding level."},"data":{"type":"object","additionalProperties":true,"description":"Raw results. The shape differs per tool."},"findings":{"type":"array","items":{"$ref":"#/components/schemas/Finding"}}}},"ToolList":{"type":"object","properties":{"tools":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"params":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"}}}}}},"ValidationError":{"type":"object","properties":{"message":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"Error":{"type":"object","properties":{"message":{"type":"string"}}}}}}