IP 风险画像查询

识别代理、VPN、秒拨、云手机与数据中心 IP,返回风险评分、网络归属与区县级地理位置。风险数据每 10 秒更新。

10 项风险信号维度
10 秒风险数据更新
区县级地理定位精度

三条能力

同一套判断口径:给的都是会过期的判断,不是长期标签。

各国 IP 段与风险构成

按国家与地区拆开的 IP 段归属、住宅与机房构成、主要运营商与 ASN, 以及风险库近期新捕获的代理类 IP 个数。数据每日随地理库刷新。

查看全部 244 个国家与地区 → 中国另有 34 个省级页面

开发者 API

同一份画像能力,供你的风控系统直接调用。基础画像与 Pulse 历史评分两个接口的参数、返回字段、认证方式与错误码,都放在独立的 接口文档 里。

查看 API 接口文档 →

GEThttps://ip99.com/v1/ip/{ip}
# 直接调用,无需 Key(未登录额度)
curl https://ip99.com/v1/ip/8.8.8.8

# 带上自助创建的 Key,额度按账户计
curl -H "X-API-Key: 你的KEY" https://ip99.com/v1/ip/8.8.8.8

要查历史某个时刻的风险状态(事后复盘、对账仲裁),用 Pulse 接口的 ?at=GET /pulse/v1/ip/{ip}?at=2026-08-26T13:34:36Z(RFC3339 时刻,可回溯 30 天, 返回的 computed_at 就是你指定的那一刻)。本页这个画像接口只答此刻,不支持回溯。 Pulse 接口为专业版专属:没有专业版 Key 时返回 403 professional_required, 免费的基础画像仍然可以直接调 /v1/ip;需要历史能力请联系销售

响应示例
{
  "ip": "1.197.213.232",
  "risk": {
    "score": 62, "level": "medium", "tags": ["proxy", "dialup_pool"],
    "tag_details": [
      { "tag": "proxy",       "last_seen": "2026-08-20T10:51:05+08:00" },
      { "tag": "dialup_pool", "last_seen": "2026-08-14T10:51:05+08:00" }
    ]
  },
  "evidence_state": "active",
  "computed_at": "2026-08-20T14:22:31Z",
  "signals": { "proxy": true, "vpn": false, "dialup_pool": true, "hijacked_proxy": false,
               "osint": false, "crawler": false, "cloud_service": false, "cloud_phone": false,
               "hosting": false, "mobile": false },
  "network": { "asn": 4134, "usage_type": "DYN" },
  "geo": { "continent": "AS", "country": "CN", "subdivision": "CN-HA", "admin_code": "411281",
           "lat": 34.74509, "lon": 111.89353, "tz": "Asia/Shanghai" }
}
字段怎么读——尤其是 0 分

本接口的响应不含中文。地名、场景、风险类型一律以标准码或稳定 slug 返回(码表见下), 方便贵方直接入库与统计,不必在解析层处理中文编码。

字段含义
risk.score0–100。表示可核验风险证据的新鲜度与强度,随证据年龄衰减,不是「是攻击者」的概率。与 /pulse/v1/ipscore 同源同值——本产品对同一个 IP 只有一个分
risk.levelhigh / medium / low / none,由 risk.score 推出(0=none,1–29=low,30–69=medium,70–100=high)。none 的意思是「我方没有当前可核验的证据」,不等于安全。0 分放行前请知道这一点。
computed_at本次评分针对的时刻。分随证据变旧而衰减,所以「算的哪一刻」是可核验的一部分:同一个 IP 隔几小时查两次分数不同是正常的。
evidence_stateactive:有仍在计分的新鲜证据。stale:见过,但证据已过时效窗、分数为 0——可作弱特征,不宜单独作为拦截依据。none:我方从未见过——可能是覆盖盲区,不等于安全。策略平台请按这个字段分流,不要只看分数。
risk.tag_details[].last_seen该类证据最近一次捕获的时刻,RFC3339 格式并带时区偏移(如 2026-08-20T10:51:05+08:00)。标签可能仍在而分数已衰减到 0——那表示证据已过期,不表示该 IP 干净。判定时以 last_seen 距今多久为准。
signals.*布尔信号。hosting / mobile 由网络场景派生,本身不是风险;其余与 tags 一一对应。
network / geo地址归属,与 /pulse/v1/ip 专业档同一套形状network.asnnetwork.usage_typeIDC/DYN/MOB/GTW/EDU/GOV/CDN/ORG/DNS/NET/COM/BOGON);geo.continentAS/EU/NA/SA/AF/OC/AN)、geo.country(ISO 3166-1 alpha-2)、geo.lat/lon/tz中国的地址geo.subdivision(ISO 3166-2,如 CN-ZJ)与 geo.admin_code(GB/T 2260 六位,精确到区县);其余国家geo.region / geo.city 拉丁名。运营商名不返回——机器身份是 asn,拿它到公开注册库反查即可。
档位每日配额如何获得
未登录直接调用,无需 Key
免费版登录后自助创建 API Key
专业版按需定制 在免费版字段之上增加观测天数资源池标识 (匿名句柄,同账户内稳定、跨账户不可对表),并可按历史时刻回溯评分; 捕获时刻等字段另需签署数据处理协议。联系销售开通
企业版按需定制联系销售

网页查询与 API 共用同一份每日额度。未登录按公网 IP 计,登录后按账户计。 专业版是数据档位,与配额档位相互独立:企业版不自动含专业版字段。 以上都是调用我方的公网服务;若需要装在自己的机器上、 数据完全不到我方这边,见 潮汐 TidePulse 私有化(各自单独定价)。

响应头与错误格式

每次响应都带当日额度,不必额外查询:

响应头含义
X-Daily-Limit当前档位的每日配额
X-Daily-Remaining今日剩余次数
X-Daily-Reset配额重置时间(Unix 秒,北京时间零点)
Retry-After仅在 429 时出现,距可重试的秒数

所有错误都是同一结构,便于统一处理:

{ "error": { "code": "invalid_ip", "message": "不是合法的 IPv4/IPv6 地址:..." } }
HTTPcode含义
400invalid_ip不是合法 IP
400reserved_ip私有/保留地址,没有公网风险画像
401invalid_keyAPI Key 无效
401revoked_keyAPI Key 已吊销
401key_expiredAPI Key 已过期(测试期结束)
404not_found接口路径不存在
429rate_limited超出每分钟速率
429quota_exceeded当日配额用尽(响应带 Retry-After
429quota_exceeded_anon未登录档当日配额用尽——登录后创建 Key 即提额

meta.query_us 是服务端查询耗时(微秒)。 query_ms 同时保留,但本站查询通常在 1 毫秒以内,它基本恒为 0。

我的 API Key

登录后可自助创建,免费额度即刻可用。

登录 / 注册

联系销售

需要更高配额、私有化部署或定制标签,留下联系方式,我们会尽快回复。