Skip to content
iplogs.com

Changelog

Changes to the API at /v1 and to what it detects, newest first. Fields are only ever added within /v1; a change that could break an integration is marked as such. The full request and response format is in the docs and the OpenAPI spec.

  • Added

    Self-check scores DNS leaks on datacenter connections

    When you check your own connection from a datacenter address and your browser's DNS lookup comes from a home ISP in another country, the self-check now counts it as a VPN or proxy that leaks DNS (new signal dns_leak, weight 0.50). Public resolvers such as Google, Cloudflare and Quad9 never count.

  • Added

    Self-check spots VPN tunnels that exit on datacenter addresses

    When your own device opened the connection but with a tunnel's packet size (as WireGuard, OpenVPN or IKEv2 set it) and it arrives from a datacenter address, the self-check now reads it as a VPN (new signal hosting_tunnel_mss, weight 0.50). Later lookups of that address remember it.

  • Added

    Self-check spots proxies on datacenter addresses

    When you check your own connection from a datacenter address and the TCP connection was opened by a different operating system than your browser's, a proxy server re-opened it. That now reads as a proxy (new signal hosting_stack_mismatch, weight 0.60, sets is_proxy), and later lookups of that address remember it.

  • Added

    OpenAPI 3.1 spec at /openapi.json

    The spec covers /v1/check, /v1/bulk-check, /v1/ip and /v1/health, with every response flag, rate-limit header and error status. It is built from the same field tables as the docs, so the two stay in step.

  • Added

    DNS leak test and /v1/dns-leak

    A public DNS leak test page is live, backed by GET /v1/dns-leak, which returns the resolvers that asked for your test tokens with their network, country and hosting status. It reports a leak only when a resolver sits on an ISP network other than your connection's, so public resolvers such as Google or Quad9 are not flagged.

  • Added

    Typed crawler object on verified search and AI crawlers

    Addresses inside a crawler operator's own published ranges now return a crawler object with name, operator and purpose (search, ai_training, ai_search, user_fetch, archive, seo, monitor, crawler or ai), alongside is_crawler. Nine more crawler and monitor range lists were added; the verdict is unchanged and a forged User-Agent gets nothing.

  • Added

    is_satellite flag

    Addresses on satellite and in-flight Wi-Fi networks return is_satellite: true, in fast mode too. Round-trip and SYN checks are skipped on these links, because satellite TCP accelerators used to make real users look like proxies.

  • Added

    IKEv1/L2TP and SoftEther handshake detection

    A new active probe recognises servers that speak only IKEv1 Main Mode, which covers L2TP/IPsec and SoftEther. The IKEv2 probe also now accepts notify-style replies, and a leak in the probe code that held sockets open was fixed.

  • Added

    More VPN exit coverage: CyberGhost, AirVPN and numbered fleets

    About 65,000 CyberGhost server addresses, 185 AirVPN exit addresses (users leave from an address that differs from the entry list) and 632 servers across six more providers are now detected. The independent CyberGhost sample went from 92% to 100% in fast mode.

  • Added

    IP reputation page

    A new /ip-reputation page explains the reputation field returned by /v1/check. Only abuse evidence blocklists an address; a non-clean verdict without abuse greylists it, and clean, CDN or public-DNS addresses are allowlisted.

  • Fixed

    CDN fronts and accept-everything hosts no longer read as tunnels

    Several CDN and DDoS-protection networks, and hosts that answer every request, were read as VPN or proxy servers. They now read as hosting or clean, and free V2Ray fronts that resolve to shared reverse proxies no longer count as proxy exits. False positives on a 5,000-address top-website sample fell to 0.18%.

  • Changed

    Accuracy page refreshed

    The full-depth benchmark was re-run on the 2,831-address corpus: all 1,722 commercial VPN servers detected and 4 of 951 ordinary addresses flagged as VPN. VPN Gate recall in fast mode measured 94 of 97 live servers.

  • Incident

    About 3 minutes of slow or failed responses, 12:42 to 12:45 UTC

    An internal research job exhausted memory on the host and made the site and API unresponsive for about 3 minutes. Services did not restart and no data was lost; such jobs now run under a hard memory limit.

  • Added

    IPv4 and IPv6 rows in the self-check, via /v1/ip

    GET /v1/ip returns the caller's own address and family, and is served on ipv4.iplogs.com (IPv4 only) and ipv6.iplogs.com (IPv6 only). The self-check page uses it to show both addresses.

  • Changed

    Full-depth checks roughly twice as fast

    A full check now takes about 3.0 to 3.3 seconds instead of 6.5, with no detection lost. Fast mode is unchanged at microseconds.

  • Added

    Direct OpenVPN handshake on TCP/443 and TLS relay probe

    Active probing now sends a real OpenVPN handshake on TCP 443, and recognises TLS relays (such as REALITY) that borrow a CDN-fronted site's certificate. Hosting addresses that answered a handshake are also remembered, so fast and bulk lookups benefit.

  • Added

    VPN brand certificates read the issuer

    The brand-certificate probe now also matches private certificate authorities named after a VPN brand, which adds roughly 690 CyberGhost rack hosts and five more brands. Generic names containing "proxy" or a hoster's name no longer count.

  • Fixed

    Private Relay reads the same in every mode and in ip_info

    iCloud Private Relay addresses now read suspicious and relay, never VPN, whichever network hosts the egress. ip_info.is_vpn also now matches the top-level is_vpn instead of showing true on a relay address.

  • Fixed

    CDN edges no longer read as VPN servers

    Edge servers of several CDNs were detected as VPN or proxy servers. Edges are now recognised from the operators' published ranges, and 47 more edges stopped reading is_vpn.

  • Changed

    Self-checks stay on TCP

    api.iplogs.com now tells browsers to stay off HTTP/3, so every browser self-check can be read for TLS fingerprint, handshake timing and connection details. Before, 16 to 28% arrived over HTTP/3 and could not be assessed.

  • Added

    ISP-proxy pools detected as is_proxy in fast and bulk mode

    Pools of static ISP proxy addresses that our weekly checks confirm now return is_proxy with proxy_type isp in every mode, not only full checks. Mobile-carrier addresses are weighted lower, since carrier NAT shares one address among many people.

  • Fixed

    Guide snippets no longer trust proxy headers blindly

    The Node.js and Python integration guides took the client IP from CF-Connecting-IP or X-Forwarded-For without checking who sent it, so a client could pick its own address. The guides now only trust those headers from your own proxy.

  • Fixed

    Placeholder cities for Pakistani addresses removed

    Some Pakistani ISP blocks were shown at the ISP's registered head office in Islamabad. That placeholder city is no longer shown.

  • Changed

    A VPN handshake on a home or mobile line reads suspicious, not VPN

    A single VPN handshake on a residential line is usually a router's own VPN server, so those addresses now read suspicious instead of is_vpn. This removed the home-broadband false positives from our benchmark.

  • Added

    Opera Mini and Turbo page proxies flagged as relays

    Addresses of Opera's data-saving page proxies now match a browser_proxy signal and set is_relay. They read suspicious, not VPN.

  • Added

    Cloudflare WARP detection over IPv4 and IPv6

    WARP is now recognised from Cloudflare's own published egress ranges, so it works in fast and bulk mode and for IPv6, where it was previously missed. ProtonVPN IPv6 servers were added at the same time.

  • Added

    proxy_type on /v1/check and bulk rows

    Whenever is_proxy is true, proxy_type names the kind: residential, isp, public or datacenter. Tor and Private Relay keep their own flags and get no type.

  • Fixed

    Fewer false positives on Cloudflare and Google edge addresses

    Cloudflare website ranges no longer read as WARP, and a Google load balancer that answers on every port no longer reads as a VPN. The full benchmark's false-positive rate moved from 0.9% to 0.6%.

  • Added

    is_tor, is_relay and is_hosting flags

    /v1/check now splits the verdict by kind, so you can allow iCloud Private Relay or WARP while blocking VPNs. The flags are present in fast mode, and bulk rows include them when true.

  • Added

    last_seen on signals

    signals[].last_seen (UTC) shows when our data last confirmed the address, such as the last refresh of the server list that contains it. It is omitted when unknown.

  • Added

    is_crawler for verified search and AI crawlers

    Addresses inside the published ranges of Google, Bing, OpenAI, Apple, Perplexity, DuckDuckGo, Common Crawl and Anthropic crawlers return is_crawler and a zero-weight known_crawler signal. Verdicts are unchanged, so blocking suspicious addresses can now exempt search engines.

  • Added

    Recently listed servers: vpn_relay_recent

    An address that was on a published VPN server list in the last days but is not in the latest copy now returns vpn_relay_recent, instead of reading clean. Weight decays with age.

  • Fixed

    Tor list survives a bad restart; retries after failure

    After an API restart the Tor exit list could stay empty until the next hourly refresh, so some exits read vpn_likely instead of vpn_detected. Fetches now retry, either source alone is enough, and the last good list is kept.

  • Changed

    Docs corrected, six languages, status examples

    The docs now state that timezone, language, webrtc_ip and user_agent are only used on a browser self-check, and ignored when an ip is supplied. Added tested examples in cURL, Node.js, Python, PHP, Go and Java, and a sample response per status code.

  • Fixed

    ASN pages and the ASN CSV no longer overclaim

    ASN pages and /data/vpn-asns.csv used to say any address on certain hosting ASNs was a confirmed VPN exit. The vpn category now lists only operators that are VPN companies; busy hosting networks are labelled datacenter.

  • Added

    VPN provider coverage passes 100 providers

    Server lists for 114 providers were connected by this date, up from 57 the day before, by reading each provider's own published lists and verified server names.

  • Fixed

    Public DNS servers briefly read as a VPN

    For a short time 1.1.1.1, 8.8.8.8, 9.9.9.9 and similar public resolvers were returned as a VPN provider's servers, because a scraped page listed them. The data was removed and no list can ingest a public resolver any more.

  • Added

    Self-learned VPN exits: learned_vpn_exit

    A hosting address caught relaying by our own self-checks, and named by no list, now returns learned_vpn_exit at 0.30 to 0.55, which reads suspicious and never vpn_detected. It is forgotten when a later self-check shows a direct connection and deleted 30 days after it was last seen.

  • Changed

    Redesigned iplogs.com is live

    The new home, IP lookup, docs, bulk and blog pages replaced the old site, with the same URLs and canonical tags kept. Articles are published on a schedule, not backdated.

  • Incident

    About 2 minutes of 502 errors, 20:57 to 20:59 UTC

    A faulty dashboard deploy left the site without a built front end and every page returned 502. It was restored from backup within about 2 minutes, and deploys now restore the previous build automatically if the new one fails.

  • Changed

    Rate limits and daily quota published

    Limits are per client IP (IPv6 per /64): 60 requests per minute on /v1/check, a lower rate on bulk, and 1,000 full-depth lookups per UTC day. Past the daily quota the API still answers 200, in fast mode, and X-RateLimit-Limit/Remaining/Reset headers are returned on charged responses.