Account takeover
Credential stuffing and password guessing often run over Tor to hide their source.
Detect Tor exit nodes with an API that refreshes every hour and remembers recent exits.
Tor sends a visitor’s traffic through several volunteer-run relays, so your site only sees the last one, the exit node. It gives strong anonymity, which is why it’s popular for abuse that needs to stay hidden.
VPN Blocker refreshes the list of Tor exits every hour. Look up an IP and categories contains tor when it’s a current exit, or one seen in the last 7 days, with a confidence score that tells you which.
GET https://api.vpnblocker.net/v2/json/185.220.101.33
{
"status": "success",
"package": "Professional",
"remaining_requests": 987652,
"ipaddress": "185.220.101.33",
"host-ip": false,
"categories": ["tor"],
"confidence": 98,
"hostname": "tor-exit-33.for-privacy.net",
"org": "Stiftung Erneuerbare Freiheit",
"country": {
"name": "Germany",
"code": "DE"
},
"subdivision": {
"name": "Brandenburg",
"code": "BB"
},
"city": "Brandenburg an der Havel",
"postal": "14621",
"location": {
"lat": 52.6171,
"long": 13.1207
}
}
Check categories for tor. Add confidence ≥ 90 to match only current exits, or ≥ 70 to include exits seen in the last 7 days.
JavaScript
const r = await lookup(ip); // see the guides for lookup()
const isTor = r !== null && r.categories.includes('tor') && r.confidence >= 90;
PHP
$r = vpnblocker_lookup($ip); // see the guides for vpnblocker_lookup()
$isTor = $r !== null && in_array('tor', $r['categories'], true) && $r['confidence'] >= 90;
Python
r = lookup(ip) # see the guides for lookup()
is_tor = r is not None and "tor" in r["categories"] and r["confidence"] >= 90
Full walkthroughs: PHP · Node.js · Python · game servers and Discord
Credential stuffing and password guessing often run over Tor to hide their source.
Very few genuine purchases come from Tor. Many card fraud attempts do.
Stop anonymous accounts from coming back after a ban.
Keep banned players and trolls from rejoining.
Allow Tor for reading, and ask for extra checks before sign-up, posting or payment.
Meet rules that require you to know roughly where your users are.
We refresh Tor exits every hour. An address that has stopped being an exit is still reported as tor for 7 days, with a lower confidence, because exits often come back.
host-ip describes the network an IP belongs to, while tor describes the IP itself. A Tor exit on a home or university connection is host-ip: false with categories: ["tor"]. If you block Tor, check categories.
No, only exits. Traffic from the Tor network reaches your site from an exit, so exits are the addresses you see.
About an hour, and never longer than a day, because the list of exits changes often.
Yes, including the Free plan.
Create a free account and make your first lookup in minutes. 10,000 lookups a month at no charge.