API

One address in.
Every signal out.

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.

Send a request. Read the answer.

No SDK and no key needed to try it — pick an address and read the body. Every flag arrives with the provider behind it and how strongly it is supported.

GETapi.vpndetection.io/

Robustness and scale.
Built in.

The happy path is the easy part. What matters at volume is that the awkward cases — a limit hit, a key rotated, an address we have nothing on — answer the same way every time, with a status you can branch on instead of a guess.

100k req/s
Throughput to handle your needs at scale.
< 5 ms
Low latency, super fast responses.
When it fails
HTTP/1.1 429 Too Many Requests
Retry-After: 30
{
"error": "rate_limited",
"message": "Retry in 30s."
}
200Resolved. The flags and their supporting detail are in the body.
400Not a valid IPv4 or IPv6 address.
401Key missing, revoked or not yet active.
429Rate limited, or the monthly allowance is spent.
5xxOurs. Retry with backoff — 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

A 5xx is ours, not yours. Retry with exponential backoff and jitter and the next attempt lands on a healthy edge — every official client already does it for you.

Bogons

Never billed. Private, loopback, link-local, documentation and multicast ranges — including 6to4 and Teredo — are answered as bogons and spend no quota on any plan.

An official client for every major language.

All SDKs on GitHub →

Twelve official clients for the languages you ship in, plus drop-in middleware for the frameworks on top of them. Install commands are in the docs.

On this page

Which fields can I rely on being present?

ip and the flags your plan reads. Detail objects appear only when there is something to report, and a field we did not answer is absent rather than false.

00 · No key

Start without signing up.

Paste it into a terminal — no account needed. 1k daily allowance per user, answering ip and is_vpn.

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

Signup for 50k req/month.

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