IP Geolocation API

IP Geolocation API provides real-time and accurate geolocation, and security information for any IPv4 or IPv6 address and domain name along with the user-agent detail for the provided user-agent string. You can geolocate your online visitors and provide them the customized user-experience accordingly.

We provide the two endpoints in our IP Lookup API to get geolocation information.

Single IP Geolocation Lookup API

Single IP Location API can be used in two ways to lookup any IP address or domain name with JSON or XML response. The URL for this endpoint is https://api.ipgeolocation.io/ipgeo and its full JSON response is below:

Response

1{
2    "ip": "8.8.8.8",
3    "hostname": "dns.google",
4    "continent_code": "NA",
5    "continent_name": "North America",
6    "country_code2": "US",
7    "country_code3": "USA",
8    "country_name": "United States",
9    "country_capital": "Washington, D.C.",
10    "state_prov": "California",
11    "district": "Santa Clara",
12    "city": "Mountain View",
13    "zipcode": "94043-1351",
14    "latitude": "37.42240",
15    "longitude": "-122.08421",
16    "is_eu": false,
17    "calling_code": "+1",
18    "country_tld": ".us",
19    "languages": "en-US,es-US,haw,fr",
20    "country_flag": "images/flags/us.svg",
21    "geoname_id": "6301403",
22    "isp": "Google LLC",
23    "connection_type": "",
24    "organization": "Google LLC",
25    "asn": "AS15169",
26    "currency": {
27    "code": "USD",
28    "name": "US Dollar",
29    "symbol": "$"
30    },
31    "time_zone": {
32    "name": "America/Los_Angeles",
33    "offset": -8,
34    "current_time": "2020-12-17 07:49:45.872-0800",
35    "current_time_unix": 1608220185.872,
36    "is_dst": false,
37    "dst_savings": 1
38    }
39}

Passing an IPv4, IPv6 Address or a domain

In order to find geolocation information about an IP address or a domain name, pass it as a query parameter like below. Note that apiKey is also passed as a query parameter for authorization. This endpoint is meant to be called from the server side.

Passing an IPv4

# Get geolocation for an IPv4 IP Address = 8.8.8.8
      $ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=8.8.8.8'

Without Passing an IP Address

When this endpoint is queried without an IP address, it returns the geolocation information of the device/client which is calling it. This endpoint is meant to be called from client side.

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY'
      * IP address is always included in the API response

Note: apiKey parameter can also be ommitted from your API request when this endpoint is called from client side using Request Origin.

Bulk IP Geolocation Lookup AP

This feature is available only on the paid API subscriptions. This endpoint allows you to perform the geolocation lookup for multiple IPv4, IPv6 addresses or domain names (maximum 50) at the same time. The requests count per lookup is equal to total IP addresses or domain names passed.

To perform bulk IP Geolocation Lookup, send a POST request and pass the "ips" array as JSON data along with it. Here is an example.

$ curl -X POST 'https://api.ipgeolocation.io/ipgeo-bulk?apiKey=API_KEY'
      -H 'Content-Type: application/json'
      -d '{ "ips": ["1.1.1.1", "1.2.3.4"] }'

Response in Multiple Languages

The geolocation information for an IP address from the IP Geolocation API can be retrieved in the following languages

  • English (en)
  • German (de)
  • Russian (ru)
  • Japanese (ja)
  • French (fr)
  • Chinese Simplified (cn)
  • Spanish (es)
  • Czech (cs)
  • Italian (it)

By default, the API responds in English. You can change the response language by passing the language code as a query parameter lang. Here are a few curl examples:

# Get geolocation for an IPv4 IP Address = 1.1.1.1 in Chinese language
      $ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&lang=cn'
          
      # Get details for an IPv6 IP Address = 2001:4860:4860::1 in Russian
      $ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=2001:4860:4860::1&lang=ru'

Only the paid plan subscriptions can get the response in languages other than English. All the other subscriptions will only get the response in English.

Filter Responses

We've built our API to give you fine granularity. Specify what you want in query parameter and get only those fields. This will save you processing time, bandwidth and improve the API response time.

You can filter the API response in two ways:

Get the Required Fields Only

First, you can filter the API response by specifying names of the fields that you want instead of getting the full response. Names of the required fields must be passed as a query parameter fields in the request. Here are a few examples to get only the required fields:

Get City Information Only

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&fields=city'

Response

Response

1{
2    "ip": "1.1.1.1",
3    "city": "South Brisbane"
4}

Get Country Name and Country Code (ISO2) Only

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&fields=country_code2,country_name'

Get the Time Zone Information Only

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&fields=time_zone'

Response

Response

1{
2    "ip": "1.1.1.1",
3    "time_zone": {
4    "name": "America/Los_Angeles",
5    "offset": -8,
6    "current_time": "2018-12-06 00:28:40.339-0800",
7    "current_time_unix": 1544084920.339,
8    "is_dst": false,
9    "dst_savings": 1
10    }
11}

Get Only the Local Currency Information of Multiple IP Addresses

You can use our filters with Bulk IP Lookup as well. Here is an example:

$ curl -X POST 'https://api.ipgeolocation.io/ipgeo-bulk?apiKey=API_KEY&fields=currency'
      -H 'Content-Type: application/json'
      -d '{ "ips": ["1.1.1.1", "1.2.3.4"] }'

Response

1[
2    {
3        "ip": "1.1.1.1",
4        "currency": {
5        "name": "Australian Dollar",
6        "code": "AUD"
7        }
8    },
9    {
10        "ip": "1.2.3.4",
11        "currency": {
12        "name": "Australian Dollar",
13        "code": "AUD"
14        }
15    }
16]

Get Geo Location Only

We know, most of the times, users are interested in geolocation information only. So, we have added a shortcut for you. You can specify just fields=geo in your query parameter.

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&fields=geo'

Response

1{
2    "ip": "1.1.1.1",
3    "country_code2": "AU",
4    "country_code3": "AUS",
5    "country_name": "Australia",
6    "state_prov": "Queensland",
7    "district": "Brisbane",
8    "city": "South Brisbane",
9    "zipcode": "4101",
10    "latitude": "-27.4748",
11    "longitude": "153.017"
12}

Remove the Unnecessary Fields

Second, you can also filter the API response by specifying the names of fields (except IP address) that you want to remove from the API response. Names of the fields must be passed as a query parameter excludes in the request. Here are a few examples to exclude the unnecessary fields:

Exclude Continent Code, Currency and, Time zone Objects

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&excludes=continent_code,currency,time_zone'

Response

1{
2    "ip": "1.1.1.1",
3    "continent_name": "Oceania",
4    "country_code2": "AU",
5    "country_code3": "AUS",
6    "country_name": "Australia",
7    "country_capital": "Canberra",
8    "state_prov": "Queensland",
9    "district": "Brisbane",
10    "city": "South Brisbane",
11    "zipcode": "4101",
12    "latitude": "-27.4748",
13    "longitude": "153.017",
14    "is_eu": false,
15    "calling_code": "+61",
16    "country_tld": ".au",
17    "languages": "en-AU",
18    "country_flag": "images/flags/au.svg",
19    "isp": "Cloudflare Inc.",
20    "connection_type": "",
21    "organization": "",
22    "geoname_id": "2207259"
23}

Get the Geo Field and Exclude Continent Information

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&fields=geo&excludes=continent_code,continent_name'

Response

1{
2    "ip": "1.1.1.1",
3        "country_code2": "AU",
4        "country_code3": "AUS",
5        "country_name": "Australia",
6        "state_prov": "Queensland",
7        "district": "Brisbane",
8        "city": "South Brisbane",
9        "zipcode": "4101",
10        "latitude": "-27.4748",
11        "longitude": "153.017"
12}

IP-Security Information for an IP Address

IP Geolocation API also provides IP-Security information on all the paid subscriptions, but doesn't respond it by default. To get IP-Security information along with geolocation information, you must pass the include=security as a query parameter in the URL.

Here is an example to IP Geolocation lookup that includes IP security information for the IP address:

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=198.90.78.238&fields=geo&include=security'

Response

1{
2    "ip": "198.90.78.238",
3    "country_code2": "CA",
4    "country_code3": "CAN",
5    "country_name": "Canada",
6    "state_prov": "Quebec",
7    "district": "Sainte-Rose",
8    "city": "Laval",
9    "zipcode": "H7P 4W5",
10    "latitude": "45.58160",
11    "longitude": "-73.76980",
12    "security": {
13    "threat_score": 7,
14    "is_tor": false,
15    "is_proxy": true,
16    "proxy_type": "VPN",
17    "is_anonymous": true,
18    "is_known_attacker": false,
19    "is_cloud_provider": false
20}
21}

Hostname Lookup for an IP Address

IPGeolocation API also provide hostname lookup for an IP address on all the paid subscriptions, but doesn't respond it by default. To get the hostname for an IP address, you can pass one of the three values (hostname, liveHostname, hostnameFallbackLive) as a URL parameter (include).

Here is an example to IP Geolocation lookup that includes hostname for the IP address:

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&fields=geo&include=liveHostname'

Response

1{
2    "ip": "1.1.1.1",
3    "hostname": "one.one.one.one",
4    "country_code2": "AU",
5    "country_code3": "AUS",
6    "country_name": "Australia",
7    "state_prov": "Queensland",
8    "district": "Brisbane",
9    "city": "South Brisbane",
10    "zipcode": "4101",
11    "latitude": "-27.4748",
12    "longitude": "153.017"
13}

include=hostname URL Parameter

This URL parameter enables the IPGeolocation API to lookup hostname from our IP-Hostname database and returns the same IP address if there is no hostname found for the queried IP address. Lookup thru IP-Hostname database is faster than other options but is experimental and under process and can produce unwanted output.

include=liveHostname URL Parameter

This URL parameter enables the IPGeolocation API to lookup hostname from live sources. Lookup thru live sources is accurate but can introduce more latency to your query to IPGeolocation API

include=hostnameFallbackLive URL Parameter

This URL parameter enables the IPGeolocation API to lookup hostname from our IP-Hostname database and if there is no hostname found for the queried IP address, then lookup thru the live sources. This option has been introduced for faster and accurate lookup.

User-Agent Information for a Device

IP Geolocation API also provides User-Agent information on all the paid subscriptions, but doesn't respond it by default. To get User-Agent information along with the geolocation information, you must pass the include=useragent as a query parameter in the URL.

Here is an example to IP Geolocation lookup that includes User-Agent information for a device from which the query originated:

$ curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1&fields=geo&include=useragent'

Response

1{
2    "ip": "1.1.1.1",
3    "country_code2": "AU",
4    "country_code3": "AUS",
5    "country_name": "Australia",
6    "state_prov": "Queensland",
7    "district": "South Brisbane",
8    "city": "Brisbane",
9    "zipcode": "4101",
10    "latitude": "-27.47561",
11    "longitude": "153.01537",
12    "user_agent": {
13        "userAgentString": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
14        "name": "Chrome",
15        "type": "Browser",
16        "version": "51.0.2704.103",
17        "versionMajor": "51",
18        "device": {
19            "name": "Linux Desktop",
20            "type": "Desktop",
21            "brand": "Unknown",
22            "CPU": "Intel x86_64"
23        },
24        "engine": {
25            "name": "Blink",
26            "type": "Browser",
27            "version": "51.0",
28            "versionMajor": "51"
29        },
30        "operatingSystem": {
31            "name": "Linux",
32            "type": "Desktop",
33            "version": "Intel x86_64",
34            "versionMajor": "Intel x86"
35        }
36    }
37}

Note: To get hostname, IP-Security information, and user-agent information together for an IP address and the device, you can pass include=hostname,security,useragent as a query parameter in the URL.

Reference to IPGeolocation API Response

FieldTypeDescriptionCan be empty?
domainstringDomain name that is used to lookup geolocation information. It is not returned if an IP address is used to query IP Geolocation API.Yes
ipstringIP address that is used to lookup geolocation information.No
hostnamestringHostname of the IP address used to query IP Geolocation API.No
continent_codestring2-letter code of the continent.No
continent_namestringName of the continent.No
country_code2stringCountry code (ISO 3166-1 alpha-2) of the country.No
country_code3stringCountry code (ISO 3166-1 alpha-3) of the country.No
country_namestringName of the country.No
country_capitalstringName of the country’s capital.No
state_provstringName of the state/province/region.Yes
districtstringName of the district or county.Yes
citystring Name of the city.Yes
zipcodestringZIP code of the placeYes
latitudefloatLatitude of the place.YNo
longitudefloatLongitude of the place.No
is_eubooleanIs the country belong to European Union?No
calling_codestringCalling code of the country.No
country_tldstringcountry_tldNo
languagesstringComma-separated list of the languages’ codes, spoken in the country.No
country_flagstringURL to get the country flag.No
geoname_id numberGeoname ID of the place from geonames.orgNo
ispstring Name of the ISP holding the IP address.No
connection_typestringType of the connection, consuming the IP address.Yes
organizationstringName of AS organization holding the IP address.Yes
asnstringAutonomous system number of the autonomous system, to which IP address belongs to.Yes
currency.codestringCurrency code (ISO 4217).No
currency.namestringCurrency name (ISO 4217).No
currency.symbolstringCurrency symbol.No
time_zone.namestringName (ISO 8601) of the time zone.No
time_zone.offsetnumberTime zone offset from UTC.No
time_zone.current_timestringCurrent time in ‘yyyy-MM-dd HH:mm:ss.SSS+ZZZ’ format.No
time_zone.current_time_unixfloatCurrent time in seconds since 1970.No
time_zone.is_dstbooleanIs the time zone in daylight savings?No
time_zone.dst_savings numberTotal daylight savings.No
security.threat_scorenumberIP address’ threat score. It ranges from 0 to 100. 100 indicates highest threat and vice versa for lower score.No
security.is_tor booleanIndicates if the IP address is being consumed on a Tor endpoint.No
security.is_proxyboolean Indicates if the IP address belongs to a proxy networNo
security.proxy_typestringType of the proxy network if the IP address belongs to a proxy network..Yes
security.is_anonymousbooleanIndicates if the IP address is being used anonymously.No
security.is_known_attackerbooleanIndicates if the IP address is enlisted as an attacking IP address.No
security.is_cloud_provider booleanIndicates if the IP address belongs to a cloud provider (computing infrastructure providers).No
user_agent.userAgentStringstringUser-Agent string passed along with the query in the User-Agent header.No
user_agent.namestringUser-Agent Name.No
user_agent.typestringUser-Agent ClassNo
user_agent.versionstringUser-Agent Version.No
user_agent.versionMajorstringUser-Agent Version Major.No
user_agent.device.namestringDevice Name.No
user_agent.device.typestringDevice Type.No
user_agent.device.brandstringDevice Brand.No
user_agent.device.CPUstring Device CPU Model.No
user_agent.engine.namestringLayout Engine Name.tNo
user_agent.engine.typestringLayout Engine ClassNo
user_agent.engine.versionstringLayout Engine Version.No
user_agent.engine.versionMajorstring Layout Engine Version Major.No
user_agent.operatingSystem.namestringOperating System Name.No
user_agent.operatingSystem.typestringOperating System ClassNo
user_agent.operatingSystem.versionstringOperating System Version.No
user_agent.operatingSystem.versionMajorstring Operating System Version Major.No

Error Codes

IP Geolocation API returns 200 HTTP status for a successful API request along with the response.

While, in case of a bad or illegal request, IP Geolocation API returns 4xx HTTP code along with a descriptive message as why the error occured.

Here is the description of why a specific HTTP code is returned:

HTTP StatusDescription
401

It is returned for one of the following reasons:

  • If API key (as 'apiKey' URL parameter) is missing from the request to IP Geolocation API.

  • If an invalid (a random value) API key is provided.

  • If the API request is made from an unverified ipgeolocation.io account.

  • If your account has been disabled or locked to use by the admin due to abuse or illegal activity.

  • When the request to IP Geolocation API is made using API key for a database subscription

  • When the request to IP Geolocation API is made on the 'paused' subscription.

  • If you’re making API requests after your subscription trial has been expired.

  • If your active until date has passed and you need to upgrade your account.

  • If bulk IP to geolocation look-ups endpoint is called using free subscription API key.

  • If user-agent lookup using custom string or bulk user-agent look-ups endpoints are called using free subscription API key

  • When the wrong input is provided in the request to any endpoint of IP Geolocation API.

403

It is returned for one of the following reasons:

  • If IP to geolocation look-up for a domain name is done using a free subscription API key.

404If the queried IP address is a [bogon]() (bogus IP address from the bogon space) IP address.
429

It is returned for one of the following reasons:

  • If the API usage limit has reached for the free subscriptions, or paid subscriptions with the status 'past due', 'deleted' or 'trial expired'.

  • If the surcharge API usage limit has reached against the subscribed plan.