Intelligence APIsIP Risk Intelligence

IP Risk Intelligence

IP Risk Intelligence helps you understand whether a request is coming from a regular user or from traffic such as a proxy, VPN, Tor exit node, hosting provider, residential proxy, or known bot traffic.

Available for accounts starting with the Team plan. For CAPTCHA verification, Enterprise plans can also include additional details in the server API response through the insights field.

Common use cases

Protect signups and logins

Use IP Risk Intelligence before creating a new account or completing a login. For example, if a login comes from a high-risk IP, you can ask the user to confirm the login by email before giving access.

Apply stricter rules to VPN and proxy traffic

Treat traffic differently when it comes from VPNs, proxies, Tor, or datacenter IPs. For example, you can allow the login itself, but require an additional verification step before changing account settings or starting a high-value action.

Identify bots and crawlers

Recognize known crawlers and AI tools so you can decide how they should interact with your service. For example, you can allow search crawlers on public pages while blocking automated access to signup, checkout, or password reset flows.

Add friction only when needed

Use the classification, signals, and risk score to trigger extra checks only when an IP looks suspicious. For example, instead of showing every user a confirmation step, you can only show email confirmation, one-time codes, or CAPTCHA when the request looks risky.

Send a request

Send a POST request to the following endpoint:

/v1/intelligence/ip-risk/check

Example:

curl https://api.captchafox.com/v1/intelligence/ip-risk/check \
  -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ip":"198.51.100.24"}'

Request body

{
  "ip": "198.51.100.24" // The IPv4 or IPv6 address to check
}

Response body

The response may evolve over time, for example by adding new fields, but it will remain backward compatible.

{
  "classification": "residential_proxy", // Main classification
  "risk_level": "critical", // Risk level
  "risk_score": 86, // Numeric score (0-100)
  "ip": "198.51.100.24", // The IP address that was checked
  "version": 4, // IP version: 4 or 6
  "network": { // Network details, or null if unavailable
    "asn": 14061, // Autonomous system number
    "organization": "DigitalOcean, LLC", // Network owner
    "type": "hosting", // Connection type or network class
    "mobile": false // Whether it looks like mobile traffic
  },
  "location": { // Location details, or null if unavailable
    "country_code": "DE", // ISO country code
    "continent_code": "EU", // ISO continent code
    "continent": "Europe", // Continent name
    "country": "Germany", // Country name
    "state": "Hesse", // State or region
    "city": "Frankfurt", // City name
    "zip": "60311", // Postal code
    "latitude": 50.1109, // Latitude coordinate
    "longitude": 8.6821, // Longitude coordinate
    "timezone": "Europe/Berlin", // IANA timezone
    "currency_code": "EUR" // Local currency code
  },
  "proxy": { // Proxy details, or null if not available
    "confidence": "high", // Confidence in the proxy finding
    "type": "residential", // Detected proxy type
    "provider": "Bright Data", // Provider name when known
    "last_seen_at": "2025-01-10", // Last observed date
    "percent_days_seen": 100 // Share of recent days seen
  },
  "bot": { // Known bot details, or null if there is no match
    "confidence": "high", // Confidence in the bot match
    "provider": "Googlebot", // Bot provider or product name
    "category": "search_crawler" // Bot category
  },
  "signals": { // Boolean summary of common checks
    "bogon": false, // Private, loopback, or bogon IP
    "proxy": true, // Proxy signal present
    "vpn": false, // VPN signal present
    "tor": false, // Tor signal present
    "hosting": true, // Hosting or datacenter signal present
    "residential_proxy": true, // Residential proxy signal present
    "blocklist_match": false // Matched a blocklist
  }
}

Field reference

classification

ValueMeaning
bogonPrivate, loopback, or otherwise non-routable IP.
cleanNo significant risk was detected.
known_botThe IP matches a known crawler or AI tool.
hostingThe IP looks like hosting or datacenter traffic without stronger proxy evidence.
proxyThe IP shows general proxy signals.
vpnThe IP shows VPN signals.
torThe IP belongs to a Tor exit node.
residential_proxyThe IP shows residential proxy signals.
mixedMultiple conflicting high-risk signals were found.

proxy.type

ValueMeaning
proxyGeneral proxy traffic.
vpnVPN traffic.
torTor exit node traffic.
data_centerTraffic from a datacenter or hosting environment.
residentialResidential proxy traffic.

bot.category

ValueMeaning
search_crawlerSearch engine crawlers and similar indexing bots.
ai_toolAI tools or AI agents.

Errors

If something goes wrong, the API returns a simple error response with an HTTP status code and an error code.

StatusError codeMeaning
400invalid_inputThe IP address is missing or invalid.
401invalid_api_keyThe API key is missing, malformed, or unknown.
403api_not_enabled_for_planYour plan does not include access to this API.
403token_not_allowed_for_apiThe API key exists, but it is not allowed to use this API.
429rate_limit_exceededToo many requests were sent in a short time.
429api_quota_exceededYour API request quota has been exhausted.
503upstream_unavailableThe service is temporarily unavailable.