接入
免费试查,无需注册即可调用。响应字段、额度与错误格式见 API 接口文档;证书侧见 证书透明度 CT。
GEThttps://ip99.com/v1/domain/dns/{domain}
# 直接调用,无需 Key(未登录额度)
curl https://ip99.com/v1/domain/dns/example.com
# 翻页用 offset(本接口没有 limit,页大小由服务端定)
curl "https://ip99.com/v1/domain/dns/example.com?offset=60"
域名要小写、去尾点,非 ASCII 域名用 punycode。判断有没有下一页只看 has_more;offset 只接受非负整数,写错会得到 400。回填任务运行期间同一查询耗时会在 1–5 秒之间波动(基线约 1 秒),这不是故障。
GEThttps://ip99.com/v1/domain/registered/{date}
# 某一日新增注册的域名(按域名排序),同样无需 Key
curl https://ip99.com/v1/domain/registered/2026-10-08
这就是上面那条「每日更新」的链路。日期必须是 YYYY-MM-DD 形式的真实日期:写成 2026-13-45 会得到 400,不会静默回一个空列表。每条记录是 domain、ip、registrar、country。这条接口不支持翻页——一次给按域名排序的前 1000 条,带上 offset 会得到 400 pagination_unsupported;所以响应里没有 has_more 与 next_offset 这两个字段,别按它们写循环。查一个还没有数据的日期回的是空数组(那是答案,不是错误)。
GEThttps://ip99.com/v1/domain/malware/{domain}
# 恶意名单核验:这个域名被列入过哪些日期,无需 Key
curl https://ip99.com/v1/domain/malware/starglobalbank.com
与 DNS 响应里的 profile.malware 是同一份数据,只是问得更轻(毫秒级,适合流水线逐条核验):这里给的是列入日期的清单,画像那边给的是汇总(listed、last_listed、days_listed)。命中与未命中都是 200——判定看 data 是否为空,不要看状态码。这一条也不带翻页字段。
GEThttps://ip99.com/v1/domain/reverse/{ip}
# IP 反查:这个 IP 历史上解析到过哪些域名,无需 Key
curl "https://ip99.com/v1/domain/reverse/104.21.5.141"
正查回答「这个域名解析到过哪些地址」,反查回答反方向的问题,读的是同一份被动 DNS 语料。每行是 domain、rrtype、first_seen、last_seen;一次最多 1000 条,有翻页(看 has_more 与 next_offset,接着取用 ?offset=N)。{ip} 只收裸地址(8.8.8.8 或 2606:4700:4700::1111):写成 8.8.8.8:443 或 8.8.8.8/32 这类带端口、掩码的形式会被拒——去掉端口与掩码再查。私有地址不是错误——10.0.0.1 这类值在 DNS 记录里真实存在。它是全表查询,最多等 25 秒;这条与上面几张卡共用同一份免 Key 试用额度。