What's my IP?
Open the tool →Your public IP address, reverse DNS and network – also as plain text for curl.
No parameters.
curl -s "https://thenetworkery.com/api/v1/my-ip"
Every tool on this site is a JSON endpoint. No key, no sign-up – the answers are the same verdicts, findings and fixes you see on the web pages.
Base URL: https://thenetworkery.com/api/v1
curl -s "https://thenetworkery.com/api/v1" # list the tools
curl -s "https://thenetworkery.com/api/v1/dns-lookup?name=example.com&type=MX"
curl -s "https://thenetworkery.com/api/v1/email-auth?domain=example.com"
curl -s "https://thenetworkery.com/api/v1/subnet-calculator?cidr=10.0.0.0/22&format=text"
curl thenetworkery.com/ip # just your address
Every tool answers with the same envelope:
| Field | Type | Meaning |
|---|---|---|
| tool | string | The tool slug. |
| input | object | Your input after clean-up, e.g. a URL reduced to its host name. Secrets are left out. |
| status | pass · info · warn · fail | The overall verdict: the worst finding. |
| data | object | The raw results. Its shape differs per tool. |
| findings[] | array | Each check: level, title and params, and where useful detail, fix and a ready-to-paste record. |
Finding texts are English with placeholders such as :count filled from params – the same keys this site translates, so you can show them in your own language or wording.
GET https://thenetworkery.com/api/v1/email-auth?domain=example.com (shortened)
{
"tool": "email-auth",
"input": { "domain": "example.com" },
"status": "warn",
"data": { "domain": "example.com", "mx": ["0 ."], "…": "…" },
"findings": [
{ "level": "pass", "title": ":count mail servers (MX) found.", "params": { "count": 1 } },
{ "level": "pass", "title": "SPF ends in -all (hard fail for other senders).", "params": {} },
{ "level": "warn", "title": "…", "params": {}, "detail": "…", "fix": "…", "record": "…" }
]
}
| 404 | No tool with that slug. |
| 422 | Missing or invalid input. The body names each problem field. |
| 429 | Rate limit reached. Wait for the number of seconds in Retry-After. |
| 5xx | Something failed on our side. Try again later. |
A check that ran but found problems is not an error: it is HTTP 200 with status warn or fail.
HTTP/1.1 422 Unprocessable Content
{
"message": "The name field is required.",
"errors": { "name": ["The name field is required."] }
}
Import the OpenAPI file into Postman, Insomnia, Bruno or Hoppscotch, or generate a typed client for your language:
npx @openapitools/openapi-generator-cli generate \
-i https://ipv4.thenetworkery.co.uk/api/openapi.json \
-g typescript-fetch -o ./networkery-client
JavaScript
const r = await fetch('https://thenetworkery.com/api/v1/dns-lookup?' + new URLSearchParams({ name: 'example.com', type: 'MX' }));
const result = await r.json();
console.log(result.status, result.data);
Python
import requests
r = requests.get('https://thenetworkery.com/api/v1/dns-lookup', params={'name': 'example.com', 'type': 'MX'}, timeout=30)
r.raise_for_status()
result = r.json()
print(result['status'])
for f in result['findings']:
print(f['level'], f['title'], f['params'])
Your public IP address, reverse DNS and network – also as plain text for curl.
No parameters.
curl -s "https://thenetworkery.com/api/v1/my-ip"
Every record for a name from a public resolver of your choice, with plain-English notes.
| Parameter | Type | Description |
|---|---|---|
| name* | string ≤ 253 |
Domain or host name
Example: thenetworkery.com |
| type | string |
Record type
ALLAAAAACNAMEMXNSTXTSOACAASRVPTRDefault: ALL |
| resolver | string |
Resolver
cloudflaregooglequad9Default: cloudflare |
curl -s "https://thenetworkery.com/api/v1/dns-lookup?name=thenetworkery.com&type=ALL&resolver=cloudflare"
Ask 15 public resolvers around the world the same question and see who has your change.
| Parameter | Type | Description |
|---|---|---|
| name* | string ≤ 253 |
Domain or host name
Example: thenetworkery.com |
| type | string |
Record type
AAAAACNAMEMXNSTXTSOACAASRVPTRDefault: A |
curl -s "https://thenetworkery.com/api/v1/dns-propagation?name=thenetworkery.com&type=MX"
Is the zone signed, does the chain of trust validate, and are the algorithms current?
| Parameter | Type | Description |
|---|---|---|
| name* | string ≤ 253 |
Domain
Example: ietf.org |
curl -s "https://thenetworkery.com/api/v1/dnssec?name=ietf.org"
SPF, DKIM, DMARC, MTA-STS, TLS-RPT and BIMI graded, with the exact records to fix what is missing.
| Parameter | Type | Description |
|---|---|---|
| domain* | string ≤ 253 |
Domain
Example: gov.uk |
curl -s "https://thenetworkery.com/api/v1/email-auth?domain=gov.uk"
Is an IP, a domain or its mail servers on the spam blocklists receivers use – and how to get delisted.
| Parameter | Type | Description |
|---|---|---|
| target* | string ≤ 253 |
IP address or domain
Example: 127.0.0.2 |
curl -s "https://thenetworkery.com/api/v1/blacklist?target=127.0.0.2"
Certificate, chain, expiry, hostname match, key strength and the TLS version a server negotiates.
| Parameter | Type | Description |
|---|---|---|
| host* | string ≤ 253 |
Host name
Example: thenetworkery.com |
| port | string |
Port
44384434659939956368535061Default: 443 |
curl -s "https://thenetworkery.com/api/v1/ssl-check?host=thenetworkery.com&port=443"
Redirect chain, response headers and a graded check of HSTS, CSP and the other security headers.
| Parameter | Type | Description |
|---|---|---|
| url* | string (uri) ≤ 2048 |
URL or host name
Example: http://thenetworkery.com |
curl -s "https://thenetworkery.com/api/v1/http-headers?url=http%3A%2F%2Fthenetworkery.com"
Who holds a domain, IP address or AS number – from the registry, via RDAP.
| Parameter | Type | Description |
|---|---|---|
| query* | string ≤ 255 |
Domain, IP, prefix or AS number
Example: AS13335 |
curl -s "https://thenetworkery.com/api/v1/whois?query=AS13335"
Origin AS, visibility, RPKI validity, upstreams and announced prefixes from the global routing table.
| Parameter | Type | Description |
|---|---|---|
| query* | string ≤ 64 |
AS number, IP address or prefix
Example: AS13335 |
curl -s "https://thenetworkery.com/api/v1/bgp?query=AS13335"
IPv4 and IPv6 prefixes: ranges, masks, host counts, reverse zones and splitting.
| Parameter | Type | Description |
|---|---|---|
| cidr* | string ≤ 64 |
Address or prefix
Example: 172.20.0.0/14 |
| split | integer |
Split into prefix length (optional)
Example: 16 |
curl -s "https://thenetworkery.com/api/v1/subnet-calculator?cidr=172.20.0.0%2F14&split=16"
Who made a network card, from the IEEE registry – and whether the address is randomised.
| Parameter | Type | Description |
|---|---|---|
| mac* | string ≤ 32 |
MAC address or prefix
Example: B8:27:EB:12:34:56 |
curl -s "https://thenetworkery.com/api/v1/mac-lookup?mac=B8%3A27%3AEB%3A12%3A34%3A56"
Connect to a remote MCP server like an AI assistant would: handshake, tools, resources, prompts, OAuth discovery and context cost, checked against the spec.
| Parameter | Type | Description |
|---|---|---|
| url* | string (uri) ≤ 2048 |
MCP server URL
Example: https://ipv4.thenetworkery.co.uk/mcp |
| token | string ≤ 4096 |
Bearer token (optional, never stored)
POST only, never stored Example: sk-… |
| tool | string ≤ 128 |
Call a tool (optional)
Example: tool_name |
| arguments | string (JSON) ≤ 20000 |
Tool arguments as JSON (optional)
Example: {"query": "example"} |
curl -s -X POST https://thenetworkery.com/api/v1/mcp-server-test \
-H 'Content-Type: application/json' \
-d '{"url":"https://ipv4.thenetworkery.co.uk/mcp","token":"…"}'
Look up any DN42 object – AS, IP, prefix, maintainer, person or .dn42 domain – with everything linked to it.
| Parameter | Type | Description |
|---|---|---|
| query* | string ≤ 100 |
AS number, IP, prefix, maintainer, person or domain
Example: AS4242421711 |
curl -s "https://thenetworkery.com/api/v1/dn42-registry?query=AS4242421711"
Unregistered AS numbers, free IPv4 blocks and a random unused IPv6 /48 – checked against the live registry.
| Parameter | Type | Description |
|---|---|---|
| size | string |
IPv4 block size
242526272829Default: 27 |
curl -s "https://thenetworkery.com/api/v1/dn42-free?size=27"
WireGuard, BIRD 2 and RouterOS 7 configs for a DN42 peering, following the wiki conventions.
| Parameter | Type | Description |
|---|---|---|
| our_asn* | integer |
Your AS number
Example: 4242421711 |
| peer_asn* | integer |
Peer AS number
Example: 4242423914 |
| peer_ll6* | string (ipv6) |
Peer link-local IPv6
Example: fe80::3914 |
| our_ll6 | string (ipv6) |
Your link-local IPv6 (optional)
Example: fe80::1711 |
| peer_ipv4 | string (ipv4) |
Peer tunnel IPv4 (optional)
Example: 172.20.53.97 |
| our_ipv4 | string (ipv4) |
Your DN42 IPv4 (optional)
Example: 172.23.141.33 |
| endpoint | string ≤ 255 |
Peer endpoint host:port (optional)
Example: uk1.example.net:21711 |
| peer_pubkey | string |
Peer WireGuard public key (optional)
Example: base64…= |
| enh | string |
Session type
yesnoDefault: yes |
curl -s "https://thenetworkery.com/api/v1/dn42-peering-config?our_asn=4242421711&peer_asn=4242423914&peer_ll6=fe80%3A%3A3914&our_ll6=fe80%3A%3A1711&peer_ipv4=172.20.53.97&our_ipv4=172.23.141.33&endpoint=uk1.example.net%3A21711&enh=yes"