Skip to main content

Base URL

https://wxaintel.wxapros.com/api/v1/vpn
The wxaintel gateway proxies /api/v1/vpn/* to the WXA VPN backend. All URLs in this reference are relative to the base.

Endpoint inventory

Lookup

MethodPathDescriptionMin tier
GET/ip/{ip}Single IP classificationFree
POST/ip/batchBatch up to 100 IPs (max 100 per request)Starter
GET/shadow_vpn/lookup/{ip}Shadow VPN / RAI assets on an IPEnterprise

Aggregates

MethodPathDescriptionMin tier
GET/statsGlobal classification countsFree
GET/providersAll known providers + IP countsFree
GET/stats/country/{code}Per-country VPN concentratorsBusiness
GET/stats/asn-abuseASN abuse leaderboard (premium columns stripped below Pro)Free

Bulk exports

MethodPathDescriptionMin tier
GET/export/csvFull dataset, CSVPro
GET/export/mmdbMaxMind-style databaseBusiness
GET/export/parquetColumnar ParquetBusiness

Conventions

IP format

Always use canonical string form. Both IPv4 and IPv6 are supported:
  • IPv4: 1.1.1.1
  • IPv6: 2606:4700:4700::1111
Reserved and non-global ranges return 400 invalid_ip_reserved — we don’t classify them. This covers RFC 1918 private space, RFC 6598 / CGNAT, loopback, multicast, link-local, and TEST-NET ranges (e.g. GET /api/v1/ip/0.0.0.0400 invalid_ip_reserved).

Response shape

The pinned fields (see CONTRACT.md) are stable. Field availability depends on tier — see tiers. Tier-gated fields keep their keys present rather than being omitted — gate on your own tier, not on field presence:
  • The residential-attribution precision sub-flags (is_residential_proxy_high_confidence, is_residential_proxy_mobile) are always present but forced to false below the pro tier. (The base is_residential_proxy boolean is shown to all tiers.)
  • provider (and operator name) is null below the starter tier.
Note that asn_abuse and sanctions_risk are legitimately object-or-null (present as null when there is no data, regardless of tier) — that null is a real “no data” signal, not a tier strip.

Caching

Aggregate endpoints (/stats, /providers, /stats/country/*, /stats/asn-abuse) are server-side cached for 60 s – 5 min. The Cache-Control header reflects this. Lookup endpoints are not cached server-side — every request hits the live database.

Time

All timestamps are ISO 8601 with Z suffix: 2026-04-28T17:23:00Z. They reflect UTC.