IP location and ASN API
GET https://hproxy.com/api/ip/{ip} returns country, region, city, coordinates, timezone, ASN and ISP for any public IP. Free, no key, CORS enabled, batch supported.
GET
https://hproxy.com/api/ip/{ip}Location and network for any IP
One GET returns where an IP is and which network runs it: country, region, city, coordinates, timezone, ASN, ASN organisation and ISP. No key, no signup, CORS enabled so you can call it straight from a browser or an extension.
This is the same lookup that powers the free proxy list and our own proxy checker, so if you are writing a proxy checker of your own, you can label your results with exactly the data we label ours with. It is read from offline databases, so there is no third-party API in the path.
Fair-use rate limit of roughly 600 burst and 20 per second per IP, with a clean
429 and Retry-After beyond that. Responses carry Cache-Control: public, max-age=21600: an address's location and ASN move on the order of weeks, so cache them hard rather than re-asking on every run.| Parameter | Type | Required | Description |
|---|---|---|---|
ip | IPv4 or IPv6 | required | The address to look up, in the path. Private, loopback, link-local, CGNAT and other reserved ranges are rejected with 400 private_ip, because they have no public location. |
curl "https://hproxy.com/api/ip/45.79.12.44"POST
https://hproxy.com/api/ipBatch: up to 100 addresses per call
If you are labelling a whole proxy list, use this instead of one request per proxy. Send up to 100 addresses and get one result per address, in the same order you sent them, so you can zip the two lists together without matching on anything.
Batching is ten times cheaper on quota, not just on latency. A batch costs
ceil(n / 10) units, so 100 addresses in one call costs 10, while the same 100 as single lookups costs 100. It is cheaper for us too, so the incentive points the same way for both of us. Labelling a 10 000-proxy list is 100 batches and clears in well under a minute.
Addresses that cannot be resolved come back as { "ip": "…", "found": false } rather than being dropped, so the arrays always line up.| Parameter | Type | Required | Description |
|---|---|---|---|
ips | string[] | required | Up to 100 IP addresses. A bare JSON array is also accepted. More than 100 returns 400 batch_too_large. |
curl -X POST "https://hproxy.com/api/ip" \
-H "content-type: application/json" \
-d '{"ips":["45.79.12.44","24.48.0.1","8.8.8.8"]}'200Lookup succeeded. A result with "found": false means we have no data for that address, which is not an error.400 invalid_ipNot a valid IPv4 or IPv6 address.400 private_ipA private, loopback, link-local, CGNAT or otherwise reserved address. These have no public location.400 batch_too_largeMore than 100 addresses in one batch. Split the list.429 rate_limitedSlow down. Retry-After tells you how long.Location and network only. This API answers where an address is and which network announces it. It deliberately does not return fraud scores, VPN, Tor or proxy detection, or abuse history. If you need those, they are a separate product, not part of the free tier.
**
is_datacenter is best effort.** It reflects how the address's network is classified, and that classification is not perfect: some hosting ranges are recorded as residential and occasionally the reverse. Treat it as a hint, not a verdict. asn and asn_org are the reliable signal if you need to reason about who runs an address. Country and ASN are accurate; city is absent for anycast addresses rather than guessed.Building a proxy checker? Our own desktop checker is open source and uses exactly this endpoint to fill its location and ISP columns. Feel free to do the same.
Need a hand wiring this up? Email [email protected]. A real person reads every message.