开发者 / Agent

API 文档

报告页上看到的一切都能用 JSON 拿到:一次调用返回评分、代理 / VPN / Tor 判定、黑名单与滥用记录、 分场景适用性、逐项扣分依据,以及这份数据的边界。无需 API key。 机器可读的描述在 /openapi.json,给模型看的站点说明在 /llms.txt

端点

两个接口

GET /api/lookup?ip={ip}
整份报告。ip 支持 IPv4 / IPv6; 加 refresh=1 忽略缓存与历史库强制重查。
GET /api/myip?format=text
回显调用方的公网 IP。不带 format 时返回 { ip }

配额

谁能调、调多少

  • 已收录的 IP:直接返回库中报告,不消耗数据源配额,任何客户端可调。 站内已有近万份报告,热门地址基本都在。
  • 未收录的 IP:会真实查询各数据源。脚本与 Agent 每个来源 IP 每天可免验证查询 5 次(全站每日另有总量上限),剩余次数在响应头 x-open-budget-remaining。 额度用完返回 403,code = verification_required, 并附 reportUrl:在浏览器打开它完成一次检测,这个 IP 就进库了,之后可直接调用。
  • 限流:普通查询 30 次 / 分钟;首次查询新 IP 10 次 / 分钟;refresh 5 次 / 分钟。超出返回 429。
  • 缓存:库中报告带 stale 标记, 超过陈旧阈值的建议 refresh;IP 的性质本来就很少变,多数情况下直接用即可。

字段

响应里有什么

ip / version规范化后的地址与协议版本(4 / 6)
queriedAt报告生成时间。source 为 store 时是当初检测的时间,配合 stale 判断要不要 refresh
sourcefresh 实时查询 · cache 进程缓存 · store 历史库
usageTyperesidential · mobile · business · hosting · education · government · unknown
nativeTypenative 原生 · broadcast 广播(注册地与使用地不一致)· unknown
flagsisProxy / isVpn / isTor / isHosting / isMobile / isRelay / isBogon / isSearchEngineBot
flagAgreement每个判定位有几家数据源一致确认。单源判定在评分里按半数计权
vpnOperator已知商业 VPN 的运营商:name、anonymity、popularity、protocols、logging、freeAccess。没有则为 null
risk.purity纯净度 0-100,越高越干净
risk.level / label / verdict六档:pristine 极佳 · clean 纯净 · neutral 一般 · suspicious 可疑 · risky 高风险 · dangerous 极高风险
risk.confidencelow / medium / high —— 参与评分的数据源覆盖度。分数与置信度分开看:同样 85 分,两家源和八家源的把握不同
risk.factors[]每一分的来源:label、category、points(正数扣分、负数加回)、detail、floor(一票否决的风险下限)
scenarios[]分场景适用性:ai · social · streaming · gaming · ecommerce · email,各有 score、level、levelLabel 与 reason
blocklists[]各公开黑名单:listed 命中;benign 命中但不构成风险(如 PBL 住宅段声明);unavailable 本次不可用、命中与否未知
abuse[]滥用举报(score、reports)与攻击行为记录(attacks.byType:撞库、批量注册、漏洞扫描等)
exposure / sharing网络暴露面(开放端口、已知漏洞)与共享程度(同地址 / 同网段观测到的设备数)
sources[]每个数据源本次的状态:ok、ms、error、skipped。失败不等于未命中
feedback实测反馈:正在用这个 IP 的访客给各场景打的真实使用体验分(1-5,5 最好)。按场景给出 count 与 average,某场景满 3 人才出现。它独立于评分,是评分之外的参照
unknowns[]仅凭 IP 无法判断的事项,见下文
reportUrl这份报告的网页地址,引用结论时请附上

边界

这份数据看不到什么

所有结论基于查询时刻的公开与合作数据源,不构成账号安全或平台准入的保证

  • 平台内部的风控标签

    各平台有自己的 IP 信誉库与封禁记录,不对外公开。公开数据源没命中,不等于平台那边没有记录。

  • 是否真正独享

    共享程度只是同网段观测到的设备数,看不出同一出口此刻还有谁在用、在做什么。

  • 这个 IP 关联过哪些账号

    账号与 IP 的关联关系只存在于各平台内部,前人在这个 IP 上被封过的账号我们看不到。

  • 设备、浏览器与操作行为

    风控看的是 IP + 设备指纹 + 行为节奏的组合。IP 再干净,指纹与行为异常照样会被拦。

  • 账号资料与 IP 是否自洽

    注册国家、手机号、支付方式、语言时区与 IP 归属地不一致时,平台会额外核验,这与 IP 纯净度无关。

示例

三种调用方式

curl

curl -s "https://ipure.dev/api/lookup?ip=8.8.8.8" | jq '.risk.purity, .risk.verdict, [.scenarios[] | {id, levelLabel}]'

Python

import requests

r = requests.get("https://ipure.dev/api/lookup", params={"ip": "8.8.8.8"}, timeout=30)
r.raise_for_status()
report = r.json()
print(report["risk"]["purity"], report["risk"]["verdict"])
for s in report["scenarios"]:
    print(s["label"], s["score"], s["levelLabel"], "—", s["reason"])
print("无法判断:", [u["label"] for u in report["unknowns"]])

TypeScript

const res = await fetch("https://ipure.dev/api/lookup?ip=8.8.8.8");
if (!res.ok) throw new Error(`IPure ${res.status}`);
const report = await res.json();
const ai = report.scenarios.find((s: { id: string }) => s.id === "ai");
console.log(report.risk.purity, ai?.levelLabel, report.vpnOperator?.name ?? "非已知商业 VPN");

给 Agent

何时调用,何时不调

适合调用

用户问「这个 IP 干不干净」「能不能拿去登 ChatGPT / 注册 X / 开亚马逊店 / 看 Netflix」「是不是 VPN 或机房 IP」 「为什么老被风控」;需要在执行网络任务前判断当前出口 IP 是否合适;要在多个候选 IP 之间比较。

不该调用

DNS 配置与网站部署;网络连通性故障排查;需要目标平台内部风控数据才能回答的问题。 引用结论时请连同 unknowns 一起给出,不要把「未发现风险」说成「安全」。