Quickstart

First request in 5 minutes

Get an API key, call the endpoint, read quota + rate limit headers, and learn the core response fields.

1) Get an API key

Create an account in the dashboard and copy your API key (looks like prdx_...). The free plan includes 1,000 checks/day (5,000/month) — no card required.

2) Call the API (cURL)

Tip: add -i to see quota/rate-limit headers.

curl -i -sS https://predax.io/api/v1/check/ip \
  -H "X-API-Key: prdx_..." \
  -H "Content-Type: application/json" \
  -d '{"ip":"8.8.8.8"}'

3) Use the response (what matters)

  • classification.risk_score (0–100) + classification.risk_level (minimal <20, low 20–49, medium 50–79, high ≥80)
  • classification.is_proxy, is_vpn, is_tor, is_datacenter, is_crawler — note the flags mean different things: Tor/proxy are strong abuse signals, VPN and datacenter have plenty of legitimate users, and is_crawler marks a verified search-engine bot you should never block
  • classification.flags + classification.reasons (when available)
  • network.asn/network.as_name and location.country_code (best-effort)
  • meta.request_id and response header X-Request-ID for debugging/support

4) Read quota + rate limit headers

  • X-Quota-Limit-Day, X-Quota-Used-Today, X-Quota-Remaining-Today, X-Quota-Reset-Daily
  • X-Quota-Limit-Month, X-Quota-Used-Month, X-Quota-Remaining-Month, X-Quota-Month
  • X-RateLimit-Limit-Per-Second, X-RateLimit-Remaining-This-Second
  • X-Quota-Billed0 means the request was free: re-checking the same IP with the same key within 5 minutes is not billed

Hitting the daily/monthly quota returns 402 (daily resets at 00:00 UTC); sending faster than your plan's per-second limit returns 429. Only successful checks are billed.

5) Optional: residential proxy enrichment

If you can pass a stable user_id plus lightweight browser fingerprint data, Predax can add a best-effort residential-proxy suspicion signal.

curl -sS https://predax.io/api/v1/check/ip \
  -H "X-API-Key: prdx_..." \
  -H "Content-Type: application/json" \
  -d '{
    "ip":"1.2.3.4",
    "user_id":"user_123",
    "fingerprint":{
      "timezone":"Europe/Dublin",
      "languages":["en-IE","en"],
      "webrtc_local_ip":"192.168.1.100"
    }
  }'

Look for classification.is_residential_proxy_suspect and classification.residential_proxy_score.

Local dev note (Docker / WordPress)

If your client runs in Docker, localhost points at the container, not your API. Use host.docker.internal (Docker Desktop), your host IP, or the API service name if both containers share a Docker network.