VPN & Proxy Detection API

Classify IP addresses as VPN, proxy, datacenter, residential, or Tor exit nodes.

Endpoints

MethodPathDescription
GET/api/v1/vpn/ip/{ip}Check a single IP
POST/api/v1/vpn/ip/batchCheck up to 100 IPs

Try It

Example Request

bash
curl -H "X-API-Key: wxa_yourkey" https://wxaintel.wxapros.com/api/v1/vpn/ip/1.2.3.4

Example Response

json
{
  "ip": "1.2.3.4",
  "classification": "vpn",
  "provider": "NordVPN",
  "confidence": 0.92,
  "source": "proxy_enum",
  "firstSeen": null,
  "lastSeen": null,
  "observationCount": 47
}

Classification Values

ValueMeaning
vpnCommercial VPN service
proxyHTTP/SOCKS proxy
datacenterCloud/hosting provider
residentialResidential ISP (clean)
residential_proxyResidential proxy network
torTor exit node
relayApple Private Relay / iCloud Relay
unknownNot in database

Batch Request

bash
curl -X POST -H "X-API-Key: wxa_yourkey" \
  -H "Content-Type: application/json" \
  -d '{"ips": ["1.2.3.4", "5.6.7.8"]}' \
  https://api.wxaintel.com/api/v1/vpn/ip/batch

Response Codes

StatusDescription
200Success
401Missing or invalid API key
403Key doesn't have required scope
429Rate limit exceeded
502Backend service unavailable

Code Examples

python
import requests

response = requests.get(
    "https://api.wxaintel.com/api/v1/vpn/ip/1.2.3.4",
    headers={"X-API-Key": "wxa_yourkey"}
)
data = response.json()
print(f"{data['ip']}: {data['classification']} ({data['confidence']:.0%})")
javascript
const response = await fetch(
  "https://api.wxaintel.com/api/v1/vpn/ip/1.2.3.4",
  { headers: { "X-API-Key": "wxa_yourkey" } }
);
const data = await response.json();
console.log(`${data.ip}: ${data.classification} (${Math.round(data.confidence * 100)}%)`);