PageSourceSearch

https://ipaddress.to/

html ipaddress.to collected 2026-09-24 14:27:49 UTC 108,793 bytes, 1,156 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" href="/fonts/space-grotesk-700-latin.woff2" as="font" type="font/woff2" crossorigin>
38
39        <link rel="stylesheet" href="/css/shared.css?v=1.40.0">
40
41        
41<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>
41
42</head>
43<body>
44
45            <a href="#swup" class="skip-link">Skip to content</a>
46
47    <div class="toast" id="toast" role="status" aria-live="polite">
48        <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>
49        <span id="toastMsg">Copied to clipboard</span>
50    </div>
51
52        <header class="header">
53        <div class="header-bar">
54            <a href="/" class="logo">
55                <div class="logo-mark"><img src="/images/logo.svg" alt="IPAddress.to logo" width="22" height="22"></div>
56                <span class="logo-text">IPAddress<span class="logo-suffix">.to</span></span>
57            </a>
58            <div class="header-right">
59                <nav class="header-nav" aria-label="Primary">
60                    <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>
61                    <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>
62                    <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>
63                    <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>
64                    <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>
65                    <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>
66                    <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>
67                </nav>
68                <div class="header-auth">
69                    <button type="button" class="header-auth-btn auth-when-out" data-auth-open="login"><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>
70                    <button type="button" class="header-auth-btn header-auth-primary auth-when-out" data-auth-open="signup"><span>Sign up</span></button>
71                    <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>
72                </div>
73                <button class="menu-btn" id="menuBtn" onclick="toggleMobileMenu()" aria-label="Menu">
74                    <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>
75                    <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>
76                </button>
77            </div>
78        </div>
79    </header>
80
81        <div class="mobile-overlay" id="mobileOverlay" onclick="toggleMobileMenu()"></div>
82
83        <nav class="mobile-drawer" id="mobileDrawer" aria-label="Mobile">
84        <div class="mobile-drawer-header">
85            <span class="mobile-drawer-title">Menu</span>
86            <button class="mobile-drawer-close" onclick="toggleMobileMenu()" aria-label="Close menu">
87                <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>
88            </button>
89        </div>
90        <div class="mobile-drawer-nav">
91            <a href="/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
92                <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>
93                My IP            </a>
94            <a href="/lookup/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
95                <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>
96                Lookup            </a>
97            <a href="/dns/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
98                <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>
99                DNS Checker            </a>
100            <a href="/email/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
101                <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>
102                Email Check            </a>
103            <a href="/whois/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
104                <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>
105                WHOIS            </a>
106            <a href="/score/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
107                <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>
108                Fraud Score            </a>
109            <a href="/api/docs/" class="mobile-nav-link" data-nav onclick="closeMobileMenu()">
110                <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>
111                API Docs            </a>
112            <a href="/#playground" class="mobile-nav-link" onclick="closeMobileMenu()">
113                <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>
114                Playground            </a>
115            <div class="mobile-auth">
116                <button type="button" class="mobile-nav-link auth-when-out" data-auth-open="login">
117                    <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>
118                    Log in
119                </button>
120                <button type="button" class="mobile-nav-link auth-when-out" data-auth-open="signup">
121                    <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>
122                    Sign up — free
123                </button>
124                <a href="/account/" class="mobile-nav-link auth-when-in" data-nav onclick="closeMobileMenu()">
125                    <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>
126                    Account &amp; API keys
127                </a>
128            </div>
129        </div>
130        <div class="mobile-drawer-footer">
131            <span>IPAddress.to</span>
132        </div>
133    </nav>
134
135                <div class="auth-backdrop" id="authModal" role="dialog" aria-modal="true" aria-labelledby="authTitle" aria-hidden="true" data-tab="login">
136        <div class="auth-dialog">
137            <button type="button" class="auth-close" data-auth-close aria-label="Close">
138                <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>
139            </button>
140            <div class="auth-tabs" role="tablist">
141                <button type="button" class="auth-tab on" role="tab" data-auth-tab="login">Log in</button>
142                <button type="button" class="auth-tab" role="tab" data-auth-tab="signup">Sign up</button>
143            </div>
144            <div class="auth-heading">
145                <h2 id="authTitle"><span class="auth-title-login">Welcome back</span><span class="auth-title-signup">Create your account</span></h2>
146                <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>
147            </div>
148            <div class="contact-error auth-error" id="authError" role="alert" hidden></div>
149
150            <div class="auth-panes">
151            <form class="contact-form auth-form" data-auth-form="login" method="post" action="/account/" novalidate>
152                <input type="hidden" name="_action" value="login">
153                <input type="hidden" name="_csrf" value="">
154                <div class="contact-field">
155                    <label for="am-li-email">Email</label>
156                    <input type="email" id="am-li-email" name="email" required maxlength="190" autocomplete="email" placeholder="[email protected]">
157                </div>
158                <div class="contact-field">
159                    <label for="am-li-pass">Password</label>
160                    <input type="password" id="am-li-pass" name="password" required autocomplete="current-password" placeholder="Your password">
161                </div>
162                <button type="submit" class="btn btn-primary contact-submit auth-submit">Log in</button>
163                <p class="auth-switch">New here? <button type="button" data-auth-tab="signup">Create a free account</button></p>
164            </form>
165
166            <form class="contact-form auth-form" data-auth-form="signup" method="post" action="/account/" novalidate aria-hidden="true" inert>
167                <input type="hidden" name="_action" value="signup">
168                <input type="hidden" name="_csrf" value="">
169                <div class="contact-field">
170                    <label for="am-su-email">Email</label>
171                    <input type="email" id="am-su-email" name="email" required maxlength="190" autocomplete="email" placeholder="[email protected]">
172                </div>
173                <div class="contact-field">
174                    <label for="am-su-pass">Password</label>
175                    <input type="password" id="am-su-pass" name="password" required minlength="8" autocomplete="new-password" placeholder="At least 8 characters">
176                </div>
177                <div class="contact-field">
178                    <label for="am-su-pass2">Confirm password</label>
179                    <input type="password" id="am-su-pass2" name="password2" required minlength="8" autocomplete="new-password" placeholder="Repeat the password">
180                </div>
181                <button type="submit" class="btn btn-primary contact-submit auth-submit">Create account</button>
182                <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>
183                <p class="auth-switch">Already have an account? <button type="button" data-auth-tab="login">Log in</button></p>
184            </form>
185            </div>
186        </div>
187    </div>
188
189            <div class="map-tooltip" id="mapTooltip">
190        <div class="map-tooltip-header">
191            <span class="map-tooltip-flag" id="ttFlag"></span>
192            <div>
193                <div class="map-tooltip-name" id="ttName"></div>
194                <div class="map-tooltip-provider" id="ttProvider"></div>
195            </div>
196        </div>
197        <div class="map-tooltip-result" id="ttResult"></div>
198    </div>
199
200    <!-- Hydrate JS with server-side data -->
201    
201<script>
202        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"};
203        var _protoChecked = false;
204        document.addEventListener('DOMContentLoaded', function() {
205            if (!_protoChecked && typeof checkBothProtocols === 'function' && currentData) {
206                _protoChecked = true;
207                checkBothProtocols();
208            }
209            (function tickLocalTime(){
210                var el = document.getElementById('detailLocalTime');
211                if (!el) return;
212                var tz = el.getAttribute('data-tz');
213                if (!tz) return;
214                var offsetStr = '';
215                try {
216                    var offsetFmt = new Intl.DateTimeFormat('en-GB', { timeZone: tz, timeZoneName: 'shortOffset' });
217                    var offset = offsetFmt.formatToParts(new Date()).find(function(p){ return p.type === 'timeZoneName'; });
218                    offsetStr = offset ? offset.value.replace('GMT', '') : '';
219                } catch (e) {}
220                var fmt;
221                try {
222                    fmt = new Intl.DateTimeFormat('en-GB', { timeZone: tz, hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false });
223                } catch (e) { return; }
224                function update(){
225                    el.innerHTML = fmt.format(new Date()) + (offsetStr ? ' <span class="u-muted-medium">(' + offsetStr + ')</span>' : '');
226                }
227                update();
228                setInterval(update, 1000);
229            })();
230        });
231    </script>
231
232
233    <main id="swup" class="transition-main">
234
235        <section class="hero landing-v2">
236            <div class="hero-grid"></div>
237            <div class="hero-glow"></div>
238            <div class="container">
239                <div class="ip-card-wrapper">
240                                        <div class="ip-card ip-deck">
241                        <div class="ip-card-top">
242                        <div class="ip-card-main">
243                        <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">
244                            <i aria-hidden="true"></i>
245                            <span>Analysing connection</span>
246                            <small>Running live proxy and VPN detection…</small>
247                            <em class="ip-card-status-scores" hidden></em>
248                            <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>
249                        </button>
250                        <div class="ip-protos">
251                            <div class="ip-proto ok" id="boxV4" onclick="copyProtoIP('v4')">
252                                <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>
253                                <div class="ip-proto-header">
254                                    <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>
255                                    <span class="ip-proto-label">Your IPv4 address</span>
256                                    <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>
257                                </div>
258                                <div class="ip-proto-addr" id="valueV4">181.215.65.77</div>
259                            </div>
260                            <div class="ip-proto checking" id="boxV6" onclick="copyProtoIP('v6')">
261                                <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>
262                                <div class="ip-proto-header">
263                                    <span class="ip-proto-icon" id="iconV6"><span class="ip-proto-spinner"></span></span>
264                                    <span class="ip-proto-label">Your IPv6 address</span>
265                                    <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>
266                                </div>
267                                <div class="ip-proto-addr" id="valueV6">Checking...</div>
268                            </div>
269                        </div>
270                        </div>
271                        <div class="ip-card-map" id="homeMiniMap"
272                             data-lat="41.85" data-lng="-87.65"
273                             data-city="Chicago" data-country="United States" data-cc="US">
274                            <div class="ip-card-map-canvas" id="homeMiniMapCanvas" aria-hidden="true"></div>
275                            <div class="ip-card-map-caption"><span>Approximate location</span><b id="homeMapCaption">Chicago, Illinois</b></div>
276                        </div>
277                        </div>
278                        <div class="ip-card-details">
279                            <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>
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"><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>
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"><path d="M5 12.55a11 11 0 0 1 14.08 0"/>
281<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>
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"><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>
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"><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>
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"><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>
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"><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>
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="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>
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="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>
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"><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>
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"><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>
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"><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">09:27:49 <span class="u-muted-medium">(-05:00)</span></div></div>
291                        </div>
292                        <div class="ip-card-actions ip-deck-actions">
293                            <div class="ip-deck-endpoint">
294                                <span class="ip-deck-endpoint-label">This lookup as data</span>
295                                <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>
296                            </div>
297                            <div class="ip-deck-btns">
298                                <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>
299                                <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>
300                                <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>
301                            </div>
302                        </div>
303                    </div>
304                </div>
305
306                                <div class="auth-backdrop detect-backdrop" id="detectModal" role="dialog" aria-modal="true" aria-labelledby="pdTitle" aria-hidden="true">
307                    <div class="auth-dialog detect-dialog">
308                        <button type="button" class="auth-close" data-detect-close aria-label="Close">
309                            <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>
310                        </button>
311        <div class="pd-card" id="proxyDetectCard" aria-live="polite">
312                                    <div class="pd-header">
313                                        <div class="pd-eyebrow">Live Detection</div>
314                                        <h3 class="pd-title" id="pdTitle">Proxy / VPN Check</h3>
315                                        <p class="pd-subtitle" id="pdSubtitle">Running tests&hellip; <span class="pd-spinner"></span></p>
316                                    </div>
317                                    <div class="pd-scores">
318                                        <div class="pd-score" data-metric="proxy" data-status="pending">
319                                            <div class="pd-score-label">Proxy Score</div>
320                                            <div class="pd-score-value" id="pdProxyScore">&mdash;</div>
321                                            <div class="pd-score-bar"><div class="pd-score-fill" id="pdProxyFill" style="width:0%"></div></div>
322                                        </div>
323                                        <div class="pd-score" data-metric="vpn" data-status="pending">
324                                            <div class="pd-score-label">VPN Score</div>
325                                            <div class="pd-score-value" id="pdVpnScore">&mdash;</div>
326                                            <div class="pd-score-bar"><div class="pd-score-fill" id="pdVpnFill" style="width:0%"></div></div>
327                                        </div>
328                                    </div>
329                                    <div class="pd-tests" id="pdTests"></div>
330                                    <div class="pd-footnote" id="pdFootnote">Powered by live latency probing, TCP/IP fingerprint analysis, and threat-intel cross-check.</div>
331                                </div>
332                    </div>
333                </div>
334
335                <div class="hero-content">
336                    <span class="page-kicker"><i aria-hidden="true"></i><b>Live</b><span class="sep">/</span>Your connection, analysed in-house</span>
337                    <h1 class="hero-title">What is <em>my IP</em>?</h1>
338                    <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>
339                    <div class="hero-actions">
340                        <a href="/score/" class="btn btn-accent">Check Fraud Score</a>
341                        <a href="#api" class="btn btn-secondary">View API Docs</a>
342                    </div>
343                </div>
344
345                                <div class="live-stats" id="liveStats" aria-label="Live usage statistics">
346                    <div class="live-stat">
347                        <div class="live-stat-label"><i aria-hidden="true"></i>Right now</div>
348                        <div class="live-stat-value"><span data-stat="per_min">—</span><small>req / min</small></div>
349                        <div class="live-stat-sub">API requests in the last 60 seconds, refreshed every 15 s.</div>
350                    </div>
351                    <div class="live-stat">
352                        <div class="live-stat-label">Last 24 hours</div>
353                        <div class="live-stat-value"><span data-stat="req_24h">—</span></div>
354                        <div class="live-stat-sub">Lookups across IP, DNS, WHOIS, email and fraud score.</div>
355                    </div>
356                    <div class="live-stat">
357                        <div class="live-stat-label">Last 30 days</div>
358                        <div class="live-stat-value"><span data-stat="req_30d">2,236,062</span></div>
359                        <div class="live-stat-sub">Requests served from our own infrastructure, no third-party APIs.</div>
360                    </div>
361                    <div class="live-stat">
362                        <div class="live-stat-label">Threat intelligence</div>
363                        <div class="live-stat-value"><span data-stat="feed_entries">1,375,023</span></div>
364                        <div class="live-stat-sub">Flagged addresses across <b data-stat="feeds">96</b> curated feeds.</div>
365                    </div>
366                </div>
367
368            </div>
369        </section>
370
371        <!-- ═══ Tools bento ═══════════════════════════════════════════
372             Per-card accent comes from --tc / --tc-rgb set on .tool-n*,
373             the corner numeral is drawn from data-idx, and every
374             .tool-scene is a pure-CSS illustration (no images) that only
375             animates on hover. Card order is load-bearing: the accents
376             and the reveal stagger are assigned by these classes. -->
377        <section class="section v2 tools-section" id="tools">
378            <div class="container">
379                <div class="section-header tools-header">
380                    <div class="section-eyebrow">Seven tools, one place</div>
381                    <h2 class="section-title">Pick the lookup you need</h2>
382                    <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>
383                </div>
384
385                <div class="tools-bento">
386
387                    <a class="tool-card tool-n1 tool-wide" href="/lookup/" data-nav data-idx="01" data-reveal>
388                        <span class="tool-text">
389                            <span class="tool-head">
390                                <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>
391                                <h3 class="tool-title">IP Lookup</h3>
392                            </span>
393                            <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>
394                            <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>
395                        </span>
396                        <span class="tool-scene ts-lookup" aria-hidden="true">
397                            <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>
398                            <span class="ts-pin"><i class="ts-pin-ring"></i><i class="ts-pin-dot"></i></span>
399                            <span class="ts-chip ts-chip-a">Mountain View</span>
400                            <span class="ts-chip ts-chip-b">AS15169</span>
401                        </span>
402                    </a>
403
404                    <a class="tool-card tool-n2" href="/" data-nav data-idx="02" data-reveal>
405                        <span class="tool-text">
406                            <span class="tool-head">
407                                <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>
408                                <h3 class="tool-title">My IP</h3>
409                            </span>
410                            <span class="tool-desc">Your public address on both stacks at once, with the browser and network we see.</span>
411                            <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>
412                        </span>
413                        <span class="tool-scene ts-myip" aria-hidden="true">
414                            <span class="ts-addr"><i class="ts-tag">IPv4</i><b>203.0.113.42</b><i class="ts-live"></i></span>
415                            <span class="ts-addr ts-addr-2"><i class="ts-tag">IPv6</i><b>2001:db8::1</b><i class="ts-live"></i></span>
416                        </span>
417                    </a>
418
419                    <a class="tool-card tool-n3" href="/dns/" data-nav data-idx="03" data-reveal>
420                        <span class="tool-text">
421                            <span class="tool-head">
422                                <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>
423                                <h3 class="tool-title">DNS Checker</h3>
424                            </span>
425                            <span class="tool-desc">Watch a record propagate across 32 resolvers worldwide, one row per server.</span>
426                            <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>
427                        </span>
428                        <span class="tool-scene ts-dns" aria-hidden="true">
429                            <span class="ts-srv"><i class="ts-bar"></i><i class="ts-dot ok"></i></span>
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 wait"></i></span>
432                            <span class="ts-srv"><i class="ts-bar"></i><i class="ts-dot ok"></i></span>
433                        </span>
434                    </a>
435
436                    <a class="tool-card tool-n4" href="/whois/" data-nav data-idx="04" data-reveal>
437                        <span class="tool-text">
438                            <span class="tool-head">
439                                <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>
440                                <h3 class="tool-title">WHOIS</h3>
441                            </span>
442                            <span class="tool-desc">Registrar, owner contacts, network range and the dates a domain or IP was registered.</span>
443                            <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>
444                        </span>
445                        <span class="tool-scene ts-whois" aria-hidden="true">
446                            <span class="ts-doc">
447                                <i class="ts-ln w1"></i><i class="ts-ln w2"></i><i class="ts-ln w3"></i><i class="ts-ln w4"></i>
448                                <i class="ts-seal"></i>
449                            </span>
450                        </span>
451                    </a>
452
453                    <a class="tool-card tool-n5" href="/score/" data-nav data-idx="05" data-reveal>
454                        <span class="tool-text">
455                            <span class="tool-head">
456                                <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>
457                                <h3 class="tool-title">Fraud Score</h3>
458                            </span>
459                            <span class="tool-desc">VPN, proxy, Tor, datacenter and blocklist signals folded into one 0&ndash;100 risk value.</span>
460                            <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>
461                        </span>
462                        <span class="tool-scene ts-score" aria-hidden="true">
463                            <span class="ts-dial"><b>87</b></span>
464                            <span class="ts-flags"><i></i><i></i><i></i></span>
465                        </span>
466                    </a>
467
468                    <a class="tool-card tool-n6" href="/email/" data-nav data-idx="06" data-reveal>
469                        <span class="tool-text">
470                            <span class="tool-head">
471                                <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>
472                                <h3 class="tool-title">Email Check</h3>
473                            </span>
474                            <span class="tool-desc">MX, SPF and DMARC in one pass, plus disposable and role-based mailbox detection.</span>
475                            <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>
476                        </span>
477                        <span class="tool-scene ts-email" aria-hidden="true">
478                            <span class="ts-chk"><i class="ts-tick"></i>MX</span>
479                            <span class="ts-chk"><i class="ts-tick"></i>SPF</span>
480                            <span class="ts-chk"><i class="ts-tick"></i>DMARC</span>
481                        </span>
482                    </a>
483
484                    <a class="tool-card tool-n7 tool-full" href="/api/docs/" data-nav data-idx="07" data-reveal>
485                        <span class="tool-text">
486                            <span class="tool-head">
487                                <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>
488                                <h3 class="tool-title">Free JSON API</h3>
489                            </span>
490                            <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>
491                            <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>
492                        </span>
493                        <span class="tool-scene ts-api" aria-hidden="true">
494                            <span class="ts-term">
495                                <i class="ts-term-bar"><em></em><em></em><em></em></i>
496                                <code class="ts-cmd"><span class="ts-verb">GET</span> /api/lookup/8.8.8.8</code>
497                                <code class="ts-out"><span class="ts-k">"country"</span>: <span class="ts-s">"United States"</span>,</code>
498                                <code class="ts-out"><span class="ts-k">"asn"</span>: <span class="ts-n">15169</span>,</code>
499                                <code class="ts-out"><span class="ts-k">"rdns"</span>: <span class="ts-s">"dns.google"</span></code>
500                            </span>
501                        </span>
502                    </a>
503
504                </div>
505            </div>
506        </section>
507
508        <section class="section v2 api-section" id="api">
509            <div class="container">
510                <div class="section-header">
511                    <div class="section-eyebrow">REST API</div>
512                    <h2 class="section-title">Simple, private API</h2>
513                    <p class="section-desc">All lookups are processed locally using our own geolocation database. No data is sent to third parties.</p>
514                    <a class="api-ref-link" href="/api/docs/">View full API reference <span class="api-ref-arrow" aria-hidden="true">&rarr;</span></a>
515                </div>
516                <div class="endpoints-grid">
517
518                    <!-- GET /api/lookup/my -->
519                    <div class="endpoint open">
520                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
521                            <span class="method method-get">GET</span>
522                            <span class="endpoint-path">/api/lookup/my</span>
523                            <span class="endpoint-desc">Get your own IP info</span>
524                            <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>
525                        </div>
526                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
527                            <div class="code-tabs">
528                                <button class="code-tab active" onclick="switchTab(this,'curl1')">cURL</button>
529                                <button class="code-tab" onclick="switchTab(this,'js1')">JavaScript</button>
530                                <button class="code-tab" onclick="switchTab(this,'py1')">Python</button>
531                                <button class="code-tab" onclick="switchTab(this,'php1')">PHP</button>
532                                <button class="code-tab" onclick="switchTab(this,'cs1')">C#</button>
533                                <button class="code-tab" onclick="switchTab(this,'go1')">Go</button>
534                                <button class="code-tab" onclick="switchTab(this,'rb1')">Ruby</button>
535                                <button class="code-tab" onclick="switchTab(this,'java1')">Java</button>
536                                <button class="code-tab" onclick="switchTab(this,'perl1')">Perl</button>
537                                <button class="code-tab" onclick="switchTab(this,'rust1')">Rust</button>
538                            </div>
539                            <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>
540                            <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>);
541<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
542console.log(data);</pre></div></div></div>
543                            <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">
543import</span> requests
544
545data = requests.get(<span class="string">'https://ipaddress.to/api/lookup/my'</span>).json()
546print(data)</pre></div></div></div>
547                            <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(
548    file_get_contents(<span class="string">'https://ipaddress.to/api/lookup/my'</span>),
549    <span class="keyword">true</span>
550);
551print_r($data);</pre></div></div></div>
552                            <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();
553<span class="keyword">var</span> json = <span class="keyword">await</span> client.GetStringAsync(<span class="string">"https://ipaddress.to/api/lookup/my"</span>);
554Console.WriteLine(json);</pre></div></div></div>
555                            <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>)
556body, _ := io.ReadAll(resp.Body)
557fmt.Println(<span class="keyword">string</span>(body))</pre></div></div></div>
558                            <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>
559<span class="keyword">require</span> <span class="string">'json'</span>
560
561data = JSON.parse(Net::HTTP.get(URI(<span class="string">'https://ipaddress.to/api/lookup/my'</span>)))
562puts data</pre></div></div></div>
563                            <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();
564HttpRequest req = HttpRequest.newBuilder()
565    .uri(URI.create(<span class="string">"https://ipaddress.to/api/lookup/my"</span>)).build();
566String body = client.send(req, BodyHandlers.ofString()).body();
567System.out.println(body);</pre></div></div></div>
568                            <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">
568use</span> LWP::Simple;
569<span class="keyword">use</span> JSON;
570
571<span class="keyword">my</span> $data = decode_json(get(<span class="string">'https://ipaddress.to/api/lookup/my'</span>));
572print $data->{ip};</pre></div></div></div>
573                            <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>)
574    .<span class="keyword">await</span>?.text().<span class="keyword">await</span>?;
575println!(<span class="string">"{}"</span>, body);</pre></div></div></div>
576                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
577  <span class="key">"success"</span>: <span class="keyword">true</span>,
578  <span class="key">"ip"</span>: <span class="string">"203.45.167.89"</span>,
579  <span class="key">"type"</span>: <span class="string">"IPv4"</span>,
580  <span class="key">"country"</span>: <span class="string">"United States"</span>,
581  <span class="key">"country_code"</span>: <span class="string">"US"</span>,
582  <span class="key">"region"</span>: <span class="string">"California"</span>,
583  <span class="key">"city"</span>: <span class="string">"San Francisco"</span>,
584  <span class="key">"latitude"</span>: <span class="number">37.7749</span>,
585  <span class="key">"longitude"</span>: <span class="number">-122.4194</span>,
586  <span class="key">"timezone"</span>: <span class="string">"America/Los_Angeles"</span>,
587  <span class="key">"isp"</span>: <span class="string">"Cloudflare, Inc."</span>,
588  <span class="key">"asn"</span>: <span class="string">"AS13335"</span>
589}</pre></div></div>
590                        </div></div></div>
591                    </div>
592
593                    <!-- GET /api/{address} -->
594                    <div class="endpoint">
595                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
596                            <span class="method method-get">GET</span>
597                            <span class="endpoint-path">/api/lookup/<span class="param">{ip_or_hostname}</span></span>
598                            <span class="endpoint-desc">Lookup an IP address or hostname</span>
599                            <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>
600                        </div>
601                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
602                            <div class="params-grid">
603                                <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>
604                            </div>
605                            <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>
606                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
607  <span class="key">"success"</span>: <span class="keyword">true</span>,
608  <span class="key">"ip"</span>: <span class="string">"8.8.8.8"</span>,
609  <span class="key">"type"</span>: <span class="string">"IPv4"</span>,
610  <span class="key">"rdns"</span>: <span class="string">"dns.google"</span>,
611  <span class="key">"location"</span>: {
612    <span class="key">"continent"</span>: <span class="string">"NA"</span>,
613    <span class="key">"continent_name"</span>: <span class="string">"North America"</span>,
614    <span class="key">"country"</span>: <span class="string">"United States"</span>,
615    <span class="key">"country_code"</span>: <span class="string">"US"</span>,
616    <span class="key">"state"</span>: <span class="string">"California"</span>,
617    <span class="key">"city"</span>: <span class="string">
617"Mountain View"</span>,
618    <span class="key">"latitude"</span>: <span class="number">37.422</span>,
619    <span class="key">"longitude"</span>: <span class="number">-122.085</span>,
620    <span class="key">"timezone"</span>: <span class="string">"America/Los_Angeles"</span>,
621    <span class="key">"is_eu_member"</span>: <span class="keyword">false</span>,
622    <span class="key">"calling_code"</span>: <span class="string">"1"</span>,
623    <span class="key">"capital"</span>: <span class="string">"Washington, D.C."</span>,
624    <span class="key">"languages"</span>: <span class="string">"English"</span>,
625    <span class="key">"country_tld"</span>: <span class="string">".us"</span>,
626    <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> }
627  },
628  <span class="key">"asn"</span>: {
629    <span class="key">"asn"</span>: <span class="number">15169</span>,
630    <span class="key">"descr"</span>: <span class="string">"Google LLC"</span>,
631    <span class="key">"country"</span>: <span class="string">"US"</span>,
632    <span class="key">"org"</span>: <span class="string">"Google LLC"</span>
633  },
634  <span class="key">"company"</span>: { <span class="key">"name"</span>: <span class="string">"Google LLC"</span> },
635  <span class="key">"is_vpn"</span>: <span class="keyword">false</span>,
636  <span class="key">"is_proxy"</span>: <span class="keyword">false</span>,
637  <span class="key">"is_tor"</span>: <span class="keyword">false</span>,
638  <span class="key">"is_hosting"</span>: <span class="keyword">false</span>,
639  <span class="key">"vpn_provider"</span>: <span class="keyword">null</span>
640}</pre></div></div>
641                        </div></div></div>
642                    </div>
643
644                    <!-- GET /api/whois/ -->
645                    <div class="endpoint">
646                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
647                            <span class="method method-get">GET</span>
648                            <span class="endpoint-path">/api/whois/<span class="param">{ip_or_domain}</span></span>
649                            <span class="endpoint-desc">WHOIS lookup (subdomains auto-stripped to root domain)</span>
650                            <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>
651                        </div>
652                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
653                            <div class="params-grid">
654                                <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>
655                            </div>
656                            <div class="u-mt-16 code-tabs">
657                                <button class="code-tab active" onclick="switchTab(this,'curlW')">cURL</button>
658                                <button class="code-tab" onclick="switchTab(this,'jsW')">JavaScript</button>
659                                <button class="code-tab" onclick="switchTab(this,'pyW')">Python</button>
660                                <button class="code-tab" onclick="switchTab(this,'phpW')">PHP</button>
661                                <button class="code-tab" onclick="switchTab(this,'csW')">C#</button>
662                                <button class="code-tab" onclick="switchTab(this,'goW')">Go</button>
663                                <button class="code-tab" onclick="switchTab(this,'perlW')">Perl</button>
664                            </div>
665                            <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>
666                            <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>);
667<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
668console.log(data.parsed.registrar); <span class="comment">
668// "MarkMonitor Inc."</span></pre></div></div></div>
669                            <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
670
671data = requests.get(<span class="string">'https://ipaddress.to/api/whois/google.com'</span>).json()
672print(data[<span class="string">'parsed'</span>][<span class="string">'registrar'</span>])</pre></div></div></div>
673                            <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(
674    file_get_contents(<span class="string">'https://ipaddress.to/api/whois/google.com'</span>),
675    <span class="keyword">true</span>
676);
677echo $data[<span class="string">'parsed'</span>][<span class="string">'registrar'</span>];</pre></div></div></div>
678                            <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();
679<span class="keyword">var</span> json = <span class="keyword">await</span> client.GetStringAsync(
680    <span class="string">"https://ipaddress.to/api/whois/google.com"</span>);
681Console.WriteLine(json);</pre></div></div></div>
682                            <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>)
683body, _ := io.ReadAll(resp.Body)
684fmt.Println(<span class="keyword">string</span>(body))</pre></div></div></div>
685                            <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">
685use</span> LWP::Simple;
686<span class="keyword">use</span> JSON;
687
688<span class="keyword">my</span> $data = decode_json(get(<span class="string">'https://ipaddress.to/api/whois/google.com'</span>));
689print $data->{parsed}{registrar};</pre></div></div></div>
690                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response (domain)</span></div><div class="code-content"><pre>{
691  <span class="key">"success"</span>: <span class="keyword">true</span>,
692  <span class="key">"query"</span>: <span class="string">"google.com"</span>,
693  <span class="key">"type"</span>: <span class="string">"domain"</span>,
694  <span class="key">"found"</span>: <span class="keyword">true</span>,
695  <span class="key">"parsed"</span>: {
696    <span class="key">"domain_name"</span>: <span class="string">"GOOGLE.COM"</span>,
697    <span class="key">"registrar"</span>: <span class="string">"MarkMonitor Inc."</span>,
698    <span class="key">"registrar_url"</span>: <span class="string">"https://rdap.markmonitor.com/rdap/domain/GOOGLE.COM"</span>,
699    <span class="key">"registrar_iana_id"</span>: <span class="string">"292"</span>,
700    <span class="key">"creation_date"</span>: <span class="string">"1997-09-15T04:00:00Z"</span>,
701    <span class="key">"expiry_date"</span>: <span class="string">"2028-09-14T04:00:00Z"</span>,
702    <span class="key">"updated_date"</span>: <span class="string">"2026-05-11T18:51:14Z"</span>,
703    <span class="key">"status"</span>: [<span class="string">"client delete prohibited"</span>, <span class="string">"client transfer prohibited"</span>],
704    <span class="key">"nameservers"</span>: [<span class="string">"ns1.google.com"</span>, <span class="string">"ns2.google.com"</span>],
705    <span class="key">"dnssec"</span>: <span class="string">"unsigned"</span>,
706    <span class="key">"abuse_email"</span>: <span class="string">"[email protected]"</span>,
707    <span class="key">"abuse_phone"</span>: <span class="string">"tel:+1.2086851750"</span>
708  },
709  <span class="key">"source"</span>: <span class="string">"registry"</span>,
710  <span class="key">"duration_ms"</span>: <span class="number">342</span>
711}</pre></div></div>
712                        </div></div></div>
713                    </div>
714
715                    <!-- GET /api/dns/{type}/{domain} -->
716                    <div class="endpoint">
717                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
718                            <span class="method method-get">GET</span>
719                            <span class="endpoint-path">/api/dns/<span class="param">{type}</span>/<span class="param">{domain}</span></span>
720                            <span class="endpoint-desc">DNS propagation checker across 32 global servers</span>
721                            <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>
722                        </div>
723                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
724                            <div class="params-grid">
725                                <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>
726                                <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>
727                                <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>
728                            </div>
729                            <div class="code-tabs">
730                                <button class="code-tab active" onclick="switchTab(this,'curlD')">cURL</button>
731                                <button class="code-tab" onclick="switchTab(this,'jsD')">JavaScript</button>
732                                <button class="code-tab" onclick="switchTab(this,'pyD')">Python</button>
733                            </div>
734                            <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>
735                            <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>);
736<span class="keyword">const</span> reader = res.body.getReader();
737<span class="comment">// Streams NDJSON — one result per line per server</span></pre></div></div></div>
738                            <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">
738import</span> requests, json
739r = requests.get(<span class="string">'https://ipaddress.to/api/dns/ns/google.com'</span>, stream=True)
740<span class="keyword">for</span> line <span class="keyword">in</span> r.iter_lines():
741    print(json.loads(line))</pre></div></div></div>
742                            <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>
743                        </div></div></div>
744                    </div>
745
746                    <!-- GET /api/resolve/ -->
747                    <div class="endpoint">
748                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
749                            <span class="method method-get">GET</span>
750                            <span class="endpoint-path">/api/resolve/<span class="param">{hostname}</span></span>
751                            <span class="endpoint-desc">Resolve hostname to IP addresses</span>
752                            <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>
753                        </div>
754                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
755                            <div class="params-grid">
756                                <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>
757                            </div>
758                            <div class="u-mt-16 code-tabs">
759                                <button class="code-tab active" onclick="switchTab(this,'curlH')">cURL</button>
760                                <button class="code-tab" onclick="switchTab(this,'jsH')">JavaScript</button>
761                                <button class="code-tab" onclick="switchTab(this,'pyH')">Python</button>
762                                <button class="code-tab" onclick="switchTab(this,'phpH')">PHP</button>
763                                <button class="code-tab" onclick="switchTab(this,'csH')">C#</button>
764                                <button class="code-tab" onclick="switchTab(this,'goH')">Go</button>
765                                <button class="code-tab" onclick="switchTab(this,'perlH')">Perl</button>
766                            </div>
767                            <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>
768                            <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>);
769<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
770console.log(data.a); <span class="comment">// ["140.82.121.3"]</span></pre></div></div></div>
771                            <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
772
773data = requests.get(<span class="string">'https://ipaddress.to/api/resolve/github.com'</span>).json()
774<span class="keyword">for</span> ip <span class="keyword">in</span>
774 data[<span class="string">'a'</span>]:
775    print(ip)</pre></div></div></div>
776                            <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(
777    file_get_contents(<span class="string">'https://ipaddress.to/api/resolve/github.com'</span>),
778    <span class="keyword">true</span>
779);
780print_r($data[<span class="string">'a'</span>]); <span class="comment">// IPv4 addresses</span></pre></div></div></div>
781                            <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();
782<span class="keyword">var</span> json = <span class="keyword">await</span> client.GetStringAsync(
783    <span class="string">"https://ipaddress.to/api/resolve/github.com"</span>);
784Console.WriteLine(json);</pre></div></div></div>
785                            <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>)
786body, _ := io.ReadAll(resp.Body)
787fmt.Println(<span class="keyword">string</span>(body))</pre></div></div></div>
788                            <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">
788use</span> LWP::Simple;
789<span class="keyword">use</span> JSON;
790
791<span class="keyword">my</span> $data = decode_json(get(<span class="string">'https://ipaddress.to/api/resolve/github.com'</span>));
792print join(<span class="string">"\n"</span>, @{$data->{a}});</pre></div></div></div>
793                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
794  <span class="key">"success"</span>: <span class="keyword">true</span>,
795  <span class="key">"hostname"</span>: <span class="string">"github.com"</span>,
796  <span class="key">"a"</span>: [<span class="string">"140.82.121.3"</span>],
797  <span class="key">"aaaa"</span>: [],
798  <span class="key">"cname"</span>: [],
799  <span class="key">"reverse"</span>: {
800    <span class="string">"140.82.121.3"</span>: <span class="string">"lb-140-82-121-3-iad.github.com"</span>
801  },
802  <span class="key">"total_ips"</span>: <span class="number">1</span>,
803  <span class="key">"has_ipv4"</span>: <span class="keyword">true</span>,
804  <span class="key">"has_ipv6"</span>: <span class="keyword">false</span>,
805  <span class="key">"duration_ms"</span>: <span class="number">87</span>
806}</pre></div></div>
807                        </div></div></div>
808                    </div>
809
810                    <!-- GET /api/score/{ip} -->
811                    <div class="endpoint">
812                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
813                            <span class="method method-get">GET</span>
814                            <span class="endpoint-path">/api/score/<span class="param">{ip_or_hostname}</span></span>
815                            <span class="endpoint-desc">IP fraud risk score with threat indicators</span>
816                            <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>
817                        </div>
818                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
819                            <div class="params-grid">
820                                <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>
821                            </div>
822                            <div class="u-mt-16 code-tabs">
823                                <button class="code-tab active" onclick="switchTab(this,'curlS')">cURL</button>
824                                <button class="code-tab" onclick="switchTab(this,'jsS')">JavaScript</button>
825                                <button class="code-tab" onclick="switchTab(this,'pyS')">Python</button>
826                                <button class="code-tab" onclick="switchTab(this,'phpS')">PHP</button>
827                            </div>
828                            <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>
829                            <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>);
830<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
831console.log(data.score, data.risk, data.checks.hosting_asn);
832<span class="comment">// 54 "high" true</span></pre></div></div></div>
833                            <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">
833import</span> requests
834
835data = requests.get(<span class="string">'https://ipaddress.to/api/score/134.199.214.1'</span>).json()
836print(f<span class="string">"Score: {data['score']}/100 ({data['risk']})"</span>)
837print(f<span class="string">"Hosting: {data['checks']['hosting_asn']}"</span>)</pre></div></div></div>
838                            <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(
839    file_get_contents(<span class="string">'https://ipaddress.to/api/score/134.199.214.1'</span>),
840    <span class="keyword">true</span>
841);
842echo $data[<span class="string">'score'</span>] . <span class="string">' — '</span> . $data[<span class="string">'risk'</span>];</pre></div></div></div>
843                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
844  <span class="key">"success"</span>: <span class="keyword">true</span>,
845  <span class="key">"ip"</span>: <span class="string">"134.199.214.1"</span>,
846  <span class="key">"score"</span>: <span class="number">54</span>,
847  <span class="key">"risk"</span>: <span class="string">"high"</span>,
848  <span class="key">"vpn_provider"</span>: <span class="keyword">null</span>,
849  <span class="key">"rdns"</span>: <span class="keyword">null</span>,
850  <span class="key">"location"</span>: {
851    <span class="key">"country"</span>: <span class="string">"United States"</span>,
852    <span class="key">"country_code"</span>: <span class="string">"US"</span>,
853    <span class="key">"city"</span>: <span class="string">"Santa Clara"</span>,
854    <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> }
855  },
856  <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> },
857  <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> },
858  <span class="key">"checks"</span>: {
859    <span class="key">"hosting_asn"</span>: <span class="keyword">true</span>,
860    <span class="key">"datacenter_blocklist"</span>: <span class="keyword">true</span>,
861    <span class="key">"vpn_detected"</span>: <span class="keyword">false</span>,
862    <span class="key">"tor_exit"</span>: <span class="keyword">false</span>,
863    <span class="key">"blocklist_listed"</span>: <span class="keyword">true</span>,
864    <span class="key">"blocklist_count"</span>: <span class="number">3</span>,
865    <span class="key">"has_rdns"</span>: <span class="keyword">false</span>
866  },
867  <span class="key">"factors"</span>: [
868    { <span class="key">"name"</span>: <span class="string">"Hosting/Datacenter ASN"</span>, <span class="key">"impact"</span>: <span class="string">"medium"</span> },
869    { <span class="key">"name"</span>: <span class="string">"No Reverse DNS"</span>, <span class="key">"impact"</span>: <span class="string">"low"</span> },
870    { <span class="key">"name"</span>: <span class="string">"Datacenter Confirmed"</span>, <span class="key">"impact"</span>: <span class="string">"medium"</span> },
871    { <span class="key">"name"</span>: <span class="string">"Threat Intelligence"</span>, <span class="key">"impact"</span>: <span class="string">"high"</span> }
872  ],
873  <span class="key">"duration_ms"</span>: <span class="number">45</span>
874}</pre></div></div>
875                        </div></div></div>
876                    </div>
877
878                    <!-- GET /api/email/{email_or_domain} -->
879                    <div class="endpoint">
880                        <div class="endpoint-header" onclick="toggleEndpoint(this)" role="button" tabindex="0" aria-expanded="false">
881                            <span class="method method-get">
881GET</span>
882                            <span class="endpoint-path">/api/email/<span class="param">{email_or_domain}</span></span>
883                            <span class="endpoint-desc">Email auth score (MX, SPF, DMARC, disposable)</span>
884                            <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>
885                        </div>
886                        <div class="endpoint-body"><div class="endpoint-body-inner"><div class="endpoint-body-content">
887                            <div class="params-grid">
888                                <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>
889                            </div>
890                            <div class="u-mt-16 code-tabs">
891                                <button class="code-tab active" onclick="switchTab(this,'curlE')">cURL</button>
892                                <button class="code-tab" onclick="switchTab(this,'jsE')">JavaScript</button>
893                                <button class="code-tab" onclick="switchTab(this,'pyE')">Python</button>
894                                <button class="code-tab" onclick="switchTab(this,'phpE')">PHP</button>
895                            </div>
896                            <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>
897                            <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>);
898<span class="keyword">const</span> data = <span class="keyword">await</span> res.json();
899console.log(data.score, data.rating, data.checks.disposable);
900<span class="comment">// 100 "trusted" false</span></pre></div></div></div>
901                            <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
902
903data = requests.get(<span class="string">'https://ipaddress.to/api/email/[email protected]'</span>).json()
904print(f<span class="string">"Score: {data['score']}/100 ({data['rating']})"</span>)
905print(f<span class="string">"Disposable: {data['checks']['disposable']}"</span>)</pre></div></div></div>
906                            <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(
907    file_get_contents(<span class="string">'https://ipaddress.to/api/email/[email protected]'</span>),
908    <span class="keyword">true</span>
909);
910echo $data[<span class="string">'score'</span>] . <span class="string">' — '</span> . $data[<span class="string">'rating'</span>];</pre></div></div></div>
911                            <div class="u-mt-16 code-block"><div class="code-header"><span class="code-lang">Response</span></div><div class="code-content"><pre>{
912  <span class="key">"success"</span>: <span class="keyword">true</span>,
913  <span class="key">"query"</span>: <span class="string">"[email protected]"</span>,
914  <span class="key">"email"</span>: <span class="string">"[email protected]"</span>,
915  <span class="key">"domain"</span>: <span class="string">"gmail.com"</span>,
916  <span class="key">"target_type"</span>: <span class="string">"email"</span>,
917  <span class="key">"score"</span>: <span class="number">100</span>,
918  <span class="key">"rating"</span>: <span class="string">"trusted"</span>,
919  <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> },
920  <span class="key">"checks"</span>: {
921    <span class="key">"has_mx"</span>: <span class="keyword">true</span>,
922    <span class="key">"spf"</span>: <span class="keyword">true</span>,
923    <span class="key">"dmarc"</span>: <span class="keyword">true</span>,
924    <span class="key">"disposable"</span>: <span class="keyword">false</span>,
925    <span class="key">"role_based"</span>: <span class="keyword">false</span>,
926    <span class="key">"free_provider"</span>: <span class="keyword">true</span>
927  },
928  <span class="key">"is_disposable"</span>: <span class="keyword">false</span>,
929  <span class="key">"duration_ms"</span>: <span class="number">182</span>
930}</pre></div></div>
931                        </div></div></div>
932                    </div>
933                </div>
934                <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>
935            </div>
936        </section>
937
938        <section class="section v2 playground-section" id="playground">
939            <div class="container">
940                <div class="section-header">
941                    <div class="section-eyebrow">Try it live</div>
942                    <h2 class="section-title">API Playground</h2>
943                    <p class="section-desc">Test all APIs directly in your browser.</p>
944                </div>
945                <div class="playground">
946                    <div class="playground-header"><div class="playground-title"><div class="live-dot"></div>Live Testing</div></div>
947                    <div class="playground-body">
948                        <div class="playground-api-tabs">
949                            <button class="playground-api-tab active" onclick="switchPlayground('ip')" data-pg="ip">Lookup</button>
950                            <button class="playground-api-tab" onclick="switchPlayground('whois')" data-pg="whois">WHOIS</button>
951                            <button class="playground-api-tab" onclick="switchPlayground('resolve')" data-pg="resolve">Resolve</button>
952                            <button class="playground-api-tab" onclick="switchPlayground('score')" data-pg="score">Score</button>
953                            <button class="playground-api-tab" onclick="switchPlayground('email')" data-pg="email">Email</button>
954                        </div>
955                        <div class="playground-input-row">
956                            <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">
957                            <button class="btn btn-accent" onclick="runTest()">Run Test</button>
958                        </div>
959                        <div class="preset-btns" id="presetsIP">
960                            <button class="preset-btn" onclick="runTest()">My IP</button>
961                            <button class="preset-btn" onclick="runTest('8.8.8.8')">8.8.8.8</button>
962                            <button class="preset-btn" onclick="runTest('1.1.1.1')">1.1.1.1</button>
963                            <button class="preset-btn" onclick="runTest('208.67.222.222')">OpenDNS</button>
964                            <button class="preset-btn" onclick="runTest('9.9.9.9')">Quad9</button>
965                        </div>
966                        <div class="preset-btns" id="presetsWhois" style="display:none">
967                            <button class="preset-btn" onclick="runTest('google.com')">google.com</button>
968                            <button class="preset-btn" onclick="runTest('8.8.8.8')">8.8.8.8</button>
969                            <button class="preset-btn" onclick="runTest('cloudflare.com')">cloudflare.com</button>
970                            <button class="preset-btn" onclick="runTest('github.com')">github.com</button>
971                        </div>
972                        <div class="preset-btns" id="presetsResolve" style="display:none">
973                            <button class="preset-btn" onclick="runTest('google.com')">google.com</button>
974                            <button class="preset-btn" onclick="runTest('github.com')">github.com</button>
975                            <button class="preset-btn" onclick="runTest('cloudflare.com')">cloudflare.com</button>
976                            <button class="preset-btn" onclick="runTest('example.com')">example.com</button>
977                        </div>
978                        <div class="preset-btns" id="presetsScore" style="display:none">
979                            <button class="preset-btn" onclick="runTest('my')">My IP</button>
980                            <button class="preset-btn" onclick="runTest('8.8.8.8')">8.8.8.8</button>
981                            <button class="preset-btn" onclick="runTest('1.1.1.1')">1.1.1.1</button>
982                            <button class="preset-btn" onclick="runTest('104.28.5.100')">104.28.5.100</button>
983                        </div>
984                        <div class="preset-btns" id="presetsEmail" style="display:none">
985                            <button class="preset-btn" onclick="runTest('[email protected]')">gmail.com</button>
986                            <button class="preset-btn" onclick="runTest('github.com')">github.com</button>
987                            <button class="preset-btn" onclick="runTest('[email protected]')">mailinator.com</button>
988                            <button class="preset-btn" onclick="runTest('[email protected]')">[email protected]</button>
989                        </div>
990                        <div class="request-info" id="pgRequestInfo" style="display:none"><span class="request-info-method">
990GET</span><span class="request-info-url" id="pgRequestUrl"></span><span class="request-info-time" id="pgRequestTime"></span></div>
991                        <div class="response-panel">
992                            <div class="response-header">
993                                <div class="response-status pending" id="status">Ready</div>
994                                <div class="response-meta">
995                                    <button type="button" class="code-copy" id="pgCopyResponse" onclick="copyPlaygroundResponse()" style="display:none">Copy</button>
996                                    <div class="response-time" id="time">—</div>
997                                </div>
998                            </div>
999                            <div class="response-body" id="response"><pre><span class="comment">// Click "Run Test" or a preset to make a request</span></pre></div>
1000                        </div>
1001                    </div>
1002                </div>
1003            </div>
1004        </section>
1005
1006        <section class="section v2 approach-section" id="approach">
1007            <div class="container">
1008                <div class="section-header">
1009                    <div class="section-eyebrow">Under the hood</div>
1010                    <h2 class="section-title">A fraud score that <em>shows its work.</em></h2>
1011                    <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>
1012                </div>
1013
1014                <div class="approach-grid">
1015                    <article class="approach-card">
1016                        <div class="approach-icon" aria-hidden="true">
1017                            <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>
1018                        </div>
1019                        <h3>Privacy proxies, classified.</h3>
1020                        <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>
1021                    </article>
1022
1023                    <article class="approach-card">
1024                        <div class="approach-icon" aria-hidden="true">
1025                            <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>
1026                        </div>
1027                        <h3>A signal, not a black box.</h3>
1028                        <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>
1029                    </article>
1030
1031                    <article class="approach-card">
1032                        <div class="approach-icon" aria-hidden="true">
1033                            <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>
1034                        </div>
1035                        <h3>Real users don't get hit.</h3>
1036                        <p>
1036Major 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>
1037                    </article>
1038
1039                    <article class="approach-card">
1040                        <div class="approach-icon" aria-hidden="true">
1041                            <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>
1042                        </div>
1043                        <h3>Local-first. No per-query bill.</h3>
1044                        <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>
1045                    </article>
1046                </div>
1047
1048                <div class="approach-bench">
1049                    <div class="approach-bench-row">
1050                        <div class="approach-bench-stat">
1051                            <strong>14&thinsp;/&thinsp;16</strong>
1052                            <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>
1053                        </div>
1054                        <div class="approach-bench-stat">
1055                            <strong>64&nbsp;ms</strong>
1056                            <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>
1057                        </div>
1058                        <div class="approach-bench-stat">
1059                            <strong>$0</strong>
1060                            <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>
1061                        </div>
1062                    </div>
1063                    <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>
1064                </div>
1065            </div>
1066        </section>
1067
1068                <footer class="footer footer-v2">
1069            <div class="footer-inner">
1070                <div class="footer-hero">
1071                    <div class="footer-hero-copy">
1072                        <div class="footer-logo">
1073                            <img src="/images/logo.svg" class="footer-logo-img" alt="IPAddress.to logo" width="24" height="24">
1074                            <span>IPAddress<span class="footer-logo-suffix">.to</span></span>
1075                        </div>
1076                        <p class="footer-statement">Network intelligence, <em>answered in-house.</em></p>
1077                        <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>
1078                        <div class="footer-actions">
1079                            <a href="/api/docs/" class="btn btn-accent" data-nav>API documentation</a>
1080                            <a href="/account/" class="btn btn-secondary" data-nav>Get an API key</a>
1081                        </div>
1082                    </div>
1083                    <div class="footer-live">
1084                        <a href="/status/" class="footer-status is-operational" data-nav data-footer-status>
1085                            <i aria-hidden="true"></i>
1086                            <span data-footer-status-label>All systems operational</span>
1087                            <small>Status &rarr;</small>
1088                        </a>
1089                        <div class="footer-metrics">
1090                            <div><b data-stat="per_min">—</b><span>requests / min</span></div>
1091                            <div><b data-stat="req_24h">—</b><span>requests · 24 h</span></div>
1092                            <div><b data-stat="feeds">96</b><span>threat feeds</span></div>
1093                        </div>
1094                        <div class="footer-extensions">
1095                            <a href="https://chromewebstore.google.com/detail/ipaddressto-lookup/jblhckhmjccldbdocmfnhpiggcacjppf" class="footer-ext-card" target="_blank" rel="noopener" aria-label="Install Chrome extension">
1096                                <img src="/svg/chrome.svg?v2" alt="" width="20" height="20" loading="lazy" decoding="async">
1097                                <span class="footer-ext-text"><span class="footer-ext-label">Get the</span><span class="footer-ext-name">Chrome extension</span></span>
1098                            </a>
1099                            <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">
1100                                <img src="/svg/firefox.svg" alt="" width="20" height="20" loading="lazy" decoding="async">
1101                                <span class="footer-ext-text"><span class="footer-ext-label">Get the</span><span class="footer-ext-name">Firefox addon</span></span>
1102                            </a>
1103                        </div>
1104                    </div>
1105                </div>
1106
1107                <div class="footer-cols">
1108                    <div class="footer-col">
1109                        <h3 class="footer-col-title">Tools</h3>
1110                        <a href="/">My IP</a>
1111                        <a href="/lookup/">Lookup</a>
1112                        <a href="/dns/">DNS</a>
1113                        <a href="/hostname/">Hostname</a>
1114                        <a href="/email/">Email Check</a>
1115                        <a href="/whois/">WHOIS</a>
1116                        <a href="/resolve/">Resolve</a>
1117                        <a href="/ip/">IP Details</a>
1118                        <a href="/score/">Fraud Score</a>
1119                    </div>
1120                    <div class="footer-col">
1121                        <h3 class="footer-col-title">Developers</h3>
1122                        <a href="/api/docs/">API Docs</a>
1123                        <a href="/account/">Account &amp; API Keys</a>
1124                        <a href="/#playground">Playground</a>
1125                        <a href="/status/">System Status</a>
1126                        <a href="/#approach">How the score works</a>
1127                    </div>
1128                    <div class="footer-col">
1129                        <h3 class="footer-col-title">Company</h3>
1130                        <a href="/blog/">Blog</a>
1131                        <a href="/status/">Status</a>
1132                        <a href="/contact/">Contact</a>
1133                        <a href="/terms/">Terms of Service</a>
1134                        <a href="/privacy/">Privacy Policy</a>
1135                    </div>
1136                    <div class="footer-col">
1137                        <h3 class="footer-col-title">More Tools</h3>
1138                        <a href="https://onlinemicrophonetest.com/" target="_blank" rel="noopener">Online Microphone Test</a>
1139                        <a href="https://onlinewebcamtest.com/" target="_blank" rel="noopener">Online Webcam Test</a>
1140                    </div>
1141                </div>
1142
1143                <div class="footer-bottom">
1144                    <span class="footer-copy">&copy; 2026 IPAddress.to. All rights reserved.</span>
1145                    <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>
1146                </div>
1147            </div>
1148        </footer>
1149
1150    </main><!-- /#swup -->
1151
1152                
1152<script src="/js/Swup.umd.js" data-swup-ignore-script></script>
1152
1153    
1153<script src="/js/app.js?v=1.40.0" data-swup-ignore-script></script>
vendor: 1 bytes, line 1153
1153
1154<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>
1154
1155</body>
1156</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.