Free IP Lookup API
Give it an IP address, get back its country, city, network operator and whether it belongs to a datacenter or VPN. No API key. No signup. No cost.
- No key — call it right now, from anywhere
- CORS — works from browser JavaScript
- 60/min — per client, no quota to buy
- JSON — stable field set, never a missing key
Try it
This is your own IP, fetched live from the API as you loaded this page:
Loading...
Endpoints
GET https://www.unblockmaster.com/api/v1/ip
Looks up the caller's own IP address.
curl https://www.unblockmaster.com/api/v1/ip
GET https://www.unblockmaster.com/api/v1/ip/<ip>
Looks up any IPv4 or IPv6 address.
curl https://www.unblockmaster.com/api/v1/ip/8.8.8.8
Response
{
"ip": "8.8.8.8",
"is_vpn": true,
"provider": "Google LLC",
"country": "United States",
"country_code": "US",
"city": "Mountain View",
"lat": 37.4056,
"lon": -122.0775
}
| Field | Type | Meaning |
|---|---|---|
ip | string | The address that was looked up. |
is_vpn | bool | null | True when the address belongs to a known datacenter or VPN range. null means the lookup could not be completed — not false. |
provider | string | Network operator, when known. |
country | string | Country name in English. |
country_code | string | Two-letter ISO 3166-1 code. |
city | string | City name, when known. |
lat, lon | float | null | Approximate coordinates of the city, not the device. |
Every field is always present. A value we do not have is an empty string or null, never a missing key — so you can read the response without guarding each field.
From JavaScript
const res = await fetch("https://www.unblockmaster.com/api/v1/ip");
const data = await res.json();
if (data.is_vpn === true) {
console.log("Visitor is behind a VPN or proxy");
} else if (data.is_vpn === false) {
console.log("Visitor is on a residential connection");
} else {
console.log("Could not determine"); // upstream was unavailable
}
From Python
import requests
r = requests.get("https://www.unblockmaster.com/api/v1/ip/1.1.1.1", timeout=5)
print(r.json()["country"]) # Australia
Rate limits and errors
The limit is 60 requests per minute per client. Every successful response carries
X-RateLimit-Limit and X-RateLimit-Remaining, so you can back off before
you hit it rather than after.
| Status | error | When |
|---|---|---|
| 400 | invalid_ip | The path segment is not a valid IPv4 or IPv6 address. |
| 405 | method_not_allowed | Anything other than GET, HEAD or OPTIONS. |
| 429 | rate_limited | Over the limit. Honour the Retry-After header. |
Fair use
- Free for personal and commercial use. No attribution required — though a link back is always welcome.
- Cache results on your side where you can. Geolocation does not change minute to minute.
- We cache each address for an hour, so repeated lookups of the same IP are cheap for both of us.
- We log nothing about the addresses you look up beyond ordinary web-server access logs.
- This is a best-effort free service with no uptime guarantee. Do not build something safety-critical on it.
See the API behind our VPN checker Or embed the tool instead