v:verza
verza / docs / ip-check-api

IP address screening API

One call says whether an IP is a current Tor exit, whether it sits in a published AWS, Google Cloud or Cloudflare range, and which country and network the public registry data names. It does not locate a person. VPN and proxy detection beyond Tor exits and known cloud ranges is not offered.

This build does not ship an IPinfo Lite database. Country and network come from RDAP via the IANA bootstrap (AFRINIC, RIPE and the other RIRs). To add IPinfo Lite later, place a CC BY-SA 4.0 CSV at data/ipinfo-lite.csv or set IPINFO_LITE_FILE. scripts/refresh_ip_data.mjs downloads that file only when IPINFO_TOKEN is set. Until the file is loaded, the response has no attribution field and does not claim IPinfo as the source.

Endpoints

POST /v1/ip-check

Screen an IP address against the Tor exit list and published AWS, Google Cloud and Cloudflare ranges, and name the country and network from public registry data. It does not locate a person. VPN and proxy detection beyond Tor exits and known cloud ranges is not offered.

$0.01 per call · example: /v1/ip-check

How you pay

API key. The free tier issues a key at /signup: send it as Authorization: Bearer <key> and calls come off a monthly allowance, no crypto anywhere in that path. Every key comes with a sandbox twin (vz_test_) that never counts against quota and accepts only the documented test inputs, so you can wire up an integration before spending a single call.

Pay per call. Send no key at all and a paid endpoint replies HTTP 402 with the exact payment requirements; an x402 client pays USDC on Base (about two seconds to settle) and retries automatically. No account, no signup, which is what makes it work for autonomous agents.

Either way, invalid input is rejected with a free 400 before any payment is challenged, so you never pay (or spend quota) to learn you made a typo.

Questions

How do I screen an IP?
POST /v1/ip-check with {"ip":"41.0.0.1"}. A private or reserved address is a free 400, private or reserved address. That list includes documentation ranges, benchmarking ranges, and an IPv6 zone id. Any input containing % is a free 400. Any other key is a free 400. A public address that has not been paid is a 402 at $0.01.
Why POST?
An IP address can identify a person. The POST body keeps it out of the URL, out of the 402 resource URL, and out of access logs. GET returns 405 with the example and the price.
Where do country and network come from?
From RDAP, unless a local IPinfo Lite file is present. If RDAP fails and the address is neither a Tor exit nor a cloud range, the response is HTTP 503 and is not settled. A Tor exit or a cloud range still returns 200 when RDAP fails. The attribution line IP address data powered by IPinfo is included only when that file supplied the row.
Do you offer a bulk IP dump?
No. Each call screens one address. The Tor list, the cloud ranges and the optional IPinfo file stay on the server.

Related

South African ID number validation API South African VAT number validation API NCA credit agreement lawfulness API South African KYB and onboarding API South African contact validation API CIPC registration number check Domain age and registry status API Business pre-screen API Risk score API Guides: how the interest rate caps work zaref: NCA maximum interest rates