An IP abuse check API returns report counts and a listed flag before you accept a signup. On ipXapi that is GET https://ipxapi.com/api/abuse-check?ip= with Bearer auth. Official quick-start IP is 8.8.8.8: is_listed false, confidence_of_abuse 0, total_reports 14, is_whitelisted true.
Basic is $29.99/mo with a 7-day trial or 50 requests. This is not /api/blacklist-check (blocklist names) and not /api/ip (city/ASN). MCP: mcp.ipxapi.com. Docs: ipxapi.com quick-start.
Request: official 8.8.8.8
curl 'https://ipxapi.com/api/abuse-check?ip=8.8.8.8' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_KEY'
Response: official quick-start sample
{
"ip": "8.8.8.8",
"is_listed": false,
"confidence_of_abuse": 0,
"total_reports": 14,
"distinct_reporters": 8,
"first_reported_at": "2026-01-15",
"last_reported_at": "2026-01-22",
"is_recent_activity": true,
"isp": "Google LLC",
"usage_type": "Content Delivery Network",
"asn": null,
"hostname": "dns.google",
"domain": "google.com",
"country": "United States of America",
"country_code": "US",
"reports": [
{
"reported_at": "2026-01-22T20:28:34Z",
"reporter": 134282,
"comment": "Unauthorized connection attempt",
"categories": [14, 15, 20]
}
],
"scraped_at": "2026-01-23T12:53:32Z",
"is_whitelisted": true,
"is_public": true
}
Live total_reports can change. Google DNS is whitelisted in this fixture — do not treat total_reports > 0 as a hard block when is_whitelisted is true.
PHP: gate on listed
$ch = curl_init("https://ipxapi.com/api/abuse-check?ip=" . urlencode($ip));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Accept: application/json", "Authorization: Bearer YOUR_KEY"],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
if (!empty($data["is_listed"]) && empty($data["is_whitelisted"])) {
// hold the account
}
Go live
1. Register — 7-day trial or 50 requests.
2. Copy the Bearer token.
3. GET /api/abuse-check?ip=.
4. Branch on is_listed and is_whitelisted.
Check abuse reports with an ipXapi key →