ip-api-io/ipapi-php

Official PHP client for ip-api.io — IP geolocation, email validation, fraud detection and risk scoring API

Maintainers

Package info

github.com/ip-api-io/ipapi-php

Homepage

Documentation

pkg:composer/ip-api-io/ipapi-php

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-06-14 19:36 UTC

This package is auto-updated.

Last update: 2026-06-14 19:37:09 UTC


README

Packagist test License: MIT

The official PHP 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 Composer dependencies — just ext-curl and ext-json.

Install

composer require ip-api-io/ipapi-php

Quickstart

use IpApiIo\Client;

$client = new Client(apiKey: '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');
echo $info['location']['country'];               // "United States"
var_dump($info['suspicious_factors']['is_vpn']);  // false

$risk = $client->riskScore('8.8.8.8');
echo "{$risk['score']} {$risk['risk_level']}";    // 0 low

$email = $client->validateEmail('user@example.com');
echo $email['reachable'];                          // "yes"

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:

Methods

Every method maps to one ip-api.io endpoint and its product page:

Method Endpoint Product page
lookup(?string $ip = null) GET /api/v1/ip[/{ip}] IP geolocation
lookupBatch(array $ips) POST /api/v1/ip/batch (≤100 IPs) Bulk IP lookup
emailInfo(string $email) GET /api/v1/email/{email} Email validation
validateEmail(string $email) GET /api/v1/email/advanced/{email} Advanced email validation
validateEmailBatch(array $emails) POST /api/v1/email/advanced/batch (≤100) Email list cleaning
riskScore(?string $ip = null) GET /api/v1/risk-score[/{ip}] Risk score
emailRiskScore(string $email) GET /api/v1/risk-score/email/{email} Fraud detection
ipReputation(string $ip) GET /api/v1/ip-reputation/{ip} IP reputation
torCheck(string $ip) GET /api/v1/tor/{ip} Tor detection
asn(string $ip) GET /api/v1/asn/{ip} ASN lookup
whois(string $domain) GET /api/v1/dns/whois/{domain} WHOIS lookup
reverseDns(string $ip) GET /api/v1/dns/reverse/{ip} Reverse DNS
forwardDns(string $hostname) GET /api/v1/dns/forward/{hostname}
mxRecords(string $domain) GET /api/v1/dns/mx/{domain} MX record lookup
domainAge(string $domain) GET /api/v1/domain/age/{domain} Domain age checker
domainAgeBatch(array $domains) POST /api/v1/domain/age/batch Domain age checker
rateLimit() GET /api/v1/ratelimit
usageSummary() GET /api/v1/usage/summary

All methods return parsed JSON as associative arrays.

Error handling

The client throws typed exceptions and never retries — on 429, RateLimitError::$reset tells you when your quota renews:

use IpApiIo\AuthenticationError;
use IpApiIo\RateLimitError;

try {
    $client->lookup('8.8.8.8');
} catch (RateLimitError $e) {
    echo "limit={$e->limit} remaining={$e->remaining} resets_at={$e->reset}";
} catch (AuthenticationError $e) {
    echo 'invalid API key';
}

See docs/error-handling.md for the full exception taxonomy.

Links

ip-api-io/ipapi-php is the official client for ip-api.io. It is not affiliated with ip-api.com or ipapi.com.