Prerequisites
- A stable Rust toolchain with
ip-api-ioadded - A free ip-api.io API key
Score an IP with risk_score_ip
Returns a score (0–100) and a human risk_level, plus the
factors that drove it. Use risk_score() for the caller's IP.
let client = Client::new(std::env::var("IP_API_IO_KEY")?);
let risk = client.risk_score_ip("185.220.101.1").await?;
println!("{}", risk.score); // 88.0
println!("{}", risk.risk_level); // "high"
if let Some(ip) = &risk.factors.ip {
println!("{} {}", ip.is_tor_node, ip.is_datacenter);
}
if risk.score >= 75.0 {
// block, or send to manual review / step-up auth
} Score an email with email_risk_score
Same 0–100 scale, driven by email signals (disposable provider, invalid syntax). Use it to grade leads or gate sign-ups by address quality.
let risk = client.email_risk_score("user@mailinator.com").await?;
println!("{} {}", risk.score, risk.risk_level); // 90.0 high
if let Some(email) = &risk.factors.email {
println!("{}", email.is_disposable); // true
} Raw signals with ip_reputation
Returns the underlying reputation data for an IP as a serde_json::Value —
use it when you want the source signals rather than a computed score.
let reputation = client.ip_reputation("185.220.101.1").await?;
println!("{reputation:#?}");