IP Geolocation API
Simple. Accurate. Reliable.
Drop in an IP address, get back accurate location data — country, city, coordinates, ISP, timezone, and more. No SDKs, no complex auth, no unnecessary overhead.
// Try it now curl https://edznet.io/api/geo/v1/lookup \ -H "X-API-Key: geo-free-your-key" { "ip": "8.8.8.8", "country_code": "US", "country": "United States", "region": "California", "city": "Mountain View", "latitude": "37.405000", "longitude": "-122.078000", "isp": "Google LLC", "timezone": "America/Los_Angeles" }
99.9%
Uptime SLA on all API endpoints
5–20ms
Average response time (cached)
IPv4 + IPv6
Full dual-stack address support
Simple, Transparent Pricing
Every plan includes the same accurate IP location data. Pick the tier that matches your volume. Pricing shown in ZAR (R). Switch to GBP (£).
Free
For evaluation, personal projects, and low-volume use
No payment method required
- 100 lookups per month
- Full location data (country, city, coordinates)
- ISP, timezone & country metadata
- SSL-encrypted endpoint
- No credit card needed
Pro
For production applications and higher-volume needs
R10 per 1,000 additional lookups pro-rata
- 10,000 lookups per month
- Full location data (country, city, coordinates)
- ISP, timezone & country metadata
- SSL-encrypted endpoint
- Priority support
- Prorated billing from the 1st
API Guide
Get started in under a minute. No SDKs, no tokens to refresh, no complex setup.
1. Get Your API Key
After purchasing a plan, your API key is available instantly in the
My Licenses section
of your client area. Each subscription generates a unique key prefixed with
geo-free- (Free) or geo-pro- (Pro).
2. Make Your First Request
Send a GET request to the lookup endpoint with your API key.
The API accepts both IPv4 and IPv6 addresses, and will resolve hostnames automatically.
# Look up an IP address curl https://edznet.io/api/geo/v1/lookup?key=geo-free-xxxxxxxxxx&ip=8.8.8.8 # Or use the X-API-Key header curl https://edznet.io/api/geo/v1/lookup \ -H "X-API-Key: geo-free-xxxxxxxxxx" \ -G -d "ip=8.8.8.8" # Resolve a hostname curl "https://edznet.io/api/geo/v1/lookup?key=geo-free-xxxxxxxxxx&ip=edznet.io"
// Look up an IP address $key = 'geo-free-xxxxxxxxxx'; $ip = '8.8.8.8'; $ch = curl_init("https://edznet.io/api/geo/v1/lookup?key=$key&ip=$ip"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); echo $data['country']; // "United States"
// Look up an IP address const key = 'geo-free-xxxxxxxxxx'; const ip = '8.8.8.8'; const response = await fetch( 'https://edznet.io/api/geo/v1/lookup?key=' + key + '&ip=' + ip ); const data = await response.json(); console.log(data.country); // "United States"
# Look up an IP address import requests key = 'geo-free-xxxxxxxxxx' ip = '8.8.8.8' response = requests.get( 'https://edznet.io/api/geo/v1/lookup', params={'key': key, 'ip': ip} ) data = response.json() print(data['country']) # United States
3. Response Format
All responses are returned as JSON. A successful lookup includes the following fields:
Response Fields
| Field | Type | Description |
|---|---|---|
ip | string | The IP address queried |
hostname | string | Resolved hostname (if applicable) |
country_code | string | ISO 3166-1 alpha-2 code |
country | string | Full country name |
region | string | Region / state name |
city | string | City name |
post_code | string | Postal / ZIP code |
latitude | string | Approximate latitude (6 decimal places) |
longitude | string | Approximate longitude (6 decimal places) |
timezone | string | IANA timezone name or UTC offset |
utc_offset_seconds | integer | UTC offset in seconds |
is_dst | boolean | Whether DST is active at the location |
asn | integer | Autonomous System number |
isp | string | Network operator / AS name |
is_proxy | boolean | Whether the IP is a known proxy / VPN |
is_datacenter | boolean | Whether the IP belongs to a hosting/datacenter |
connection_type | string | Network type: hosting, residential, mobile, business, unknown |
flag | string | Country flag image URL |
flag_emoji | string | Country flag as emoji (e.g. 🇺🇸) |
continent | string | Continent code (AF, AS, EU, NA, OC, SA) |
continent_name | string | Full continent name |
is_eu_member | boolean | Whether the country is an EU member |
currency | string | ISO 4217 currency code (e.g. USD, GBP, ZAR) |
currency_symbol | string | Local currency symbol (e.g. $, £, €) |
local_time | string | Current local time in the IP's timezone |
plan | object | Plan details including tier, limit, and quota |
Sample Response
{
"ip": "8.8.8.8",
"hostname": "dns.google",
"country_code": "US",
"country": "United States",
"region": "California",
"city": "Mountain View",
"post_code": "94043",
"latitude": "37.405000",
"longitude": "-122.078000",
"timezone": "America/Los_Angeles",
"utc_offset_seconds": -25200,
"is_dst": true,
"asn": 15169,
"isp": "Google LLC",
"is_proxy": false,
"is_datacenter": true,
"connection_type": "hosting",
"flag": "https://edznet.io/api/geo/v1/flags/us",
"flag_emoji": "🇺🇸",
"continent": "NA",
"continent_name": "North America",
"is_eu_member": false,
"currency": "USD",
"currency_symbol": "$",
"local_time": "2026-06-30T12:34:56",
"plan": {
"tier": "free",
"limit": 100,
"used": 12,
"remaining": 88,
"resets_at": "2026-07-01T00:00:00Z"
}
}
4. Errors & Rate Limits
The API uses standard HTTP status codes to indicate success and failure:
| Status | Meaning |
|---|---|
200 OK | Successful lookup |
400 Bad Request | Missing or invalid ip parameter |
401 Unauthorized | Missing or invalid API key |
402 Payment Required | Subscription expired or suspended |
429 Too Many Requests | Monthly rate limit exceeded |
500 Server Error | Internal error — please contact support |
When you exceed your monthly rate limit, the API returns 429 and includes
X-RateLimit-* headers with reset information. Usage resets on the 1st of each month
(UTC). Your current usage is always visible in the plan field of every response.
Every response also includes rate limit information in HTTP headers — useful if you want to check usage without parsing the response body:
# Headers returned with every successful response
X-RateLimit-Tier: free
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 88
X-RateLimit-Reset: 2026-07-01T00:00:00Z
6. Country Flags
Need a flag icon to accompany your lookup results? Use the flags endpoint to get a transparent PNG by country code:
curl https://edznet.io/api/geo/v1/flags/us # Returns a 16x12 PNG of the US flag # Display in HTML: <img src="https://edznet.io/api/geo/v1/flags/us" alt="US">
Rate Limit Overview
Monthly limits reset automatically. Need more? Contact us for custom volume pricing.
Free Tier
lookups per month, no payment method required. Perfect for testing and personal projects.
Pro Tier
lookups per month with priority support. Ideal for production applications.
Reset
of each month (UTC). Unused quota does not roll over to the next month.
Need More?
Contact us for enterprise volume pricing or dedicated infrastructure.
Ready to Build with IP Geolocation?
Start with the Free tier — no credit card, no commitment. Upgrade to Pro when you need the volume.
Start Free