PageSourceSearch

https://ipaddress.to/

html ipaddress.to collected 2026-10-02 01:09:01 UTC 110,953 bytes, 1,158 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" data-theme="dark">
3<head>
4            <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>What Is My IP? — Public IP Address &amp; Geolocation | IPAddress.to</title>
7
8    <!-- The site is dark-only: data-theme="dark" is hardcoded on <html>, so no
9         bootstrap script is needed and there is nothing to flash. -->
10    <meta name="color-scheme" content="dark">
11    <meta name="theme-color" content="#050d1c">
12
13        <meta name="description" content="Instantly find your public IP address with geolocation, ISP details, timezone and an interactive map. Free IP API for developers.">
14    <meta name="keywords" content="what is my IP, my IP address, public IP, IP geolocation, IP lookup, ISP lookup, IP location, IP API">
15    <meta name="robots" content="index, follow">
16    <link rel="canonical" href="https://ipaddress.to/">
17
18        <meta property="og:type" content="website">
19    <meta property="og:site_name" content="IPAddress.to">
20    <meta property="og:title" content="What Is My IP? — Public IP Address &amp; Geolocation | IPAddress.to">
21    <meta property="og:description" content="Instantly find your public IP address with geolocation, ISP details, timezone and an interactive map. Free IP API for developers.">
22    <meta property="og:url" content="https://ipaddress.to/">
23    <meta property="og:image" content="https://ipaddress.to/favicon/web-app-manifest-512x512.png">
24
25        <meta name="twitter:card" content="summary">
26    <meta name="twitter:title" content="What Is My IP? — Public IP Address &amp; Geolocation | IPAddress.to">
27    <meta name="twitter:description" content="Instantly find your public IP address with geolocation, ISP details, timezone and an interactive map. Free IP API for developers.">
28    <meta name="twitter:image" content="https://ipaddress.to/favicon/web-app-manifest-512x512.png">
29
30        <link rel="icon" type="image/png" href="/favicon/favicon-96x96.png" sizes="96x96" />
31    <link rel="icon" type="image/svg+xml" href="/favicon/favicon.svg" />
32    <link rel="shortcut icon" href="/favicon.ico" />
33    <link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png" />
34    <meta name="apple-mobile-web-app-title" content="IPAddress.to" />
35    <link rel="manifest" href="/favicon/site.webmanifest" />
36
37        <link rel="preload" as="fetch" href="https://ipv6.ipaddress.to/" crossorigin>
38        <link rel="preload" href="/fonts/space-grotesk-700-latin.woff2" as="font" type="font/woff2" crossorigin>
39
40        <link rel="stylesheet" href="/css/shared.min.css?v=1.43.1">
41
42        
42<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://ipaddress.to/#organization","name":"IPAddress.to","url":"https://ipaddress.to/","logo":"https://ipaddress.to/favicon/web-app-manifest-512x512.png"},{"@type":"WebSite","@id":"https://ipaddress.to/#website","url":"https://ipaddress.to/","name":"IPAddress.to","description":"Free IP address lookup, geolocation, DNS, WHOIS and network tools.","publisher":{"@id":"https://ipaddress.to/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://ipaddress.to/lookup/{search_term_string}"},"query-input":"required name=search_term_string"}},{"@type":"WebApplication","@id":"https://ipaddress.to/#app","name":"IPAddress.to","url":"https://ipaddress.to/","description":"Free IP address lookup with geolocation, ISP, ASN, DNS, WHOIS and a developer API.","applicationCategory":"UtilitiesApplication","operatingSystem":"Any","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"publisher":{"@id":"https://ipaddress.to/#organization"},"featureList":["Public IP detection","IP geolocation","ASN and ISP lookup","DNS propagation checker","WHOIS lookup","DNS resolver","IP fraud scoring","Free developer API"]}]}</script>
42
43</head>
44<body>
45
46            <a href="#swup" class="skip-link">Skip to content</a>
47
48    <div class="toast" id="toast" role="status" aria-live="polite">
49        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="20 6 9 17 4 12"/></svg>
50        <span id="toastMsg">Copied to clipboard</span>
51    </div>
52
53        <header class="header">
54        <div class="header-bar">
55            <a href="/" class="logo">
56                <div class="logo-mark"><svg class="logo-img" width="22" height="22" viewBox="-37 0 512 512" role="img" aria-label="IPAddress.to logo"><path fill="#bddbff" d="M438.86 64c0-35.35-98.24-64-219.43-64S0 28.65 0 64s98.24 64 219.43 64 219.43-28.65 219.43-64z"/><path fill="#9bc9ff" d="M219.43 256c121.14 0 219.43-28.62 219.43-64V64c0 35.38-98.29 64-219.43 64S0 99.38 0 64v128c0 35.38 98.29 64 219.43 64z"/><path fill="#57a4ff" d="M219.43 384c121.14 0 219.43-28.62 219.43-64V192c0 35.38-98.29 64-219.43 64S0 227.38 0 192v128c0 35.38 98.29 64 219.43 64z"/><path fill="#2488ff" d="M438.86 320c0 35.38-98.29 64-219.43 64S0 355.38 0 320v128c0 35.38 98.29 64 219.43 64s219.43-28.62 219.43-64V320z"/></svg></div>
57                <span class="logo-text">IPAddress<span class="logo-suffix">.to</span></span>
58            </a>
59            <div class="header-right">
60                <nav class="header-nav" aria-label="Primary">
61                    <a href="/" class="header-link" data-nav><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>My IP</a>
62                    <a href="/lookup/" class="header-link" data-nav><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>Lookup</a>
63                    <a href="/dns/" class="header-link" data-nav><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></svg>DNS</a>
64                    <a href="/email/" class="header-link" data-nav><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="m22 7-10 5L2 7"/></svg>Email</a>
65                    <a href="/whois/" class="header-link" data-nav><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>WHOIS</a>
66                    <a href="/score/" class="header-link" data-nav><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>Score</a>
67                    <a href="/api/docs/" class="header-link" data-nav><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>API</a>
68                </nav>
69                <div class="header-auth">
70                    <button type="button" class="header-auth-btn auth-when-out" data-auth-open="login" aria-label="Log in"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"/><polyline points="10 17 15 12 10 7"/><line x1="15" y1="12" x2="3" y2="12"/></svg><span>Log in</span></button>
71                    <button type="button" class="header-auth-btn header-auth-primary auth-when-out" data-auth-open="signup" aria-label="Sign up"><span>Sign up</span></button>
72                    <a href="/account/" class="header-auth-btn header-auth-user auth-when-in" data-nav title="Account &amp; API keys"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg><span>Account</span></a>
73                </div>
74                <button class="menu-btn" id="menuBtn" onclick="toggleMobileMenu()" aria-label="Menu">
75                    <svg class="icon-menu" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>
76                    <svg class="icon-close" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
77                </button>
78            </div>
79        </div>
80    </header>
81
82        <div class="mobile-overlay" id="mobileOverlay" onclick="toggleMobileMenu()"></div>
83
84        <nav class="mobile-drawer" id="mobileDrawer" aria-label="Mobile">
85        <div class="mobile-drawer-header">
86            <span class="mobile-drawer-title">Menu</span>
87            <button class="mobile-drawer-close" onclick="toggleMobileMenu()" aria-label="Close menu">
88                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
89            </button>
90        </div>
91        <div class="mobile-drawer-nav">
92            <a href="/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
93                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>
94                My IP            </a>
95            <a href="/lookup/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
96                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
97                Lookup            </a>
98            <a href="/dns/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
99                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></svg>
100                DNS Checker            </a>
101            <a href="/email/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
102                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="m22 7-10 5L2 7"/></svg>
103                Email Check            </a>
104            <a href="/whois/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
105                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>
106                WHOIS            </a>
107            <a href="/score/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
108                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
109                Fraud Score            </a>
110            <a href="/api/docs/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
111                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>
112                API Docs            </a>
113            <a href="/#playground" class="mobile-nav-link" onclick="closeMobileMenu()">
114                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="5 3 19 12 5 21 5 3"/></svg>
115                Playground            </a>
116            <div class="mobile-auth">
117                <button type="button" class="mobile-nav-link auth-when-out" data-auth-open="login">
118                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"/><polyline points="10 17 15 12 10 7"/><line x1="15" y1="12" x2="3" y2="12"/></svg>
119                    Log in
120                </button>
121                <button type="button" class="mobile-nav-link auth-when-out" data-auth-open="signup">
122                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="16"/><line x1="8" y1="12" x2="16" y2="12"/></svg>
123                    Sign up — free
124                </button>
125                <a href="/account/" class="mobile-nav-link auth-when-in" data-nav onclick="closeMobileMenu()">
126                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
127                    Account &amp; API keys
128                </a>
129            </div>
130        </div>
131        <div class="mobile-drawer-footer">
132            <span>IPAddress.to</span>
133        </div>
134    </nav>
135
136                <div class="auth-backdrop" id="authModal" role="dialog" aria-modal="true" aria-labelledby="authTitle" aria-hidden="true" data-tab="login">
137        <div class="auth-dialog">
138            <button type="button" class="auth-close" data-auth-close aria-label="Close">
139                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
140            </button>
141            <div class="auth-tabs" role="tablist">
142                <button type="button" class="auth-tab on" role="tab" data-auth-tab="login">Log in</button>
143                <button type="button" class="auth-tab" role="tab" data-auth-tab="signup">Sign up</button>
144            </div>
145            <div class="auth-heading">
146                <h2 id="authTitle"><span class="auth-title-login">Welcome back</span><span class="auth-title-signup">Create your account</span></h2>
147                <p><span class="auth-title-login">Log in to manage your API keys and see your usage.</span><span class="auth-title-signup">Free. Your first API key is generated instantly.</span></p>
148            </div>
149            <div class="contact-error auth-error" id="authError" role="alert" hidden></div>
150
151            <div class="auth-panes">
152            <form class="contact-form auth-form" data-auth-form="login" method="post" action="/account/" novalidate>
153                <input type="hidden" name="_action" value="login">
154                <input type="hidden" name="_csrf" value="">
155                <div class="contact-field">
156                    <label for="am-li-email">Email</label>
157                    <input type="email" id="am-li-email" name="email" required maxlength="190" autocomplete="email" placeholder="[email protected]">
158                </div>
159                <div class="contact-field">
160                    <label for="am-li-pass">Password</label>
161                    <input type="password" id="am-li-pass" name="password" required autocomplete="current-password" placeholder="Your password">
162                </div>
163                <button type="submit" class="btn btn-primary contact-submit auth-submit">Log in</button>
164                <p class="auth-switch">New here? <button type="button" data-auth-tab="signup">Create a free account</button></p>
165            </form>
166
167            <form class="contact-form auth-form" data-auth-form="signup" method="post" action="/account/" novalidate aria-hidden="true" inert>
168                <input type="hidden" name="_action" value="signup">
169                <input type="hidden" name="_csrf" value="">
170                <div class="contact-field">
171                    <label for="am-su-email">Email</label>
172                    <input type="email" id="am-su-email" name="email" required maxlength="190" autocomplete="email" placeholder="[email protected]">
173                </div>
174                <div class="contact-field">
175                    <label for="am-su-pass">Password</label>
176                    <input type="password" id="am-su-pass" name="password" required minlength="8" autocomplete="new-password" placeholder="At least 8 characters">
177                </div>
178                <div class="contact-field">
179                    <label for="am-su-pass2">Confirm password</label>
180                    <input type="password" id="am-su-pass2" name="password2" required minlength="8" autocomplete="new-password" placeholder="Repeat the password">
181                </div>
182                <button type="submit" class="btn btn-primary contact-submit auth-submit">Create account</button>
183                <p class="auth-note">By signing up you agree to the <a href="/terms/">Terms of Service</a> and <a href="/privacy/">Privacy Policy</a>.</p>
184                <p class="auth-switch">Already have an account? <button type="button" data-auth-tab="login">Log in</button></p>
185            </form>
186            </div>
187        </div>
188    </div>
189
190            <div class="map-tooltip" id="mapTooltip">
191        <div class="map-tooltip-header">
192            <span class="map-tooltip-flag" id="ttFlag"></span>
193            <div>
194                <div class="map-tooltip-name" id="ttName"></div>
195                <div class="map-tooltip-provider" id="ttProvider"></div>
196            </div>
197        </div>
198        <div class="map-tooltip-result" id="ttResult"></div>
199    </div>
200
201    <!-- Hydrate JS with server-side data -->
202    
202<script>
203        var currentData = {"ip":"181.215.65.77","success":true,"type":"IPv4","country":"United States","country_code":"US","region":"Illinois","region_code":null,"city":"Chicago","postal":null,"latitude":41.85,"longitude":-87.65,"timezone":"America/Chicago","isp":"Datacamp Limited","org":"Datacamp Limited","asn":"AS212238"};
204        var _protoChecked = false;
205        document.addEventListener('DOMContentLoaded', function() {
206            if (!_protoChecked && typeof checkBothProtocols === 'function' && currentData) {
207                _protoChecked = true;
208                checkBothProtocols();
209            }
210            (function tickLocalTime(){
211                var el = document.getElementById('detailLocalTime');
212                if (!el) return;
213                var tz = el.getAttribute('data-tz');
214                if (!tz) return;
215                var offsetStr = '';
216                try {
217                    var offsetFmt = new Intl.DateTimeFormat('en-GB', { timeZone: tz, timeZoneName: 'shortOffset' });
218                    var offset = offsetFmt.formatToParts(new Date()).find(function(p){ return p.type === 'timeZoneName'; });
219                    offsetStr = offset ? offset.value.replace('GMT', '') : '';
220                } catch (e) {}
221                var fmt;
222                try {
223                    fmt = new Intl.DateTimeFormat('en-GB', { timeZone: tz, hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false });
224                } catch (e) { return; }
225                function update(){
226                    el.innerHTML = fmt.format(new Date()) + (offsetStr ? ' <span class="u-muted-medium">(' + offsetStr + ')</span>' : '');
227                }
228                update();
229                setInterval(update, 1000);
230            })();
231        });
232    </script>
232
233
234    <main id="swup" class="transition-main">
235
236        <section class="hero landing-v2">
237            <div class="hero-grid"></div>
238            <div class="hero-glow"></div>
239            <div class="container">
240                <div class="ip-card-wrapper">
241                                        <div class="ip-card ip-deck">
242                        <div class="ip-card-top">
243                        <div class="ip-card-main">
244                        <button type="button" class="ip-card-status is-loading" id="ipCardStatus" data-clean="0" data-flags="VPN" aria-live="polite" aria-haspopup="dialog" aria-controls="detectModal" title="Open the live detection details">
245                            <i aria-hidden="true"></i>
246                            <span>Analysing connection</span>
247                            <small>Running live proxy and VPN detection…</small>
248                            <em class="ip-card-status-scores" hidden></em>
249                            <b class="ip-card-status-more" aria-hidden="true">Details<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg></b>
250                        </button>
251                        <div class="ip-protos">
252                            <div class="ip-proto ok" id="boxV4" onclick="copyProtoIP('v4')">
253                                <button class="ip-proto-copy" type="button" onclick="event.stopPropagation();copyProtoIP('v4')" aria-label="Copy IPv4 address"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg></button>
254                                <div class="ip-proto-header">
255                                    <span class="ip-proto-icon" id="iconV4"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg></span>
256                                    <span class="ip-proto-label">Your IPv4 address</span>
257                                    <span class="ip-proto-info" role="button" onclick="event.stopPropagation();showProtoInfo('v4')" aria-label="What is IPv4?"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg></span>
258                                </div>
259                                <div class="ip-proto-addr" id="valueV4">181.215.65.77</div>
260                            </div>
261                            <div class="ip-proto checking" id="boxV6" onclick="copyProtoIP('v6')">
262                                <button class="ip-proto-copy" type="button" onclick="event.stopPropagation();copyProtoIP('v6')" aria-label="Copy IPv6 address"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg></button>
263                                <div class="ip-proto-header">
264                                    <span class="ip-proto-icon" id="iconV6"><span class="ip-proto-spinner"></span></span>
265                                    <span class="ip-proto-label">Your IPv6 address</span>
266                                    <span class="ip-proto-info" role="button" onclick="event.stopPropagation();showProtoInfo('v6')" aria-label="What is IPv6?"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg></span>
267                                </div>
268                                <div class="ip-proto-addr" id="valueV6">Checking...</div>
269                            </div>
270                        </div>
271                        </div>
272                                                <div class="ip-card-map is-ready" id="homeMiniMap"
273                             data-lat="41.85" data-lng="-87.65"
274                             data-city="Chicago" data-country="United States" data-cc="US">
275                            <div class="ip-card-map-canvas" id="homeMiniMapCanvas" aria-hidden="true" data-rendered="41.850,-87.650"><div class="ip-map-wrap"><svg class="ip-map-img" viewBox="0 0 600 340" width="600" height="340" aria-hidden="true" focusable="false">
275<use href="/svg/world-mini.php?v=3#map"/></svg><span class="ip-map-pulse" style="left:27.66%;top:26.12%"></span><span class="ip-map-marker" style="left:27.66%;top:26.12%"></span><div class="ip-map-chip is-in" style="left:27.66%;top:26.12%;transform:translate(14px,-50%)"><div class="ip-map-chip-header"><span class="ip-map-chip-flag">🇺🇸</span><div><div class="ip-map-chip-name">Chicago</div><div class="ip-map-chip-sub">United States</div></div></div><div class="ip-map-chip-coords"><span class="ip-map-chip-dot"></span>41.850, -87.650</div></div></div></div>
276                            <div class="ip-card-map-caption"><span>Approximate location</span><b id="homeMapCaption">Chicago, Illinois</b></div>
277                        </div>
278                        </div>
279                        <div class="ip-card-details">
280                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>Location</div><div class="ip-detail-value" id="detailLocation">Chicago, Illinois</div></div>
281                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>Country</div><div class="ip-detail-value" id="detailCountry">🇺🇸 United States</div></div>
282                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12.55a11 11 0 0 1 14.08 0"/>
282<path d="M1.42 9a16 16 0 0 1 21.16 0"/><path d="M8.53 16.11a6 6 0 0 1 6.95 0"/><line x1="12" y1="20" x2="12.01" y2="20"/></svg>ISP</div><div class="ip-detail-value" id="detailISP">Datacamp Limited</div></div>
283                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>VPN</div><div class="ip-detail-value ip-flag" id="detailVpn" data-flag="yes">NordVPN</div></div>
284                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 12l2 2 4-4"/><path d="M21 12c0 4.97-4.03 9-9 9s-9-4.03-9-9 4.03-9 9-9c2.5 0 4.77 1.02 6.4 2.66"/><polyline points="22 4 12 14 9 11"/></svg>Proxy</div><div class="ip-detail-value ip-flag" id="detailProxy" data-flag="no">No</div></div>
285                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg>Tor</div><div class="ip-detail-value ip-flag" id="detailTor" data-flag="no">No</div></div>
286                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></svg>ASN</div><div class="ip-detail-value" id="detailASN">AS212238</div></div>
287                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="4" width="18" height="16" rx="2"/><line x1="3" y1="9" x2="21" y2="9"/><circle cx="6.5" cy="6.5" r="0.6" fill="currentColor"/><circle cx="9" cy="6.5" r="0.6" fill="currentColor"/><circle cx="11.5" cy="6.5" r="0.6" fill="currentColor"/></svg>Browser</div><div class="ip-detail-value" id="detailBrowser">Chrome 128</div></div>
288                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>OS</div><div class="ip-detail-value" id="detailOs">—</div></div>
289                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>Timezone</div><div class="ip-detail-value" id="detailTimezone">America/Chicago</div></div>
290                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>Currency</div><div class="ip-detail-value" id="detailCurrency">USD — US Dollar</div></div>
291                            <div class="ip-detail"><div class="ip-detail-label"><svg width="24" height="24" class="ip-detail-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>Local Time</div><div class="ip-detail-value" id="detailLocalTime" data-tz="America/Chicago">20:08:58 <span class="u-muted-medium">(-05:00)</span></div></div>
292                        </div>
293                        <div class="ip-card-actions ip-deck-actions">
294                            <div class="ip-deck-endpoint">
295                                <span class="ip-deck-endpoint-label">This lookup as data</span>
296                                <a href="/api/docs/#lookup" class="ip-deck-endpoint-chip" data-nav title="Open the API reference"><b>GET</b><code>/api/lookup/my</code><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></a>
297                            </div>
298                            <div class="ip-deck-btns">
299                                <button type="button" class="ip-card-action is-primary" onclick="copyIPJSON()" title="Copy this lookup as JSON"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>Copy JSON</button>
300                                <button type="button" class="ip-card-action" onclick="copyIPCurl()" title="Copy a cURL command for this lookup"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>Copy as cURL</button>
301                                <button type="button" class="ip-card-action" onclick="exportJSON()" title="Download this lookup as a .json file"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>Export JSON</button>
302                            </div>
303                        </div>
304                    </div>
305                </div>
306
307                                <div class="auth-backdrop detect-backdrop" id="detectModal" role="dialog" aria-modal="true" aria-labelledby="pdTitle" aria-hidden="true">
308                    <div class="auth-dialog detect-dialog">
309                        <button type="button" class="auth-close" data-detect-close aria-label="Close">
310                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
311                        </button>
312        <div class="pd-card" id="proxyDetectCard" aria-live="polite">
313                                    <div class="pd-header">
314                                        <div class="pd-eyebrow">Live Detection</div>
315                                        <h3 class="pd-title" id="pdTitle">Proxy / VPN Check</h3>
316                                        <p class="pd-subtitle" id="pdSubtitle">Running tests&hellip; <span class="pd-spinner"></span></p>
317                                    </div>
318                                    <div class="pd-scores">
319                                        <div class="pd-score" data-metric="proxy" data-status="pending">
320                                            <div class="pd-score-label">Proxy Score</div>
321                                            <div class="pd-score-value" id="pdProxyScore">&mdash;</div>
322                                            <div class="pd-score-bar"><div class="pd-score-fill" id="pdProxyFill" style="width:0%"></div></div>
323                                        </div>
324                                        <div class="pd-score" data-metric="vpn" data-status="pending">
325                                            <div class="pd-score-label">VPN Score</div>
326                                            <div class="pd-score-value" id="pdVpnScore">&mdash;</div>
327                                            <div class="pd-score-bar"><div class="pd-score-fill" id="pdVpnFill" style="width:0%"></div></div>
328                                        </div>
329                                    </div>
330                                    <div class="pd-tests" id="pdTests"></div>
331                                    <div class="pd-footnote" id="pdFootnote">Powered by live latency probing, TCP/IP fingerprint analysis, and threat-intel cross-check.</div>
332                                </div>
333                    </div>
334                </div>
335
336                <div class="hero-content">
337                    <span class="page-kicker"><i aria-hidden="true"></i><b>Live</b><span class="sep">/</span>Your connection, analysed in-house</span>
338                    <h1 class="hero-title">What is <em>my IP</em>?</h1>
339                    <p class="hero-desc">Your public IP address is what websites, APIs and online services see when you connect — it reveals your approximate location, ISP and network. IPAddress.to gives you instant lookups for any IP, plus DNS, WHOIS and hostname tools, all processed in-house. Run our <a href="/score/">fraud score</a> to check whether an IP is a VPN, proxy, Tor exit or known-abusive host before you trust it.</p>
340                    <div class="hero-actions">
341                        <a href="/score/" class="btn btn-accent">Check Fraud Score</a>
342                        <a href="#api" class="btn btn-secondary">View API Docs</a>
343                    </div>
344                </div>
345
346                                <div class="live-stats" id="liveStats" aria-label="Live usage statistics">
347                    <div class="live-stat">
348                        <div class="live-stat-label"><i aria-hidden="true"></i>Right now</div>
349                        <div class="live-stat-value"><span data-stat="per_min">—</span><small>req / min</small></div>
350                        <div class="live-stat-sub">API requests in the last 60 seconds, refreshed every 15 s.</div>
351                    </div>
352                    <div class="live-stat">
353                        <div class="live-stat-label">Last 24 hours</div>
354                        <div class="live-stat-value"><span data-stat="req_24h">173,589</span></div>
355                        <div class="live-stat-sub">Lookups across IP, DNS, WHOIS, email and fraud score.</div>
356                    </div>
357                    <div class="live-stat">
358                        <div class="live-stat-label">Last 30 days</div>
359                        <div class="live-stat-value"><span data-stat="req_30d">2,646,939</span></div>
360                        <div class="live-stat-sub">Requests served from our own infrastructure, no third-party APIs.</div>
361                    </div>
362                    <div class="live-stat">
363                        <div class="live-stat-label">Threat intelligence</div>
364                        <div class="live-stat-value"><span data-stat="feed_entries">1,342,170</span></div>
365                        <div class="live-stat-sub">Flagged addresses across <b data-stat="feeds">96</b> curated feeds.</div>
366                    </div>
367                </div>
368
369            </div>
370        </section>
371
372        <!-- ═══ Tools bento ═══════════════════════════════════════════
373             Per-card accent comes from --tc / --tc-rgb set on .tool-n*,
374             the corner numeral is drawn from data-idx, and every
375             .tool-scene is a pure-CSS illustration (no images) that only
376             animates on hover. Card order is load-bearing: the accents
377             and the reveal stagger are assigned by these classes. -->
378        <section class="section v2 tools-section" id="tools">
379            <div class="container">
380                <div class="section-header tools-header">
381                    <div class="section-eyebrow">Seven tools, one place</div>
382                    <h2 class="section-title">Pick the lookup you need</h2>
383                    <p class="section-desc">Geolocation, DNS, WHOIS, reputation and email checks &mdash; every one answered from our own data, and every one has a free JSON endpoint behind it.</p>
384                </div>
385
386                <div class="tools-bento">
387
388                    <a class="tool-card tool-n1 tool-wide" href="/lookup/" data-nav data-idx="01" data-reveal>
389                        <span class="tool-text">
390                            <span class="tool-head">
391                                <span class="tool-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg></span>
392                                <h3 class="tool-title">IP Lookup</h3>
393                            </span>
394                            <span class="tool-desc">Geolocation, ASN, ISP and reverse DNS for any IPv4, IPv6 or hostname &mdash; with a live map of where it lands.</span>
395                            <span class="tool-go">Try it <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></span>
396                        </span>
397                        <span class="tool-scene ts-lookup" aria-hidden="true">
398                            <span class="ts-globe"><i class="ts-mer"></i><i class="ts-mer"></i><i class="ts-par"></i><i class="ts-par"></i></span>
399                            <span class="ts-pin"><i class="ts-pin-ring"></i><i class="ts-pin-dot"></i></span>
400                            <span class="ts-chip ts-chip-a">Mountain View</span>
401                            <span class="ts-chip ts-chip-b">AS15169</span>
402                        </span>
403                    </a>
404
405                    <a class="tool-card tool-n2" href="/" data-nav data-idx="02" data-reveal>
406                        <span class="tool-text">
407                            <span class="tool-head">
408                                <span class="tool-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></span>
409                                <h3 class="tool-title">My IP</h3>
410                            </span>
411                            <span class="tool-desc">Your public address on both stacks at once, with the browser and network we see.</span>
412                            <span class="tool-go">Try it <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></span>
413                        </span>
414                        <span class="tool-scene ts-myip" aria-hidden="true">
415                            <span class="ts-addr"><i class="ts-tag">IPv4</i><b>203.0.113.42</b><i class="ts-live"></i></span>
416                            <span class="ts-addr ts-addr-2"><i class="ts-tag">IPv6</i><b>2001:db8::1</b><i class="ts-live"></i></span>
417                        </span>
418                    </a>
419
420                    <a class="tool-card tool-n3" href="/dns/" data-nav data-idx="03" data-reveal>
421                        <span class="tool-text">
422                            <span class="tool-head">
423                                <span class="tool-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></svg></span>
424                                <h3 class="tool-title">DNS Checker</h3>
425                            </span>
426                            <span class="tool-desc">Watch a record propagate across 32 resolvers worldwide, one row per server.</span>
427                            <span class="tool-go">Try it <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></span>
428                        </span>
429                        <span class="tool-scene ts-dns" aria-hidden="true">
430                            <span class="ts-srv"><i class="ts-bar"></i><i class="ts-dot ok"></i></span>
431                            <span class="ts-srv"><i class="ts-bar"></i><i class="ts-dot ok"></i></span>
432                            <span class="ts-srv"><i class="ts-bar"></i><i class="ts-dot wait"></i></span>
433                            <span class="ts-srv"><i class="ts-bar"></i><i class="ts-dot ok"></i></span>
434                        </span>
435                    </a>
436
437                    <a class="tool-card tool-n4" href="/whois/" data-nav data-idx="04" data-reveal>
438                        <span class="tool-text">
439                            <span class="tool-head">
440                                <span class="tool-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg></span>
441                                <h3 class="tool-title">WHOIS</h3>
442                            </span>
443                            <span class="tool-desc">Registrar, owner contacts, network range and the dates a domain or IP was registered.</span>
444                            <span class="tool-go">Try it <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></span>
445                        </span>
446                        <span class="tool-scene ts-whois" aria-hidden="true">
447                            <span class="ts-doc">
448                                <i class="ts-ln w1"></i><i class="ts-ln w2"></i><i class="ts-ln w3"></i><i class="ts-ln w4"></i>
449                                <i class="ts-seal"></i>
450                            </span>
451                        </span>
452                    </a>
453
454                    <a class="tool-card tool-n5" href="/score/" data-nav data-idx="05" data-reveal>
455                        <span class="tool-text">
456                            <span class="tool-head">
457                                <span class="tool-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg></span>
458                                <h3 class="tool-title">Fraud Score</h3>
459                            </span>
460                            <span class="tool-desc">VPN, proxy, Tor, datacenter and blocklist signals folded into one 0&ndash;100 risk value.</span>
461                            <span class="tool-go">Try it <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></span>
462                        </span>
463                        <span class="tool-scene ts-score" aria-hidden="true">
464                            <span class="ts-dial"><b>87</b></span>
465                            <span class="ts-flags"><i></i><i></i><i></i></span>
466                        </span>
467                    </a>
468
469                    <a class="tool-card tool-n6" href="/email/" data-nav data-idx="06" data-reveal>
470                        <span class="tool-text">
471                            <span class="tool-head">
472                                <span class="tool-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="m22 7-10 5L2 7"/></svg></span>
473                                <h3 class="tool-title">Email Check</h3>
474                            </span>
475                            <span class="tool-desc">MX, SPF and DMARC in one pass, plus disposable and role-based mailbox detection.</span>
476                            <span class="tool-go">Try it <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></span>
477                        </span>
478                        <span class="tool-scene ts-email" aria-hidden="true">
479                            <span class="ts-chk"><i class="ts-tick"></i>MX</span>
480                            <span class="ts-chk"><i class="ts-tick"></i>SPF</span>
481                            <span class="ts-chk"><i class="ts-tick"></i>DMARC</span>
482                        </span>
483                    </a>
484
485                    <a class="tool-card tool-n7 tool-full" href="/api/docs/" data-nav data-idx="07" data-reveal>
486                        <span class="tool-text">
487                            <span class="tool-head">
488                                <span class="tool-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg></span>
489                                <h3 class="tool-title">Free JSON API</h3>
490                            </span>
491                            <span class="tool-desc">Every tool on this page is one GET request away &mdash; no key, no signup, CORS open. Same data, same speed, straight into your code.</span>
492                            <span class="tool-go">Read the docs <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></span>
493                        </span>
494                        <span class="tool-scene ts-api" aria-hidden="true">
495                            <span class="ts-term">
496                                <i class="ts-term-bar"><em></em><em></em><em></em></i>
497                                <code class="ts-cmd"><span class="ts-verb">GET</span> /api/lookup/8.8.8.8</code>
498                                <code class="ts-out"><span class="ts-k">"country"</span>: <span class="ts-s">"United States"</span>,</code>
499                                <code class="ts-out"><span class="ts-k">"asn"</span>: <span class="ts-n">15169</span>,</code>
500                                <code class="ts-out"><span class="ts-k">"rdns"</span>: <span class="ts-s">"dns.google"</span></code>
501                            </span>
502                        </span>
503                    </a>
504
505                </div>
506            </div>
507        </section>
508
509        <section class="section v2 api-section" id="api">
510            <div class="container">
511                <div class="section-header">
512                    <div class="section-eyebrow">REST API</div>
513                    <h2 class="section-title">Simple, private API</h2>
514                    <p class="section-desc">All lookups are processed locally using our own geolocation database. No data is sent to third parties.</p>
515                    <a class="api-ref-link" href="/api/docs/">View full API reference <span class="api-ref-arrow" aria-hidden="true">&rarr;</span></a>
516                </div>
517                <div class="endpoints-grid">
518
519                    <!-- GET /api/lookup/my -->
520                    <div class="endpoint open">
521                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
522                            <span class="method method-get">GET</span>
523                            <span class="endpoint-path">/api/lookup/my</span>
524                            <span class="endpoint-desc">Get your own IP info</span>
525                            <span class="endpoint-toggle"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg></span>
526                        </div>
527                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
528                            <div class="code-tabs">
529                                <button class="code-tab active" onclick="switchTab(this,'curl1')">cURL</button>
530                                <button class="code-tab" onclick="switchTab(this,'js1')">JavaScript</button>
531                                <button class="code-tab" onclick="switchTab(this,'py1')">Python</button>
532                                <button class="code-tab" onclick="switchTab(this,'php1')">PHP</button>
533                                <button class="code-tab" onclick="switchTab(this,'cs1')">C#</button>
534                                <button class="code-tab" onclick="switchTab(this,'go1')">Go</button>
535                                <button class="code-tab" onclick="switchTab(this,'rb1')">Ruby</button>
536                                <button class="code-tab" onclick="switchTab(this,'java1')">Java</button>
537                                <button class="code-tab" onclick="switchTab(this,'perl1')">Perl</button>
538                                <button class="code-tab" onclick="switchTab(this,'rust1')">Rust</button>
539                            </div>
540                            <div id="curl1" class="code-example active"><div class="code-block"><div class="code-header"><span class="code-lang">cURL</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>curl "https://ipaddress.to/api/lookup/my"</pre></div></div></div>
541                            <div id="js1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">JavaScript</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">const</span> res = <span class="keyword">await</span> fetch(<span class="string">'https://ipaddress.to/api/lookup/my'</span>);
542<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
543console.log(data);</pre></div></div></div>
544                            <div id="py1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Python</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">
544import</span> requests
545
546data = requests.get(<span class="string">'https://ipaddress.to/api/lookup/my'</span>).json()
547print(data)</pre></div></div></div>
548                            <div id="php1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">PHP</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>$data = json_decode(
549    file_get_contents(<span class="string">'https://ipaddress.to/api/lookup/my'</span>),
550    <span class="keyword">true</span>
551);
552print_r($data);</pre></div></div></div>
553                            <div id="cs1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">C#</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">using</span> var client = <span class="keyword">new</span> HttpClient();
554<span class="keyword">var</span> json = <span class="keyword">await</span> client.GetStringAsync(<span class="string">"https://ipaddress.to/api/lookup/my"</span>);
555Console.WriteLine(json);</pre></div></div></div>
556                            <div id="go1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Go</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>resp, _ := http.Get(<span class="string">"https://ipaddress.to/api/lookup/my"</span>)
557body, _ := io.ReadAll(resp.Body)
558fmt.Println(<span class="keyword">string</span>(body))</pre></div></div></div>
559                            <div id="rb1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Ruby</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">require</span> <span class="string">'net/http'</span>
560<span class="keyword">require</span> <span class="string">'json'</span>
561
562data = JSON.parse(Net::HTTP.get(URI(<span class="string">'https://ipaddress.to/api/lookup/my'</span>)))
563puts data</pre></div></div></div>
564                            <div id="java1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Java</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>HttpClient client = HttpClient.newHttpClient();
565HttpRequest req = HttpRequest.newBuilder()
566    .uri(URI.create(<span class="string">"https://ipaddress.to/api/lookup/my"</span>)).build();
567String body = client.send(req, BodyHandlers.ofString()).body();
568System.out.println(body);</pre></div></div></div>
569                            <div id="perl1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Perl</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">
569use</span> LWP::Simple;
570<span class="keyword">use</span> JSON;
571
572<span class="keyword">my</span> $data = decode_json(get(<span class="string">'https://ipaddress.to/api/lookup/my'</span>));
573print $data->{ip};</pre></div></div></div>
574                            <div id="rust1" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Rust</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">let</span> body = reqwest::get(<span class="string">"https://ipaddress.to/api/lookup/my"</span>)
575    .<span class="keyword">await</span>?.text().<span class="keyword">await</span>?;
576println!(<span class="string">"{}"</span>, body);</pre></div></div></div>
577                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
578  <span class="key">"success"</span>: <span class="keyword">true</span>,
579  <span class="key">"ip"</span>: <span class="string">"203.45.167.89"</span>,
580  <span class="key">"type"</span>: <span class="string">"IPv4"</span>,
581  <span class="key">"country"</span>: <span class="string">"United States"</span>,
582  <span class="key">"country_code"</span>: <span class="string">"US"</span>,
583  <span class="key">"region"</span>: <span class="string">"California"</span>,
584  <span class="key">"city"</span>: <span class="string">"San Francisco"</span>,
585  <span class="key">"latitude"</span>: <span class="number">37.7749</span>,
586  <span class="key">"longitude"</span>: <span class="number">-122.4194</span>,
587  <span class="key">"timezone"</span>: <span class="string">"America/Los_Angeles"</span>,
588  <span class="key">"isp"</span>: <span class="string">"Cloudflare, Inc."</span>,
589  <span class="key">"asn"</span>: <span class="string">"AS13335"</span>
590}</pre></div></div>
591                        </div></div></div>
592                    </div>
593
594                    <!-- GET /api/{address} -->
595                    <div class="endpoint">
596                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
597                            <span class="method method-get">GET</span>
598                            <span class="endpoint-path">/api/lookup/<span class="param">{ip_or_hostname}</span></span>
599                            <span class="endpoint-desc">Lookup an IP address or hostname</span>
600                            <span class="endpoint-toggle"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg></span>
601                        </div>
602                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
603                            <div class="params-grid">
604                                <div class="param-row"><div class="param-name">ip_or_hostname <span class="param-tag param-optional">optional</span></div><div class="param-type">string</div><div class="param-desc">IPv4/IPv6 address or hostname. Omit to get your own IP info.</div></div>
605                            </div>
606                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Example</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>curl "https://ipaddress.to/api/lookup/8.8.8.8"</pre></div></div>
607                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
608  <span class="key">"success"</span>: <span class="keyword">true</span>,
609  <span class="key">"ip"</span>: <span class="string">"8.8.8.8"</span>,
610  <span class="key">"type"</span>: <span class="string">"IPv4"</span>,
611  <span class="key">"rdns"</span>: <span class="string">"dns.google"</span>,
612  <span class="key">"location"</span>: {
613    <span class="key">"continent"</span>: <span class="string">"NA"</span>,
614    <span class="key">"continent_name"</span>: <span class="string">"North America"</span>,
615    <span class="key">"country"</span>: <span class="string">"United States"</span>,
616    <span class="key">"country_code"</span>: <span class="string">"US"</span>,
617    <span class="key">"state"</span>: <span class="string">"California"</span>,
618    <span class="key">"city"</span>: <span class="string">
618"Mountain View"</span>,
619    <span class="key">"latitude"</span>: <span class="number">37.422</span>,
620    <span class="key">"longitude"</span>: <span class="number">-122.085</span>,
621    <span class="key">"timezone"</span>: <span class="string">"America/Los_Angeles"</span>,
622    <span class="key">"is_eu_member"</span>: <span class="keyword">false</span>,
623    <span class="key">"calling_code"</span>: <span class="string">"1"</span>,
624    <span class="key">"capital"</span>: <span class="string">"Washington, D.C."</span>,
625    <span class="key">"languages"</span>: <span class="string">"English"</span>,
626    <span class="key">"country_tld"</span>: <span class="string">".us"</span>,
627    <span class="key">"currency"</span>: { <span class="key">"code"</span>: <span class="string">"USD"</span>, <span class="key">"name"</span>: <span class="string">"US Dollar"</span> }
628  },
629  <span class="key">"asn"</span>: {
630    <span class="key">"asn"</span>: <span class="number">15169</span>,
631    <span class="key">"descr"</span>: <span class="string">"Google LLC"</span>,
632    <span class="key">"country"</span>: <span class="string">"US"</span>,
633    <span class="key">"org"</span>: <span class="string">"Google LLC"</span>
634  },
635  <span class="key">"company"</span>: { <span class="key">"name"</span>: <span class="string">"Google LLC"</span> },
636  <span class="key">"is_vpn"</span>: <span class="keyword">false</span>,
637  <span class="key">"is_proxy"</span>: <span class="keyword">false</span>,
638  <span class="key">"is_tor"</span>: <span class="keyword">false</span>,
639  <span class="key">"is_hosting"</span>: <span class="keyword">false</span>,
640  <span class="key">"vpn_provider"</span>: <span class="keyword">null</span>
641}</pre></div></div>
642                        </div></div></div>
643                    </div>
644
645                    <!-- GET /api/whois/ -->
646                    <div class="endpoint">
647                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
648                            <span class="method method-get">GET</span>
649                            <span class="endpoint-path">/api/whois/<span class="param">{ip_or_domain}</span></span>
650                            <span class="endpoint-desc">WHOIS lookup (subdomains auto-stripped to root domain)</span>
651                            <span class="endpoint-toggle"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg></span>
652                        </div>
653                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
654                            <div class="params-grid">
655                                <div class="param-row"><div class="param-name">query <span class="param-tag param-required">required</span></div><div class="param-type">string</div><div class="param-desc">IP address (v4/v6) or domain name to query</div></div>
656                            </div>
657                            <div class="u-mt-16 code-tabs">
658                                <button class="code-tab active" onclick="switchTab(this,'curlW')">cURL</button>
659                                <button class="code-tab" onclick="switchTab(this,'jsW')">JavaScript</button>
660                                <button class="code-tab" onclick="switchTab(this,'pyW')">Python</button>
661                                <button class="code-tab" onclick="switchTab(this,'phpW')">PHP</button>
662                                <button class="code-tab" onclick="switchTab(this,'csW')">C#</button>
663                                <button class="code-tab" onclick="switchTab(this,'goW')">Go</button>
664                                <button class="code-tab" onclick="switchTab(this,'perlW')">Perl</button>
665                            </div>
666                            <div id="curlW" class="code-example active"><div class="code-block"><div class="code-header"><span class="code-lang">cURL</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>curl "https://ipaddress.to/api/whois/google.com"</pre></div></div></div>
667                            <div id="jsW" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">JavaScript</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">const</span> res = <span class="keyword">await</span> fetch(<span class="string">'https://ipaddress.to/api/whois/google.com'</span>);
668<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
669console.log(data.parsed.registrar); <span class="comment">
669// "MarkMonitor Inc."</span></pre></div></div></div>
670                            <div id="pyW" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Python</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">import</span> requests
671
672data = requests.get(<span class="string">'https://ipaddress.to/api/whois/google.com'</span>).json()
673print(data[<span class="string">'parsed'</span>][<span class="string">'registrar'</span>])</pre></div></div></div>
674                            <div id="phpW" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">PHP</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>$data = json_decode(
675    file_get_contents(<span class="string">'https://ipaddress.to/api/whois/google.com'</span>),
676    <span class="keyword">true</span>
677);
678echo $data[<span class="string">'parsed'</span>][<span class="string">'registrar'</span>];</pre></div></div></div>
679                            <div id="csW" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">C#</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">using</span> var client = <span class="keyword">new</span> HttpClient();
680<span class="keyword">var</span> json = <span class="keyword">await</span> client.GetStringAsync(
681    <span class="string">"https://ipaddress.to/api/whois/google.com"</span>);
682Console.WriteLine(json);</pre></div></div></div>
683                            <div id="goW" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Go</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>resp, _ := http.Get(<span class="string">"https://ipaddress.to/api/whois/google.com"</span>)
684body, _ := io.ReadAll(resp.Body)
685fmt.Println(<span class="keyword">string</span>(body))</pre></div></div></div>
686                            <div id="perlW" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Perl</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">
686use</span> LWP::Simple;
687<span class="keyword">use</span> JSON;
688
689<span class="keyword">my</span> $data = decode_json(get(<span class="string">'https://ipaddress.to/api/whois/google.com'</span>));
690print $data->{parsed}{registrar};</pre></div></div></div>
691                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response (domain)</span></div><div class="code-content"><pre>{
692  <span class="key">"success"</span>: <span class="keyword">true</span>,
693  <span class="key">"query"</span>: <span class="string">"google.com"</span>,
694  <span class="key">"type"</span>: <span class="string">"domain"</span>,
695  <span class="key">"found"</span>: <span class="keyword">true</span>,
696  <span class="key">"parsed"</span>: {
697    <span class="key">"domain_name"</span>: <span class="string">"GOOGLE.COM"</span>,
698    <span class="key">"registrar"</span>: <span class="string">"MarkMonitor Inc."</span>,
699    <span class="key">"registrar_url"</span>: <span class="string">"https://rdap.markmonitor.com/rdap/domain/GOOGLE.COM"</span>,
700    <span class="key">"registrar_iana_id"</span>: <span class="string">"292"</span>,
701    <span class="key">"creation_date"</span>: <span class="string">"1997-09-15T04:00:00Z"</span>,
702    <span class="key">"expiry_date"</span>: <span class="string">"2028-09-14T04:00:00Z"</span>,
703    <span class="key">"updated_date"</span>: <span class="string">"2026-05-11T18:51:14Z"</span>,
704    <span class="key">"status"</span>: [<span class="string">"client delete prohibited"</span>, <span class="string">"client transfer prohibited"</span>],
705    <span class="key">"nameservers"</span>: [<span class="string">"ns1.google.com"</span>, <span class="string">"ns2.google.com"</span>],
706    <span class="key">"dnssec"</span>: <span class="string">"unsigned"</span>,
707    <span class="key">"abuse_email"</span>: <span class="string">"[email protected]"</span>,
708    <span class="key">"abuse_phone"</span>: <span class="string">"tel:+1.2086851750"</span>
709  },
710  <span class="key">"source"</span>: <span class="string">"registry"</span>,
711  <span class="key">"duration_ms"</span>: <span class="number">342</span>
712}</pre></div></div>
713                        </div></div></div>
714                    </div>
715
716                    <!-- GET /api/dns/{type}/{domain} -->
717                    <div class="endpoint">
718                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
719                            <span class="method method-get">GET</span>
720                            <span class="endpoint-path">/api/dns/<span class="param">{type}</span>/<span class="param">{domain}</span></span>
721                            <span class="endpoint-desc">DNS propagation checker across 32 global servers</span>
722                            <span class="endpoint-toggle"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg></span>
723                        </div>
724                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
725                            <div class="params-grid">
726                                <div class="param-row"><div class="param-name">type <span class="param-tag param-required">required</span></div><div class="param-type">string</div><div class="param-desc">DNS record type: A, AAAA, CNAME, MX, NS, TXT, SOA, PTR, SRV, CAA</div></div>
727                                <div class="param-row"><div class="param-name">domain <span class="param-tag param-required">required</span></div><div class="param-type">string</div><div class="param-desc">Domain to query (e.g., google.com)</div></div>
728                                <div class="param-row"><div class="param-name">server <span class="param-tag param-optional">optional</span></div><div class="param-type">string</div><div class="param-desc">Query a single DNS server IP instead of all 32. Pass as query param: ?server=8.8.8.8</div></div>
729                            </div>
730                            <div class="code-tabs">
731                                <button class="code-tab active" onclick="switchTab(this,'curlD')">cURL</button>
732                                <button class="code-tab" onclick="switchTab(this,'jsD')">JavaScript</button>
733                                <button class="code-tab" onclick="switchTab(this,'pyD')">Python</button>
734                            </div>
735                            <div id="curlD" class="code-example active"><div class="code-block"><div class="code-header"><span class="code-lang">cURL</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>curl "https://ipaddress.to/api/dns/a/google.com"</pre></div></div></div>
736                            <div id="jsD" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">JavaScript</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">const</span> res = <span class="keyword">await</span> fetch(<span class="string">'https://ipaddress.to/api/dns/mx/google.com'</span>);
737<span class="keyword">const</span> reader = res.body.getReader();
738<span class="comment">// Streams NDJSON — one result per line per server</span></pre></div></div></div>
739                            <div id="pyD" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Python</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">
739import</span> requests, json
740r = requests.get(<span class="string">'https://ipaddress.to/api/dns/ns/google.com'</span>, stream=True)
741<span class="keyword">for</span> line <span class="keyword">in</span> r.iter_lines():
742    print(json.loads(line))</pre></div></div></div>
743                            <p class="u-note endpoint-note">Response is NDJSON (streaming). Each line is a JSON object: <code>start</code>, <code>result</code> (×32 servers), then <code>done</code> with propagation summary.</p>
744                        </div></div></div>
745                    </div>
746
747                    <!-- GET /api/resolve/ -->
748                    <div class="endpoint">
749                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
750                            <span class="method method-get">GET</span>
751                            <span class="endpoint-path">/api/resolve/<span class="param">{hostname}</span></span>
752                            <span class="endpoint-desc">Resolve hostname to IP addresses</span>
753                            <span class="endpoint-toggle"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg></span>
754                        </div>
755                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
756                            <div class="params-grid">
757                                <div class="param-row"><div class="param-name">hostname <span class="param-tag param-required">required</span></div><div class="param-type">string</div><div class="param-desc">Hostname to resolve (e.g., github.com)</div></div>
758                            </div>
759                            <div class="u-mt-16 code-tabs">
760                                <button class="code-tab active" onclick="switchTab(this,'curlH')">cURL</button>
761                                <button class="code-tab" onclick="switchTab(this,'jsH')">JavaScript</button>
762                                <button class="code-tab" onclick="switchTab(this,'pyH')">Python</button>
763                                <button class="code-tab" onclick="switchTab(this,'phpH')">PHP</button>
764                                <button class="code-tab" onclick="switchTab(this,'csH')">C#</button>
765                                <button class="code-tab" onclick="switchTab(this,'goH')">Go</button>
766                                <button class="code-tab" onclick="switchTab(this,'perlH')">Perl</button>
767                            </div>
768                            <div id="curlH" class="code-example active"><div class="code-block"><div class="code-header"><span class="code-lang">cURL</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>curl "https://ipaddress.to/api/resolve/github.com"</pre></div></div></div>
769                            <div id="jsH" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">JavaScript</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">const</span> res = <span class="keyword">await</span> fetch(<span class="string">'https://ipaddress.to/api/resolve/github.com'</span>);
770<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
771console.log(data.a); <span class="comment">// ["140.82.121.3"]</span></pre></div></div></div>
772                            <div id="pyH" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Python</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">import</span> requests
773
774data = requests.get(<span class="string">'https://ipaddress.to/api/resolve/github.com'</span>).json()
775<span class="keyword">for</span> ip <span class="keyword">in</span>
775 data[<span class="string">'a'</span>]:
776    print(ip)</pre></div></div></div>
777                            <div id="phpH" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">PHP</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>$data = json_decode(
778    file_get_contents(<span class="string">'https://ipaddress.to/api/resolve/github.com'</span>),
779    <span class="keyword">true</span>
780);
781print_r($data[<span class="string">'a'</span>]); <span class="comment">// IPv4 addresses</span></pre></div></div></div>
782                            <div id="csH" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">C#</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">using</span> var client = <span class="keyword">new</span> HttpClient();
783<span class="keyword">var</span> json = <span class="keyword">await</span> client.GetStringAsync(
784    <span class="string">"https://ipaddress.to/api/resolve/github.com"</span>);
785Console.WriteLine(json);</pre></div></div></div>
786                            <div id="goH" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Go</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>resp, _ := http.Get(<span class="string">"https://ipaddress.to/api/resolve/github.com"</span>)
787body, _ := io.ReadAll(resp.Body)
788fmt.Println(<span class="keyword">string</span>(body))</pre></div></div></div>
789                            <div id="perlH" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Perl</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">
789use</span> LWP::Simple;
790<span class="keyword">use</span> JSON;
791
792<span class="keyword">my</span> $data = decode_json(get(<span class="string">'https://ipaddress.to/api/resolve/github.com'</span>));
793print join(<span class="string">"\n"</span>, @{$data->{a}});</pre></div></div></div>
794                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
795  <span class="key">"success"</span>: <span class="keyword">true</span>,
796  <span class="key">"hostname"</span>: <span class="string">"github.com"</span>,
797  <span class="key">"a"</span>: [<span class="string">"140.82.121.3"</span>],
798  <span class="key">"aaaa"</span>: [],
799  <span class="key">"cname"</span>: [],
800  <span class="key">"reverse"</span>: {
801    <span class="string">"140.82.121.3"</span>: <span class="string">"lb-140-82-121-3-iad.github.com"</span>
802  },
803  <span class="key">"total_ips"</span>: <span class="number">1</span>,
804  <span class="key">"has_ipv4"</span>: <span class="keyword">true</span>,
805  <span class="key">"has_ipv6"</span>: <span class="keyword">false</span>,
806  <span class="key">"duration_ms"</span>: <span class="number">87</span>
807}</pre></div></div>
808                        </div></div></div>
809                    </div>
810
811                    <!-- GET /api/score/{ip} -->
812                    <div class="endpoint">
813                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
814                            <span class="method method-get">GET</span>
815                            <span class="endpoint-path">/api/score/<span class="param">{ip_or_hostname}</span></span>
816                            <span class="endpoint-desc">IP fraud risk score with threat indicators</span>
817                            <span class="endpoint-toggle"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg></span>
818                        </div>
819                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
820                            <div class="params-grid">
821                                <div class="param-row"><div class="param-name">ip_or_hostname <span class="param-tag param-optional">optional</span></div><div class="param-type">string</div><div class="param-desc">IP address or hostname to score. Use "my" or omit for your own IP.</div></div>
822                            </div>
823                            <div class="u-mt-16 code-tabs">
824                                <button class="code-tab active" onclick="switchTab(this,'curlS')">cURL</button>
825                                <button class="code-tab" onclick="switchTab(this,'jsS')">JavaScript</button>
826                                <button class="code-tab" onclick="switchTab(this,'pyS')">Python</button>
827                                <button class="code-tab" onclick="switchTab(this,'phpS')">PHP</button>
828                            </div>
829                            <div id="curlS" class="code-example active"><div class="code-block"><div class="code-header"><span class="code-lang">cURL</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>curl "https://ipaddress.to/api/score/134.199.214.1"</pre></div></div></div>
830                            <div id="jsS" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">JavaScript</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">const</span> res = <span class="keyword">await</span> fetch(<span class="string">'https://ipaddress.to/api/score/134.199.214.1'</span>);
831<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
832console.log(data.score, data.risk, data.checks.hosting_asn);
833<span class="comment">// 54 "high" true</span></pre></div></div></div>
834                            <div id="pyS" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Python</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">
834import</span> requests
835
836data = requests.get(<span class="string">'https://ipaddress.to/api/score/134.199.214.1'</span>).json()
837print(f<span class="string">"Score: {data['score']}/100 ({data['risk']})"</span>)
838print(f<span class="string">"Hosting: {data['checks']['hosting_asn']}"</span>)</pre></div></div></div>
839                            <div id="phpS" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">PHP</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>$data = json_decode(
840    file_get_contents(<span class="string">'https://ipaddress.to/api/score/134.199.214.1'</span>),
841    <span class="keyword">true</span>
842);
843echo $data[<span class="string">'score'</span>] . <span class="string">' — '</span> . $data[<span class="string">'risk'</span>];</pre></div></div></div>
844                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
845  <span class="key">"success"</span>: <span class="keyword">true</span>,
846  <span class="key">"ip"</span>: <span class="string">"134.199.214.1"</span>,
847  <span class="key">"score"</span>: <span class="number">54</span>,
848  <span class="key">"risk"</span>: <span class="string">"high"</span>,
849  <span class="key">"vpn_provider"</span>: <span class="keyword">null</span>,
850  <span class="key">"rdns"</span>: <span class="keyword">null</span>,
851  <span class="key">"location"</span>: {
852    <span class="key">"country"</span>: <span class="string">"United States"</span>,
853    <span class="key">"country_code"</span>: <span class="string">"US"</span>,
854    <span class="key">"city"</span>: <span class="string">"Santa Clara"</span>,
855    <span class="key">"currency"</span>: { <span class="key">"code"</span>: <span class="string">"USD"</span>, <span class="key">"name"</span>: <span class="string">"US Dollar"</span> }
856  },
857  <span class="key">"asn"</span>: { <span class="key">"asn"</span>: <span class="number">14061</span>, <span class="key">"org"</span>: <span class="string">"DigitalOcean, LLC"</span> },
858  <span class="key">"company"</span>: { <span class="key">"name"</span>: <span class="string">"DigitalOcean, LLC"</span>, <span class="key">"type"</span>: <span class="string">"hosting"</span> },
859  <span class="key">"checks"</span>: {
860    <span class="key">"hosting_asn"</span>: <span class="keyword">true</span>,
861    <span class="key">"datacenter_blocklist"</span>: <span class="keyword">true</span>,
862    <span class="key">"vpn_detected"</span>: <span class="keyword">false</span>,
863    <span class="key">"tor_exit"</span>: <span class="keyword">false</span>,
864    <span class="key">"blocklist_listed"</span>: <span class="keyword">true</span>,
865    <span class="key">"blocklist_count"</span>: <span class="number">3</span>,
866    <span class="key">"has_rdns"</span>: <span class="keyword">false</span>
867  },
868  <span class="key">"factors"</span>: [
869    { <span class="key">"name"</span>: <span class="string">"Hosting/Datacenter ASN"</span>, <span class="key">"impact"</span>: <span class="string">"medium"</span> },
870    { <span class="key">"name"</span>: <span class="string">"No Reverse DNS"</span>, <span class="key">"impact"</span>: <span class="string">"low"</span> },
871    { <span class="key">"name"</span>: <span class="string">"Datacenter Confirmed"</span>, <span class="key">"impact"</span>: <span class="string">"medium"</span> },
872    { <span class="key">"name"</span>: <span class="string">"Threat Intelligence"</span>, <span class="key">"impact"</span>: <span class="string">"high"</span> }
873  ],
874  <span class="key">"duration_ms"</span>: <span class="number">45</span>
875}</pre></div></div>
876                        </div></div></div>
877                    </div>
878
879                    <!-- GET /api/email/{email_or_domain} -->
880                    <div class="endpoint">
881                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
882                            <span class="method method-get">
882GET</span>
883                            <span class="endpoint-path">/api/email/<span class="param">{email_or_domain}</span></span>
884                            <span class="endpoint-desc">Email auth score (MX, SPF, DMARC, disposable)</span>
885                            <span class="endpoint-toggle"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg></span>
886                        </div>
887                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
888                            <div class="params-grid">
889                                <div class="param-row"><div class="param-name">email_or_domain</div><div class="param-type">string</div><div class="param-desc">Email address or domain to score. Omit for a sample of known disposable domains.</div></div>
890                            </div>
891                            <div class="u-mt-16 code-tabs">
892                                <button class="code-tab active" onclick="switchTab(this,'curlE')">cURL</button>
893                                <button class="code-tab" onclick="switchTab(this,'jsE')">JavaScript</button>
894                                <button class="code-tab" onclick="switchTab(this,'pyE')">Python</button>
895                                <button class="code-tab" onclick="switchTab(this,'phpE')">PHP</button>
896                            </div>
897                            <div id="curlE" class="code-example active"><div class="code-block"><div class="code-header"><span class="code-lang">cURL</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>curl "https://ipaddress.to/api/email/[email protected]"</pre></div></div></div>
898                            <div id="jsE" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">JavaScript</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">const</span> res = <span class="keyword">await</span> fetch(<span class="string">'https://ipaddress.to/api/email/[email protected]'</span>);
899<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
900console.log(data.score, data.rating, data.checks.disposable);
901<span class="comment">// 100 "trusted" false</span></pre></div></div></div>
902                            <div id="pyE" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">Python</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre><span class="keyword">import</span> requests
903
904data = requests.get(<span class="string">'https://ipaddress.to/api/email/[email protected]'</span>).json()
905print(f<span class="string">"Score: {data['score']}/100 ({data['rating']})"</span>)
906print(f<span class="string">"Disposable: {data['checks']['disposable']}"</span>)</pre></div></div></div>
907                            <div id="phpE" class="code-example"><div class="code-block"><div class="code-header"><span class="code-lang">PHP</span><button class="code-copy" onclick="copyCode(this)">Copy</button></div><div class="code-content"><pre>$data = json_decode(
908    file_get_contents(<span class="string">'https://ipaddress.to/api/email/[email protected]'</span>),
909    <span class="keyword">true</span>
910);
911echo $data[<span class="string">'score'</span>] . <span class="string">' — '</span> . $data[<span class="string">'rating'</span>];</pre></div></div></div>
912                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
913  <span class="key">"success"</span>: <span class="keyword">true</span>,
914  <span class="key">"query"</span>: <span class="string">"[email protected]"</span>,
915  <span class="key">"email"</span>: <span class="string">"[email protected]"</span>,
916  <span class="key">"domain"</span>: <span class="string">"gmail.com"</span>,
917  <span class="key">"target_type"</span>: <span class="string">"email"</span>,
918  <span class="key">"score"</span>: <span class="number">100</span>,
919  <span class="key">"rating"</span>: <span class="string">"trusted"</span>,
920  <span class="key">"score_breakdown"</span>: { <span class="key">"deliverability"</span>: <span class="number">40</span>, <span class="key">"authentication"</span>: <span class="number">40</span>, <span class="key">"reputation"</span>: <span class="number">20</span> },
921  <span class="key">"checks"</span>: {
922    <span class="key">"has_mx"</span>: <span class="keyword">true</span>,
923    <span class="key">"spf"</span>: <span class="keyword">true</span>,
924    <span class="key">"dmarc"</span>: <span class="keyword">true</span>,
925    <span class="key">"disposable"</span>: <span class="keyword">false</span>,
926    <span class="key">"role_based"</span>: <span class="keyword">false</span>,
927    <span class="key">"free_provider"</span>: <span class="keyword">true</span>
928  },
929  <span class="key">"is_disposable"</span>: <span class="keyword">false</span>,
930  <span class="key">"duration_ms"</span>: <span class="number">182</span>
931}</pre></div></div>
932                        </div></div></div>
933                    </div>
934                </div>
935                <div class="endpoints-footer">Looking for every parameter, error code and response schema? <a href="/api/docs/">View the full API reference &rarr;</a></div>
936            </div>
937        </section>
938
939        <section class="section v2 playground-section" id="playground">
940            <div class="container">
941                <div class="section-header">
942                    <div class="section-eyebrow">Try it live</div>
943                    <h2 class="section-title">API Playground</h2>
944                    <p class="section-desc">Test all APIs directly in your browser.</p>
945                </div>
946                <div class="playground">
947                    <div class="playground-header"><div class="playground-title"><div class="live-dot"></div>Live Testing</div></div>
948                    <div class="playground-body">
949                        <div class="playground-api-tabs">
950                            <button class="playground-api-tab active" onclick="switchPlayground('ip')" data-pg="ip">Lookup</button>
951                            <button class="playground-api-tab" onclick="switchPlayground('whois')" data-pg="whois">WHOIS</button>
952                            <button class="playground-api-tab" onclick="switchPlayground('resolve')" data-pg="resolve">Resolve</button>
953                            <button class="playground-api-tab" onclick="switchPlayground('score')" data-pg="score">Score</button>
954                            <button class="playground-api-tab" onclick="switchPlayground('email')" data-pg="email">Email</button>
955                        </div>
956                        <div class="playground-input-row">
957                            <input type="text" class="input-field" id="testInput" placeholder="Enter IP address (e.g., 8.8.8.8) or leave empty for your IP" aria-label="API playground request input">
958                            <button class="btn btn-accent" onclick="runTest()">Run Test</button>
959                        </div>
960                        <div class="preset-btns" id="presetsIP">
961                            <button class="preset-btn" onclick="runTest()">My IP</button>
962                            <button class="preset-btn" onclick="runTest('8.8.8.8')">8.8.8.8</button>
963                            <button class="preset-btn" onclick="runTest('1.1.1.1')">1.1.1.1</button>
964                            <button class="preset-btn" onclick="runTest('208.67.222.222')">OpenDNS</button>
965                            <button class="preset-btn" onclick="runTest('9.9.9.9')">Quad9</button>
966                        </div>
967                        <div class="preset-btns" id="presetsWhois" style="display:none">
968                            <button class="preset-btn" onclick="runTest('google.com')">google.com</button>
969                            <button class="preset-btn" onclick="runTest('8.8.8.8')">8.8.8.8</button>
970                            <button class="preset-btn" onclick="runTest('cloudflare.com')">cloudflare.com</button>
971                            <button class="preset-btn" onclick="runTest('github.com')">github.com</button>
972                        </div>
973                        <div class="preset-btns" id="presetsResolve" style="display:none">
974                            <button class="preset-btn" onclick="runTest('google.com')">google.com</button>
975                            <button class="preset-btn" onclick="runTest('github.com')">github.com</button>
976                            <button class="preset-btn" onclick="runTest('cloudflare.com')">cloudflare.com</button>
977                            <button class="preset-btn" onclick="runTest('example.com')">example.com</button>
978                        </div>
979                        <div class="preset-btns" id="presetsScore" style="display:none">
980                            <button class="preset-btn" onclick="runTest('my')">My IP</button>
981                            <button class="preset-btn" onclick="runTest('8.8.8.8')">8.8.8.8</button>
982                            <button class="preset-btn" onclick="runTest('1.1.1.1')">1.1.1.1</button>
983                            <button class="preset-btn" onclick="runTest('104.28.5.100')">104.28.5.100</button>
984                        </div>
985                        <div class="preset-btns" id="presetsEmail" style="display:none">
986                            <button class="preset-btn" onclick="runTest('[email protected]')">gmail.com</button>
987                            <button class="preset-btn" onclick="runTest('github.com')">github.com</button>
988                            <button class="preset-btn" onclick="runTest('[email protected]')">mailinator.com</button>
989                            <button class="preset-btn" onclick="runTest('[email protected]')">[email protected]</button>
990                        </div>
991                        <div class="request-info" id="pgRequestInfo" style="display:none"><span class="request-info-method">
991GET</span><span class="request-info-url" id="pgRequestUrl"></span><span class="request-info-time" id="pgRequestTime"></span></div>
992                        <div class="response-panel">
993                            <div class="response-header">
994                                <div class="response-status pending" id="status">Ready</div>
995                                <div class="response-meta">
996                                    <button type="button" class="code-copy" id="pgCopyResponse" onclick="copyPlaygroundResponse()" style="display:none">Copy</button>
997                                    <div class="response-time" id="time">—</div>
998                                </div>
999                            </div>
1000                            <div class="response-body" id="response"><pre><span class="comment">// Click "Run Test" or a preset to make a request</span></pre></div>
1001                        </div>
1002                    </div>
1003                </div>
1004            </div>
1005        </section>
1006
1007        <section class="section v2 approach-section" id="approach">
1008            <div class="container">
1009                <div class="section-header">
1010                    <div class="section-eyebrow">Under the hood</div>
1011                    <h2 class="section-title">A fraud score that <em>shows its work.</em></h2>
1012                    <p class="section-desc">Most commercial IP-intelligence APIs return one opaque number and ask you to trust it. We surface every signal that contributed to a verdict — datacentre vs residential, hosting vs ISP, why a network raised the risk — so you can debug a flagged user instead of guessing.</p>
1013                </div>
1014
1015                <div class="approach-grid">
1016                    <article class="approach-card">
1017                        <div class="approach-icon" aria-hidden="true">
1018                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M3 12h18"/><path d="M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18"/></svg>
1019                        </div>
1020                        <h3>Privacy proxies, classified.</h3>
1021                        <p>Consumer privacy relays, commercial VPN networks and residential-proxy infrastructure are each surfaced as their own category — not collapsed into a single "VPN" flag. That distinction matters when a real user behind a privacy proxy isn't a fraudster, but a paid residential-proxy customer almost always is.</p>
1022                    </article>
1023
1024                    <article class="approach-card">
1025                        <div class="approach-icon" aria-hidden="true">
1026                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="6" rx="1"/><rect x="3" y="14" width="18" height="6" rx="1"/><path d="M7 7h.01M7 17h.01"/></svg>
1027                        </div>
1028                        <h3>A signal, not a black box.</h3>
1029                        <p>The score draws on dozens of independent threat-intelligence inputs covering active C2 servers, brute-force sources, spam infrastructure, malware hosts, scanning, and abuse reports — refreshed continuously. The response tells you <strong>how many independent signals</strong> agreed on an IP, the severity of each, and the rDNS/ASN reasoning — not just a number you have to take on faith.</p>
1030                    </article>
1031
1032                    <article class="approach-card">
1033                        <div class="approach-icon" aria-hidden="true">
1034                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L3 6v6c0 5 3.8 9.5 9 11 5.2-1.5 9-6 9-11V6l-9-4z"/><path d="M9 12l2 2 4-4"/></svg>
1035                        </div>
1036                        <h3>Real users don't get hit.</h3>
1037                        <p>
1037Major hyperscale and CDN infrastructure is verified by <strong>ASN&nbsp;+&nbsp;reverse-DNS</strong> before any blocklist match is applied, so legitimate traffic from well-known public networks can't be mistaken for fraud. Competing services we benchmarked tag some of the largest public DNS resolvers as "abusers" — that's a real correctness problem if you're gating signups or comments.</p>
1038                    </article>
1039
1040                    <article class="approach-card">
1041                        <div class="approach-icon" aria-hidden="true">
1042                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 1 0 18 0 9 9 0 0 0-18 0z"/><path d="M12 7v5l3 2"/></svg>
1043                        </div>
1044                        <h3>Local-first. No per-query bill.</h3>
1045                        <p>Every lookup is an indexed query against an in-house database — no external call-out per request, no API key, no rate ladder. The free tier is genuinely unlimited, and a /60-second result cache means repeat lookups of the same IP are sub-100&nbsp;ms across the board.</p>
1046                    </article>
1047                </div>
1048
1049                <div class="approach-bench">
1050                    <div class="approach-bench-row">
1051                        <div class="approach-bench-stat">
1052                            <strong>14&thinsp;/&thinsp;16</strong>
1053                            <span>correct classifications in a recent benchmark across a curated set of network categories — vs 10&ndash;11 for the two leading paid services on the same IPs.</span>
1054                        </div>
1055                        <div class="approach-bench-stat">
1056                            <strong>64&nbsp;ms</strong>
1057                            <span>median latency on cached lookups (60-second TTL). Cold-cache calls do additional resolution work, so the first hit on a new IP is slower — a trade-off we made for accuracy.</span>
1058                        </div>
1059                        <div class="approach-bench-stat">
1060                            <strong>$0</strong>
1061                            <span>marginal cost per query at any volume. The two paid services we benchmarked charge $7&ndash;$25 per month at 100k queries, $30&ndash;$200 at a million.</span>
1062                        </div>
1063                    </div>
1064                    <p class="approach-bench-note">Benchmark: 240 live requests across three services, May 2026, spanning trusted infrastructure, datacentres, commercial VPNs, anonymising relays, an active proxy and a multi-feed attacker. <a href="/api/score/8.8.8.8" target="_blank" rel="noopener">Try the API on any IP&nbsp;&rarr;</a></p>
1065                </div>
1066            </div>
1067        </section>
1068
1069                <footer class="footer footer-v2">
1070            <div class="footer-inner">
1071                <div class="footer-hero">
1072                    <div class="footer-hero-copy">
1073                        <div class="footer-logo">
1074                            <svg class="footer-logo-img" width="24" height="24" viewBox="-37 0 512 512" role="img" aria-label="IPAddress.to logo"><path fill="#bddbff" d="M438.86 64c0-35.35-98.24-64-219.43-64S0 28.65 0 64s98.24 64 219.43 64 219.43-28.65 219.43-64z"/><path fill="#9bc9ff" d="M219.43 256c121.14 0 219.43-28.62 219.43-64V64c0 35.38-98.29 64-219.43 64S0 99.38 0 64v128c0 35.38 98.29 64 219.43 64z"/><path fill="#57a4ff" d="M219.43 384c121.14 0 219.43-28.62 219.43-64V192c0 35.38-98.29 64-219.43 64S0 227.38 0 192v128c0 35.38 98.29 64 219.43 64z"/><path fill="#2488ff" d="M438.86 320c0 35.38-98.29 64-219.43 64S0 355.38 0 320v128c0 35.38 98.29 64 219.43 64s219.43-28.62 219.43-64V320z"/></svg>
1075                            <span>IPAddress<span class="footer-logo-suffix">.to</span></span>
1076                        </div>
1077                        <p class="footer-statement">Network intelligence, <em>answered in-house.</em></p>
1078                        <p class="footer-tagline">IP, DNS, WHOIS, email and fraud-score tools with a JSON endpoint behind every one. Our own data, no third-party lookups, no signup, no per-query bill.</p>
1079                        <div class="footer-actions">
1080                            <a href="/api/docs/" class="btn btn-accent" data-nav>API documentation</a>
1081                            <a href="/account/" class="btn btn-secondary" data-nav>Get an API key</a>
1082                        </div>
1083                    </div>
1084                    <div class="footer-live">
1085                        <a href="/status/" class="footer-status is-degraded" data-nav data-footer-status>
1086                            <i aria-hidden="true"></i>
1087                            <span data-footer-status-label>Degraded performance</span>
1088                            <small>Status &rarr;</small>
1089                        </a>
1090                        <div class="footer-metrics">
1091                            <div><b data-stat="per_min">—</b><span>requests / min</span></div>
1092                            <div><b data-stat="req_24h">173,589</b><span>requests · 24 h</span></div>
1093                            <div><b data-stat="feeds">96</b><span>threat feeds</span></div>
1094                        </div>
1095                        <div class="footer-extensions">
1096                            <a href="https://chromewebstore.google.com/detail/ipaddressto-lookup/jblhckhmjccldbdocmfnhpiggcacjppf" class="footer-ext-card" target="_blank" rel="noopener" aria-label="Install Chrome extension">
1097                                <img src="/svg/chrome.svg?v2" alt="" width="20" height="20" loading="lazy" decoding="async">
1098                                <span class="footer-ext-text"><span class="footer-ext-label">Get the</span><span class="footer-ext-name">Chrome extension</span></span>
1099                            </a>
1100                            <a href="https://addons.mozilla.org/en-US/firefox/addon/what-is-my-ip-tool/" class="footer-ext-card" target="_blank" rel="noopener" aria-label="Install Firefox addon">
1101                                <img src="/svg/firefox.svg" alt="" width="20" height="20" loading="lazy" decoding="async">
1102                                <span class="footer-ext-text"><span class="footer-ext-label">Get the</span><span class="footer-ext-name">Firefox addon</span></span>
1103                            </a>
1104                        </div>
1105                    </div>
1106                </div>
1107
1108                <div class="footer-cols">
1109                    <div class="footer-col">
1110                        <h3 class="footer-col-title">Tools</h3>
1111                        <a href="/">My IP</a>
1112                        <a href="/lookup/">Lookup</a>
1113                        <a href="/dns/">DNS</a>
1114                        <a href="/hostname/">Hostname</a>
1115                        <a href="/email/">Email Check</a>
1116                        <a href="/whois/">WHOIS</a>
1117                        <a href="/resolve/">Resolve</a>
1118                        <a href="/ip/">IP Details</a>
1119                        <a href="/score/">Fraud Score</a>
1120                    </div>
1121                    <div class="footer-col">
1122                        <h3 class="footer-col-title">Developers</h3>
1123                        <a href="/api/docs/">API Docs</a>
1124                        <a href="/account/">Account &amp; API Keys</a>
1125                        <a href="/#playground">Playground</a>
1126                        <a href="/status/">System Status</a>
1127                        <a href="/#approach">How the score works</a>
1128                    </div>
1129                    <div class="footer-col">
1130                        <h3 class="footer-col-title">Company</h3>
1131                        <a href="/blog/">Blog</a>
1132                        <a href="/status/">Status</a>
1133                        <a href="/contact/">Contact</a>
1134                        <a href="/terms/">Terms of Service</a>
1135                        <a href="/privacy/">Privacy Policy</a>
1136                    </div>
1137                    <div class="footer-col">
1138                        <h3 class="footer-col-title">More Tools</h3>
1139                        <a href="https://onlinemicrophonetest.com/" target="_blank" rel="noopener">Online Microphone Test</a>
1140                        <a href="https://onlinewebcamtest.com/" target="_blank" rel="noopener">Online Webcam Test</a>
1141                    </div>
1142                </div>
1143
1144                <div class="footer-bottom">
1145                    <span class="footer-copy">&copy; 2026 IPAddress.to. All rights reserved.</span>
1146                    <span class="footer-fine">Built and hosted in-house &middot; Own geolocation, network and reputation data &middot; <b data-stat="feeds">96</b> threat-intel feeds</span>
1147                </div>
1148            </div>
1149        </footer>
1150
1151    </main><!-- /#swup -->
1152
1153                
1153<script src="/js/Swup.umd.js" data-swup-ignore-script></script>
1153
1154    
1154<script data-swup-ignore-script>window.__detectSrc="\/js\/detect.min.js?v=1.43.1";</script>
1154
1155    
1155<script src="/js/app.min.js?v=1.43.1" data-swup-ignore-script></script>
vendor: 1 bytes, line 1155
1155
1156<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"e3a8ced6585f46789d4a8c9e02dcc805","r":1,"spa":2}' crossorigin="anonymous"></script>
1156
1157</body>
1158</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.