IP Detection
Bulk IP checks
Grade a list of addresses in one request, or stream results as they resolve.
Check a list
Parameters
- ipsstring[]
Addresses, optionally with a port. Send this or input.
- inputstring
Pasted text; the server finds the addresses in it.
Response fields
- submittedinteger
Items received.
- uniqueinteger
Distinct addresses checked.
- duplicatesinteger
Addresses sent more than once.
- invalidstring[]
Inputs that were not usable addresses.
- summaryobject
Count of results per grade and verdict. Starter and above; empty on Free.
- planRequiredstring
Plan that includes the locked fields. Absent on Starter and above.
- results[].ipstring
IP address that was checked.
- results[].portinteger
Port from the input, when there was one.
- results[].scoreinteger | null
Cleanliness score from 0 to 100. Starter and above; null on Free.
- results[].gradestring | null
S+, S, A, B or C. Starter and above; null on Free.
- results[].verdictstring | null
clean, suspect or dirty. Starter and above; null on Free.
- results[].classificationstring
residential_clean, mobile, hosting, datacenter, vpn, residential_proxy, tor, relay or unknown.
- results[].confidencenumber
Confidence from 0 to 1.
- results[].anonymizedboolean
True when the network hides the person behind it. Hosting counts, except known infrastructure.
- results[].vpnProviderstring | null
VPN service on a vpn address (NordVPN, Mullvad...), when known. Starter and above; null on Free.
- results[].isTorExitboolean
True for Tor exit nodes.
- results[].inVpnRangeboolean
True when the IP is in a known VPN range.
- results[].inDatacenterRangeboolean
True when the IP is in a known datacenter range.
- results[].deductionsarray | null
Points taken off the score, each with a reason. Starter and above; null on Free.
- results[].lockedstring[]
Fields of this row sent as null on this plan. Absent on Starter and above.
curl -X POST https://ipscanner.io/v1/bulk/check \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ips":["185.220.101.1","24.48.0.1:8080"]}'{
"submitted": 2,
"unique": 2,
"duplicates": 0,
"invalid": [],
"summary": {
"clean": 1,
"dirty": 1
},
"results": [
{
"input": "185.220.101.1",
"ip": "185.220.101.1",
"score": 0,
"grade": "C",
"verdict": "dirty",
"classification": "tor",
"confidence": 0.95,
"anonymized": true,
"vpnProvider": null,
"isTorExit": true,
"inVpnRange": false,
"inDatacenterRange": false,
"asn": "AS60729",
"asnName": "Stiftung Erneuerbare Freiheit",
"country": "DE",
"deductions": [
{
"factor": "network_origin",
"points": 98,
"detail": "tor at high confidence"
}
]
},
{
"input": "24.48.0.1:8080",
"ip": "24.48.0.1",
"port": 8080,
"score": 88,
"grade": "S",
"verdict": "clean",
"classification": "residential_clean",
"confidence": 0.3,
"anonymized": false,
"vpnProvider": null,
"isTorExit": false,
"inVpnRange": false,
"inDatacenterRange": false,
"asn": "AS5769",
"asnName": "VIDEOTRON",
"country": "CA",
"deductions": [
{
"factor": "no_corroboration",
"points": 8,
"detail": "no observation on record for this IP"
}
]
}
]
}Stream a list
Parameters
- ipsstring[]
Addresses, optionally with a port. Send this or input.
- inputstring
Pasted text; the server finds the addresses in it.
Response fields
- typestring
meta, result, error or done.
- indexinteger
Position of the address in the deduplicated list, from 0.
- ipstring
IP address that was checked.
- verdictstring | null
clean, suspect or dirty. Starter and above; null on Free.
- classificationstring
residential_clean, mobile, hosting, datacenter, vpn, residential_proxy, tor, relay or unknown.
- scoreinteger | null
Cleanliness score from 0 to 100. Starter and above; null on Free.
- gradestring | null
S+, S, A, B or C. Starter and above; null on Free.
- vpnProviderstring | null
VPN service on a vpn address, omitted when unknown. Starter and above; null on Free.
- lockedstring[]
Result lines: fields sent as null on this plan. Absent on Starter and above.
- planRequiredstring
Meta line: plan that includes the locked fields. Absent on Starter and above.
- reasonstring
On error: invalid_ip or reserved. On done: complete or quota_exceeded.
- processedinteger
On done: addresses checked.
- failedinteger
On done: addresses that could not be checked.
- totalinteger
On meta and done: unique addresses in the request.
curl -X POST -N https://ipscanner.io/v1/ip/bulk \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ips":["185.220.101.1","24.48.0.1","10.0.0.1"]}'{"type":"meta","total":3,"metered":3}
{"type":"result","ip":"185.220.101.1","verdict":"dirty","classification":"tor","confidence":0.95,"anonymized":true,"score":0,"grade":"C","isTorExit":true,"asn":"AS60729","country":"DE"}
{"type":"result","index":1,"ip":"24.48.0.1","verdict":"clean","classification":"residential_clean","confidence":0.3,"score":88,"grade":"S","asn":"AS5769","country":"CA"}
{"type":"error","index":2,"input":"10.0.0.1","reason":"reserved","message":"private address"}
{"type":"done","reason":"complete","total":3,"processed":2,"failed":1}