# VPNDetection Launched: VPN, proxy and Tor checks in one API call

VPNDetection tells you if an IP address is a VPN, proxy, Tor node or hosting in one API call, with a free plan, SDKs in twelve languages and a console.

[VPNDetection](https://vpndetection.io) is now launched: one API call that tells you whether an IP address is a VPN, a proxy, a Tor node, hosting, a privacy relay or a CDN edge, and the evidence behind each answer. It answers without a key, the free plan takes 50,000 lookups a month, and there are SDKs in twelve languages and middleware for the frameworks you already run.

## One call, eight checks

`GET https://api.vpndetection.io/{ip}` takes IPv4 and IPv6 on the same endpoint; `GET /myip` classifies the caller's own address, and `POST /batch` takes up to 1,000 at once. Here is a Mullvad server from Mullvad's own relay list, looked up on October 7 with a Max key:

```sh
curl "https://api.vpndetection.io/193.32.248.66" \
  -H "Authorization: Bearer $VPNDETECTION_API_KEY"
```

```json
{
  "ip": "193.32.248.66",
  "is_vpn": true,
  "is_hosting": true,
  "is_relay": false,
  "is_tor": false,
  "is_cdn": false,
  "is_resproxy": false,
  "is_dcproxy": false,
  "is_mobproxy": false,
  "vpn": {
    "provider": "mullvad",
    "last_seen": "2026-10-06",
    "confidence": "high",
    "method": "scan"
  },
  "hosting": {
    "provider": "",
    "confidence": "medium",
    "last_seen": "2026-10-06"
  },
  "relay": {},
  "tor": {},
  "cdn": {},
  "resproxy": {},
  "dcproxy": {},
  "mobproxy": {}
}
```

Each flag answers one question, and the object behind it says who and how strongly:

| Flag | True when the address is |
|---|---|
| `is_vpn` | a commercial VPN exit, its operator named |
| `is_hosting` | leased hosting or cloud space |
| `is_tor` | a Tor node |
| `is_relay` | a platform privacy relay, such as iCloud Private Relay |
| `is_cdn` | a content-delivery edge |
| `is_resproxy` | seen in a residential proxy pool in the last 90 days |
| `is_dcproxy` | seen in a datacenter proxy pool in the same window |
| `is_mobproxy` | seen in a mobile proxy pool on carrier space |

An empty object means we looked and nothing matched. A field your plan doesn't include is left out, so read a missing one as a question you didn't buy an answer to, never as a no. The data behind every flag is rebuilt daily: on October 7 the homepage counted 141M anonymous IPs, 789M hosting IPs and 3.2K providers. A provider's id stays the same from one build to the next, so a rule you key on it keeps working as its ranges move. Each answer is an inference from measurement and published records, and can be wrong or go stale, so don't make one the only reason to turn someone away. The [docs](https://docs.vpndetection.io/api) have the full response and every status code.

## Plans

| Plan | Price | Lookups a month | What it adds |
|---|---|---|---|
| No key | free | 1,000 a day per address | `ip` and `is_vpn` |
| Free | free | 50,000 | the same, on your own key |
| Starter | $19 a month | 250,000 | the hosting, Tor, relay and CDN flags, the VPN's provider and when it was last seen |
| Scale | $99 a month | 2,000,000 | the detail behind those flags, and the three proxy flags |
| Max | $199 a month | 5,000,000 | every field, confidence and method included |

The free key needs no card and no sales call. Paying yearly gets two months free, and past its quota a paid plan charges $0.09, $0.07 or $0.05 per thousand lookups, up to a ceiling you set, or zero to stop at the quota. Enterprise is priced to your volume, with agreed response times and a named contact. [Pricing](https://vpndetection.io/pricing) has every field side by side.

## SDKs, middleware and tools

Twelve SDKs, each on its language's own registry: Node.js, Python, Go, Java, .NET, PHP, Ruby, Rust, Swift, Erlang, Perl and Zig. They answer private and reserved addresses without a request and retry a failed call with backoff. Fifteen middlewares put the check in front of your routes: Express, Fastify and Next.js; Django, Flask and FastAPI; Laravel and Symfony; Rails; Spring Boot; ASP.NET Core; Gin and Go's net/http; Axum; and Cowboy. Each classifies every visitor and refuses nobody until you give it a condition to refuse on. The [integrations](https://docs.vpndetection.io/integrations) page has the install line for each.

Beside them sit:

- a [CLI](https://docs.vpndetection.io/integrations/cli), from Homebrew, apt, Chocolatey or Docker, that looks up addresses, ranges and whole files;
- an [MCP server](https://docs.vpndetection.io/integrations/mcp), hosted or run locally and listed in the official MCP registry, for assistants and agents;
- a [Claude](https://docs.vpndetection.io/integrations/claude) connector and Claude Code plugin.

Every SDK can also sign a person in to VPNDetection with OAuth, so a tool you build can look addresses up on its user's own keys.

## The console

[app.vpndetection.io](https://app.vpndetection.io) is where your keys live:

- **API keys**: create one with its own permissions and the addresses it may be used from, then rotate or revoke it.
- **Analytics**: your requests over time, by status, client address or user agent, exportable.
- **Billing**: your plan, monthly or yearly, the overage ceiling, and invoices.
- **Your account**: sign in with a passkey, Google or GitHub, two-factor by app or email, and every session and connected app, the CLI and Claude included.

## Databases

Each flag comes from a database we rebuild daily, and all eight are sold as files: [VPN IP](https://vpndetection.io/databases/vpn-ip), [Hosting IP](https://vpndetection.io/databases/hosting-ip), [Tor IP](https://vpndetection.io/databases/tor-ip), [Relay IP](https://vpndetection.io/databases/relay-ip), [CDN IP](https://vpndetection.io/databases/cdn-ip), [Residential Proxy IP](https://vpndetection.io/databases/residential-proxy-ip), [Datacenter Proxy IP](https://vpndetection.io/databases/datacenter-proxy-ip) and [Mobile Proxy IP](https://vpndetection.io/databases/mobile-proxy-ip). Each ships as CSV, all but one also as MMDB for standard MMDB readers, with a checksum for every file and a sample cut from the current build, on request for the three proxy databases. They're licensed per database: [talk to us](https://vpndetection.io/contact) about yours.

## Free on the site

Some of it needs no account at all: a page for any address, with its JSON; the IPv4 space [by block](https://vpndetection.io/ips); the [bogon ranges](https://vpndetection.io/bogon); and [For AI agents](https://vpndetection.io/ai-agents), the API's contract for an autonomous client. The [API page](https://vpndetection.io/api) runs a lookup with no key.

## Guides on the blog

The blog has the guides that go with it: detecting VPN users in [Express.js](https://vpndetection.io/blog/detect-vpn-users-express-js), [Django](https://vpndetection.io/blog/detect-vpn-users-django) and [PHP and WordPress](https://vpndetection.io/blog/detect-vpn-users-php-wordpress), blocking VPN players on [Minecraft](https://vpndetection.io/blog/block-vpn-players-minecraft-velocity-paper), and what the [Online Safety Act](https://vpndetection.io/blog/online-safety-act-vpn-detection) and [Utah SB 73](https://vpndetection.io/blog/utah-sb-73-vpn) mean for a site that checks for VPNs. Two more look at the data: whether to block [iCloud Private Relay](https://vpndetection.io/blog/block-icloud-private-relay), and [how long residential proxy IPs last](https://vpndetection.io/blog/how-long-do-residential-proxy-ips-last).

## Getting started

[Sign up](https://app.vpndetection.io/auth/signup) for a free key with GitHub, Google or an email address, and the [docs](https://docs.vpndetection.io) take it from your first lookup to your first rule. [Pricing](https://vpndetection.io/pricing) has every plan, and the [contact form](https://vpndetection.io/contact) reaches us about databases, a misclassified address or anything else.

