Every page also answers in plain text and JSON. No key, no signup.
curl aaaa.bot # your IP and whether you came over IPv4 or IPv6 curl aaaa.bot/example.com # does example.com have IPv6? curl aaaa.bot/93.184.216.34 # every IPv6 form of an IPv4 curl aaaa.bot/2001:db8::1 # what kind of IPv6 address this is curl -4 v4.aaaa.bot/ip # your IPv4 (fails if you have none) curl -6 v6.aaaa.bot/ip # your IPv6 (fails if you have none)
GET https://aaaa.bot/api/v1/{domain or IP}
GET https://aaaa.bot/ip # {"ip":"…","family":"IPv4"|"IPv6"}
Or send Accept: application/json to any result page. CORS is open, so you can call it from a browser.
{
"kind": "host",
"report": {
"host": "example.com",
"verdict": "dual-stack",
"a": { "status": "found", "values": ["…"], "ttl": 300 },
"aaaa": { "status": "found", "values": ["…"], "ttl": 300 },
"www": { … }
}
}
verdict is one of dual-stack, ipv4-only, ipv6-only, no-address, not-found, unknown. Each lookup's status is found, absent, nxdomain or failed. A failed lookup is never reported as "no IPv6".
Domain lookups are limited to 30 a minute per IP and cached for up to five minutes. IP conversions are free of limits — they don't touch the network.