Official Python client for ip-api.io — IP geolocation, email validation, fraud detection and risk scoring API
Project description
ip-api-io — Official Python client for ip-api.io
The official Python client for the ip-api.io IP intelligence platform. One client covers IP geolocation, email validation and verification (syntax, MX, SMTP deliverability), fraud detection and risk scoring, VPN/proxy/Tor detection, disposable email detection, ASN lookup, WHOIS, reverse DNS, MX records and domain age.
Zero dependencies — pure standard library.
Install
pip install ip-api-io
Quickstart
from ipapi_io import IpApiClient
client = IpApiClient(api_key="YOUR_API_KEY") # free key at https://ip-api.io
# Where is this IP, and is it risky?
info = client.lookup("8.8.8.8")
print(info["location"]["country"]) # "United States"
print(info["suspicious_factors"]["is_vpn"]) # False
risk = client.risk_score("8.8.8.8")
print(risk["score"], risk["risk_level"]) # 0 "low"
email = client.validate_email("user@example.com")
print(email["reachable"], email["disposable"]) # "yes" False
An API key is required — the API rejects keyless requests with 401. Sign up at
ip-api.io for a free key.
Documentation
Each guide documents the methods for one capability, with runnable examples and a link to the matching ip-api.io product page:
- IP geolocation & bulk lookup —
lookup,lookup_batch - Email validation & verification —
email_info,validate_email,validate_email_batch - Fraud detection & risk scoring —
risk_score,email_risk_score,ip_reputation - VPN, proxy & Tor detection —
tor_check,suspicious_factors - ASN & DNS lookups —
asn,whois,reverse_dns,forward_dns,mx_records - Domain age checker —
domain_age,domain_age_batch - Errors, rate limits & usage — exception types,
rate_limit,usage_summary
Methods
Every method maps to one ip-api.io endpoint and its product page:
| Method | Endpoint | Product page |
|---|---|---|
lookup(ip=None) |
GET /api/v1/ip[/{ip}] |
IP geolocation |
lookup_batch(ips) |
POST /api/v1/ip/batch (≤100 IPs) |
Bulk IP lookup |
email_info(email) |
GET /api/v1/email/{email} |
Email validation |
validate_email(email) |
GET /api/v1/email/advanced/{email} |
Advanced email validation |
validate_email_batch(emails) |
POST /api/v1/email/advanced/batch (≤100) |
Email list cleaning |
risk_score(ip=None) |
GET /api/v1/risk-score[/{ip}] |
Risk score |
email_risk_score(email) |
GET /api/v1/risk-score/email/{email} |
Fraud detection |
ip_reputation(ip) |
GET /api/v1/ip-reputation/{ip} |
IP reputation |
tor_check(ip) |
GET /api/v1/tor/{ip} |
Tor detection |
asn(ip) |
GET /api/v1/asn/{ip} |
ASN lookup |
whois(domain) |
GET /api/v1/dns/whois/{domain} |
WHOIS lookup |
reverse_dns(ip) |
GET /api/v1/dns/reverse/{ip} |
Reverse DNS |
forward_dns(hostname) |
GET /api/v1/dns/forward/{hostname} |
— |
mx_records(domain) |
GET /api/v1/dns/mx/{domain} |
MX record lookup |
domain_age(domain) |
GET /api/v1/domain/age/{domain} |
Domain age checker |
domain_age_batch(domains) |
POST /api/v1/domain/age/batch |
Domain age checker |
rate_limit() |
GET /api/v1/ratelimit |
— |
usage_summary() |
GET /api/v1/usage/summary |
— |
All methods return parsed JSON as plain dicts. ipapi_io.types ships TypedDict
definitions for editor autocompletion.
Error handling
The client raises typed exceptions and never retries — on 429,
RateLimitError.reset tells you when your quota renews:
from ipapi_io import IpApiClient, RateLimitError, AuthenticationError
client = IpApiClient(api_key="YOUR_API_KEY")
try:
client.lookup("8.8.8.8")
except RateLimitError as e:
print(f"limit={e.limit} remaining={e.remaining} resets_at={e.reset}")
except AuthenticationError:
print("invalid API key")
See docs/error-handling.md for the full exception taxonomy.
Links
- Website: https://ip-api.io
- API reference: https://ip-api.io/api-docs.html
- OpenAPI spec: https://ip-api.io/openapi.json
- Get a free API key: https://ip-api.io
ip-api-io is the official client for ip-api.io.
It is not affiliated with ip-api.com or ipapi.com.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ip_api_io-1.0.0.tar.gz.
File metadata
- Download URL: ip_api_io-1.0.0.tar.gz
- Upload date:
- Size: 24.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99bc48c7e50c3df82d2b22780ba14fcc39f4826b3989d12360c859ab99b8a44e
|
|
| MD5 |
f297aef62a1c6b207fc67c50c35def9f
|
|
| BLAKE2b-256 |
f8be563ab30ca4a5f24cf232bf01e295d73daa02f8b215273d0f704e419425e5
|
File details
Details for the file ip_api_io-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ip_api_io-1.0.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ddc0620d3bd69b9593b95be80142b4baed2ae643340ff6123aec63328c12b2e
|
|
| MD5 |
e46a5e98af0b7c81b44b10e68b6df170
|
|
| BLAKE2b-256 |
0fb2bfa5dba21cbaf9f62285c045f0b11c26df3a7a2fc63e49419895dba703ad
|