API Documentation

Look up an IP against proxy, VPN, Tor, and hosting reputation lists — then get bot and risk scores in one request.

Overview

The Statin Traffic Analytics API checks each IP against maintained reputation lists (Tor exits, VPN networks, datacenter ranges), similar to classic proxy-check APIs. Use the flags to block abuse, challenge suspicious traffic, or enrich your analytics.

Base URL: https://traffic.statin.io

Authentication

Every request must include your API key. Create keys from the API page after signing in. Pass the key as a key query parameter (GET), or in the x-api-key header / Bearer Authorization.

# Query param (GET)
?key=ta_live_your_key_here&ip=79.111.119.213

# Or header
x-api-key: ta_live_your_key_here

Keep keys secret. Revoke compromised keys immediately from the dashboard. Quota is shared across all keys in your workspace.

GET

/api/v1/traffic/check

Look up one IP and get proxy, VPN, Tor, and hosting flags with risk and bot scores. Each successful call counts against your monthly quota and appears in the live request feed on your dashboard.

curl "https://traffic.statin.io/api/v1/traffic/check?key=ta_live_xxx&ip=79.111.119.213"

Plain-text mode (Y = proxy/VPN/Tor, N = clean, X = error):

curl "https://traffic.statin.io/api/v1/traffic/check?key=ta_live_xxx&ip=79.111.119.213&format=text"
POST

/api/v1/traffic/check

Same check via JSON body and x-api-key header — useful for server integrations that prefer POST.

curl -X POST "https://traffic.statin.io/api/v1/traffic/check" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ta_live_xxx" \
  -d '{"ip":"79.111.119.213"}'

Request parameters

GET uses query parameters. POST accepts the same fields as JSON (ip, source, format) with the key in a header.

FieldTypeDescription
iprequiredstringIPv4 or IPv6 address to look up in proxy / VPN / Tor / hosting reputation lists.
keyrequiredstringAPI key (GET query param). You can also send x-api-key or Authorization: Bearer.
formatstringOptional. "json" (default) or "text" for plain Y/N/X like classic proxy APIs.
sourcestringOptional label for your own logging (e.g. web, mobile, batch).

Response fields

A successful JSON check returns HTTP 200 with the following fields.

FieldTypeDescription
statusstringAlways "success" when the check completes.
requestIdstringUnique ID for this request — useful for support and debugging.
ipstringThe IP that was analyzed.
countrystring|nullCountry name from MaxMind GeoLite2-City.
countryCodestring|nullISO country code (e.g. US, IN).
continentstring|nullContinent name from MaxMind City.
regionstring|nullRegion / state from geo enrichment.
citystring|nullCity from geo enrichment.
postalCodestring|nullPostal / ZIP code when available.
latitudenumber|nullApproximate latitude.
longitudenumber|nullApproximate longitude.
timezonestring|nullIANA timezone (e.g. America/Los_Angeles).
accuracyRadiusnumber|nullMaxMind location accuracy radius in kilometers.
asnnumber|nullAutonomous system number from GeoLite2-ASN.
asn_namestring|nullASN organization name (alias of asnOrganization).
asnOrganizationstring|nullASN organization / network owner from MaxMind ASN.
organizationstring|nullNetwork organization (same as ASN org on free GeoLite2).
ispstring|nullISP name (same as ASN org on free GeoLite2; paid ISP DB for true ISP).
connection_typestringHosting, Residential, Mobile, VPN, Proxy, Tor, or Unknown.
hostingbooleanTrue if the IP belongs to a datacenter / cloud provider.
cloud_providerstring|nullDetected cloud provider when hosting (e.g. Cloudflare, AWS).
vpnbooleanTrue if the IP falls in a known commercial VPN network range.
proxybooleanTrue if the IP matches known anonymous egress (VPN or Tor).
torbooleanTrue if the IP is a known Tor exit node.
residentialbooleanTrue when the IP looks like a consumer residential network.
mobilebooleanTrue when the IP is on a mobile carrier network.
bot_hostingbooleanTrue when hosting IP also has elevated bot probability.
fraud_scorenumber0–100 fraud / abuse risk score (same scale as riskScore).
anonymousbooleanTrue when proxy, VPN, or Tor is detected.
risk_levelstringLow, Medium, or High — derived from fraud_score.
confidenceobjectPer-signal confidence percentages for vpn, hosting, and residential.
botProbabilitynumber0–100 bot likelihood derived from IP risk signals.
riskScorenumber0–100 combined risk score (alias of fraud_score for older clients).
reasonsstring[]Machine-readable codes explaining why flags or scores were raised.

Sample response

{
  "status": "success",
  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "ip": "104.28.45.100",
  "country": "United States",
  "countryCode": "US",
  "continent": "North America",
  "region": "California",
  "city": "Los Angeles",
  "postalCode": "90012",
  "latitude": 34.0544,
  "longitude": -118.244,
  "timezone": "America/Los_Angeles",
  "accuracyRadius": 20,
  "asn": 13335,
  "asn_name": "Cloudflare, Inc.",
  "asnOrganization": "Cloudflare, Inc.",
  "organization": "Cloudflare, Inc.",
  "isp": "Cloudflare, Inc.",
  "connection_type": "Hosting",
  "hosting": true,
  "cloud_provider": "Cloudflare",
  "vpn": false,
  "proxy": false,
  "tor": false,
  "residential": false,
  "mobile": false,
  "bot_hosting": false,
  "fraud_score": 20,
  "anonymous": false,
  "risk_level": "Low",
  "confidence": {
    "vpn": 93,
    "hosting": 100,
    "residential": 90
  },
  "botProbability": 15,
  "riskScore": 20,
  "reasons": ["hosting_or_datacenter_ip"]
}

Errors

JSON errors include a message field. With format=text, errors return X. Common status codes:

  • 401Missing or invalid API key.
  • 400Invalid or missing ip field.
  • 429Rate limit, daily quota, or monthly quota exceeded. Check response code field: RATE_LIMIT_EXCEEDED, DAILY_QUOTA_EXCEEDED, or MONTHLY_QUOTA_EXCEEDED.
  • 500Unexpected server error. Retry with the same requestId.

Rate limits & quota

Every workspace has two kinds of limits:

  • Per-second rate limit — stops bursts that could overload the API (token bucket, short 2-second burst allowed). Free: 2 req/s · 5K: 5 · 10K: 10 · 25K: 20 · Custom: 50 (or higher by agreement).
  • Daily & monthly quota — plan allowance for total successful checks. Free includes 1,000/day; paid plans raise the daily and monthly caps.

When either limit is hit, the API returns 429 with a machine-readable code:

  • RATE_LIMIT_EXCEEDED — slow down; honor Retry-After and X-RateLimit-* headers.
  • DAILY_QUOTA_EXCEEDED — wait until the daily reset (midnight server time) or upgrade.
  • MONTHLY_QUOTA_EXCEEDED — upgrade or wait for the next billing month.

Check remaining quota on the dashboard or profile page. See pricing for plan rate limits, or contact us for a Custom plan.

Quick start

  1. Create an account and open the API page to copy your key.
  2. Call GET /api/v1/traffic/check?key=…&ip=… with the IP you want to score.
  3. Use proxy / VPN / Tor / hosting flags and riskScore in your product logic.