Skip to content
VPNDetection
API

The VPN and proxy detection API

A single GET returns every anonymity flag we hold for an address, each one carrying the provider behind it and how strongly it is supported. One POST answers up to 1,000 at once.

Try it on an address

Pick an address and read the response. You don't need an SDK or a key.

GETapi.vpndetection.io/

Errors and limits

A limit hit, a revoked key and an address we have nothing on answer the same way every time, with a status code your code can branch on.

100k req/s
Throughput, scaled out to your traffic
~1 ms
Median server time, without a key
When it fails
HTTP/1.1 429 Too Many Requests
Retry-After: 1
{
"error": "rate limit exceeded"
}
200Resolved. The flags and their supporting detail are in the body.
400Not a valid IPv4 or IPv6 address.
401Key unknown, revoked or expired.
403Sent from an address the key does not allow.
429Rate limited, or an allowance is spent.
5xxOurs. Retry with backoff, which every SDK already does.
Retry-After

The header tells the two 429s apart. Present means a transient rate limit and retrying works; absent means an allowance is spent and retrying will not help.

Retries

Retry with backoff and jitter. The next attempt lands on a healthy edge. Every official client does this for you.

Bogons

The SDKs never send them. Private, loopback, link-local, documentation and multicast ranges, including 6to4 and Teredo, answer with every flag false. Sent to the API directly, they count against a keyless or Free plan allowance and cost nothing on a paid plan.

Twelve official clients, plus middleware for the web frameworks built on them. Install commands are in the docs.

On this page

Which fields come back?

ip and is_vpn without a key. A free key adds Tor, relay, location and asn, and every paid plan answers every field, the same on each, as the pricing page lays out. A flag your plan includes is always in the response, true or false, and its detail object is {} when the flag is false. A field your plan doesn't include is left out, so a missing key means not in your plan, never no.

00 · No key

Start without signing up.

Paste it into a terminal. No account needed. 1,000 lookups a day per address, answering ip and is_vpn.

curl "https://api.vpndetection.io/146.70.116.130"
{
"ip": "146.70.116.130",
"is_vpn": true
}
01 · Free key

Sign up and get 50,000 requests a month.

No card and no sales call: the key is issued on signup.
Every request flags VPN IPs.
Upgrade only when you outgrow the allowance.