VPN, Proxy, Tor and Hosting
Every answer says what kind of address it is (VPN, proxy, Tor exit or hosting) and comes with a confidence score. Block exactly what you want, as strictly as you want.
A Service tracking over 125 Million VPN and Hosting IP Addresses
One API call tells you if an IP is a VPN, proxy, Tor exit or hosting address, and how sure we are.
No charge · 10,000 free lookups a month
Every answer says what kind of address it is (VPN, proxy, Tor exit or hosting) and comes with a confidence score. Block exactly what you want, as strictly as you want.
Our API supports output in JSON, XML, and HTML, giving you the flexibility to choose the format that works best for your application. Authenticate with your API key and easily integrate our API into your existing workflow, platform, or development environment.
Our machine learning models categorize networks continuously, and every change goes live straight away, with no deploys or downtime on your side. Tor exits are refreshed every hour, and fixes from IP reports apply to every customer at once.
Start free with 10,000 lookups a month, then scale up to 5 million. Every plan includes the dashboard, usage stats and alerts, and IP reports. Paid plans keep working 10% past their limit, so a busy month won't cut you off by surprise.
VPN Blocker is an API that detects IP addresses belonging to VPN, proxy, Tor and hosting networks, so you can keep fraud, abuse and ban evasion away from your payment pages, sign-up forms, game servers and chat rooms.
Each lookup tells you who owns the network, what kind of address it is and how confident we are. Pick an example to see a full Professional response:
A Hetzner server in Nuremberg, Germany. It’s a data center address, so host-ip is true and the category is hosting.
A commercial VPN server in Gothenburg, Sweden. It has no reverse DNS name, so hostname is the IP itself.
A current Tor exit. tor is about the IP, not its network, so host-ip stays false.
A home connection in Canada. Nothing to flag: categories is empty and confidence is 80.
Hosting: A Hetzner server in Nuremberg, Germany. It’s a data center address, so host-ip is true and the category is hosting.
GET https://api.vpnblocker.net/v2/json/116.203.10.10
{
"status": "success",
"package": "Professional",
"remaining_requests": 987654,
"ipaddress": "116.203.10.10",
"host-ip": true,
"categories": ["hosting"],
"confidence": 90,
"hostname": "static.10.10.203.116.clients.your-server.de",
"org": "Hetzner Online GmbH",
"country": {
"name": "Germany",
"code": "DE"
},
"subdivision": {
"name": "Bavaria",
"code": "BY"
},
"city": "Nuremberg",
"postal": "90403",
"location": {
"lat": 49.4527,
"long": 11.0783
}
}
VPN: A commercial VPN server in Gothenburg, Sweden. It has no reverse DNS name, so hostname is the IP itself.
GET https://api.vpnblocker.net/v2/json/185.213.154.68
{
"status": "success",
"package": "Professional",
"remaining_requests": 987653,
"ipaddress": "185.213.154.68",
"host-ip": true,
"categories": ["vpn"],
"confidence": 90,
"hostname": "185.213.154.68",
"org": "31173 Services AB",
"country": {
"name": "Sweden",
"code": "SE"
},
"subdivision": {
"name": "Västra Götaland County",
"code": "O"
},
"city": "Gothenburg",
"postal": "415 02",
"location": {
"lat": 57.7065,
"long": 11.967
}
}
Tor exit: A current Tor exit. tor is about the IP, not its network, so host-ip stays false.
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
}
}
Home ISP: A home connection in Canada. Nothing to flag: categories is empty and confidence is 80.
GET https://api.vpnblocker.net/v2/json/70.68.0.1
{
"status": "success",
"package": "Professional",
"remaining_requests": 987651,
"ipaddress": "70.68.0.1",
"host-ip": false,
"categories": [],
"confidence": 80,
"hostname": "70.68.0.1",
"org": "Shaw Communications",
"country": {
"name": "Canada",
"code": "CA"
},
"subdivision": {
"name": "British Columbia",
"code": "BC"
},
"city": "Maple Ridge",
"postal": "V2X",
"location": {
"lat": 49.222,
"long": -122.6181
}
}
Create a free account and copy your API key from the dashboard. No charge, 10,000 lookups a month.
Send your visitor’s IP address in one HTTPS request and get JSON, XML or HTML back.
Block, challenge or allow based on categories and confidence, as strictly as you need.
Keep banned players from coming straight back through a VPN, and stop alt accounts made from cloud servers.
Any planSpot sign-ups, referral and coupon claims from VPNs, proxies and data centers before they cost you.
Any planFlag checkouts from anonymizing networks, and compare the IP’s country with the card’s billing country.
Professional and upKeep each entry to one real person by turning away entries from VPNs, proxies and Tor.
Any planEnforce regional rights with country and region data, and catch VPNs used to get around them.
Professional and upHosting addresses are where most bots run. Rate-limit or challenge them without bothering home users.
Any planEach example blocks hosting, VPN and proxy addresses and Tor exits, and lets users through if a lookup fails.
curl
curl -s -H "X-API-KEY: $VPNBLOCKER_KEY" https://api.vpnblocker.net/v2/json/185.220.101.1
PHP
<?php
function shouldBlock(string $ip): bool
{
$ch = curl_init('https://api.vpnblocker.net/v2/json/' . rawurlencode($ip));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['X-API-KEY: ' . getenv('VPNBLOCKER_KEY')],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 3,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($body === false || $status !== 200) {
return false; // fail open: don't block users if the lookup fails
}
$r = json_decode($body, true);
return $r['host-ip'] === true || in_array('tor', $r['categories'] ?? [], true);
}
JavaScript
async function shouldBlock(ip) {
try {
const res = await fetch(`https://api.vpnblocker.net/v2/json/${encodeURIComponent(ip)}`, {
headers: { 'X-API-KEY': process.env.VPNBLOCKER_KEY },
signal: AbortSignal.timeout(3000),
});
if (!res.ok) return false; // fail open: don't block users if the lookup fails
const r = await res.json();
return r['host-ip'] === true || (r.categories ?? []).includes('tor');
} catch {
return false;
}
}
Python
import os
import requests
def should_block(ip: str) -> bool:
try:
res = requests.get(
f"https://api.vpnblocker.net/v2/json/{ip}",
headers={"X-API-KEY": os.environ["VPNBLOCKER_KEY"]},
timeout=3,
)
except requests.RequestException:
return False # fail open: don't block users if the lookup fails
if res.status_code != 200:
return False
r = res.json()
return r["host-ip"] is True or "tor" in r.get("categories", [])
Step-by-step guides: PHP · Node.js · Python · game servers and Discord · API docs
Report it from the dashboard on any plan. Reports are free, don’t use up lookups, and we look into every one. When we fix a result, the fix applies to every customer straight away.
VPN servers, proxy networks (including confirmed open proxies), Tor exit nodes, privacy relays such as Apple iCloud Private Relay, and hosting or data center addresses. Every answer says which of these an IP is (its categories) and comes with a confidence score showing how sure we are.
No IP list is perfect, so every answer comes with a confidence score instead of a bare yes or no. The higher the score, the surer we are, so you choose how strict to be. If we get an IP wrong, you can report it.
Yes. The Free plan includes 10,000 lookups a month with categories, confidence and network owner. It needs a card on file when you sign up, but the card is never charged.
JSON, XML or HTML, always over HTTPS. Send your API key in the URL or in an X-API-KEY header. See the API docs.
Paid plans keep working up to 110% of their limit, so a busy month won’t cut you off by surprise. After that, and at 100% on the Free plan, the API returns HTTP 429 until usage resets on the 1st of the month. You get email alerts as you get close.
Yes, and it saves lookups. Network results rarely change, but Tor exits change every hour: if you block Tor, cache for about an hour, and never longer than a day.
Report it under Report an IP in the dashboard. Reports are free on every plan and don’t use up lookups. We review every report, and a fix applies to every customer straight away.
Create a free account and make your first lookup in minutes. Upgrade only when you need more.