Home / Docs

IP Lookup API

Look up location, network and abuse details for any IPv4 or IPv6 address. Two endpoints, JSON and PNG. No keys, no signup.

Overview

The Mimso IP Lookup API returns geolocation, ASN, network, anonymisation signals and abuse contact data for a given address. It also generates a shareable PNG with a map and key details.

  • GET /api/lookup returns JSON.
  • GET /api/lookup.png returns a 3200x2000 PNG.

Quick start

Hit the JSON endpoint with an ip query parameter:

shell
curl "https://ipapi.mimso.co.uk/api/lookup?ip=1.1.1.1"

For the image:

shell
curl -o map.png "https://ipapi.mimso.co.uk/api/lookup.png?ip=1.1.1.1"

Base URL

https://ipapi.mimso.co.uk

HTTPS only. Plain HTTP requests are redirected.

Authentication

No authentication. No API keys. There is no hard rate limit but please cache responses where you can. IP data rarely changes minute to minute.

CORSAll endpoints respond with Access-Control-Allow-Origin: *, so they work from the browser.

GET /api/lookup

GET /api/lookup?ip=<address>

Returns a JSON object for an IPv4 or IPv6 address.

Parameters

ip required The address to look up, e.g. 1.1.1.1 or 2606:4700::1111.

Response shape

A successful call returns the same top-level structure for every address:

response.json
{
  "success": true,
  "query":   "1.1.1.1",
  "geo":      { ... },
  "network":  { ... },
  "security": { ... },
  "contact":  { ... },
  "meta":     { "response_time_ms": 142 }
}

geo

Where the address is, as best we can tell.

city string City name, or "Unknown".
region string State, county or administrative region.
country string Country name.
country_codestring ISO 3166-1 alpha-2 code, e.g. GB.
continent string Continent code, e.g. EU.
timezone string IANA timezone, e.g. Europe/London.
coordinates object { lat: number, lon: number }.
postal_code string Postcode, if known.
local_time string ISO 8601 local time at the address.
is_eu boolean Whether the country is an EU member state.

network

ASN, ISP and routing details.

organization string Organisation the range is registered to.
isp string Internet service provider name.
asn string Autonomous system number, e.g. AS13335.
as_route string AS route prefix, e.g. 1.1.1.0/24.
as_description string AS description string.
range string First and last address in the range.
domain string Associated domain for the organisation.
type string business, isp, hosting, education or government.
rir string Regional registry, e.g. RIPE, ARIN, APNIC.

security

Boolean signals. true when the address matches.

is_vpn boolean Known VPN exit.
is_proxy boolean Open or commercial proxy.
is_tor boolean Tor exit node.
is_datacenter boolean Hosted in a datacentre.
is_mobile boolean Mobile carrier.
is_crawler boolean Bot or crawler.
is_abuser boolean Address linked to abusive traffic.
is_bogon boolean Reserved or non-routable range.

contact

Abuse contact details from the regional registry, where available. Fields may be empty if the registry has nothing on file.

abuse_email string Email address for abuse reports.
abuse_name string Name of the contact or team.
abuse_address string Postal address.
abuse_phone string Phone number.

meta

Information about the response itself.

response_time_ms number Server-side response time in milliseconds.

Errors

Errors return success: false and a short message. Status codes follow standard HTTP semantics.

400 missing or invalid address

400.json
{
  "success": false,
  "error":   "Missing IP parameter. Use ?ip=x.x.x.x"
}

422 unmappable address

Returned by /api/lookup.png when an address has no usable coordinates.

422.json
{
  "success": false,
  "error":   "No coordinates available for that address"
}

500 server error

500.json
{
  "success": false,
  "error":   "Internal server error"
}

GET /api/lookup.png

GET /api/lookup.png?ip=<address>&type=<style>

Returns a 3200x2000 PNG showing the address on a map, with a text overlay containing the IP, ISP, reverse DNS hostname (when one exists) and a location string. Bottom-right has an ipapi.mimso.co.uk watermark.

Parameters

ip required The address to render.
type string Map style. One of dark (default), light or satellite.

Response

An image/png response, cached for one hour. Returns 422 when the address has no coordinates.

Reverse DNSHostnames are resolved through a local resolver. If a PTR record does not exist, the hostname line is omitted from the image.

Preview

Example for 1.1.1.1. Switch between styles to see how each renders.

1.1.1.1
Map preview for 1.1.1.1
html
<img src="https://ipapi.mimso.co.uk/api/lookup.png?ip=1.1.1.1&type=dark" alt="Map">

Terminal use

Pipe-friendly endpoints for shells and scripts. Hit the root with curl for a quick summary of your own address:

shell
curl ipapi.mimso.co.uk

Field endpoints

Each returns a single value as plain text. They accept the same ?ip=, ?host= and ?cidr= parameters as /api/lookup, or default to the caller.

  • /ip, /hostname, /city, /region, /country, /country_code, /continent
  • /loc (lat,lon), /timezone, /postal
  • /org, /isp, /asn
shell
curl ipapi.mimso.co.uk/ip
curl ipapi.mimso.co.uk/country?ip=8.8.8.8
curl ipapi.mimso.co.uk/asn?host=cloudflare.com

Format switch

/api/lookup accepts ?format=text for key=value output, or ?format=csv for a header + row.

shell
curl "ipapi.mimso.co.uk/api/lookup?ip=1.1.1.1&format=text"
curl "ipapi.mimso.co.uk/api/lookup?ip=1.1.1.1&format=csv"

cURL

JSON

shell
curl "https://ipapi.mimso.co.uk/api/lookup?ip=8.8.8.8" | jq

Image

shell
curl -o map.png "https://ipapi.mimso.co.uk/api/lookup.png?ip=8.8.8.8&type=satellite"

JavaScript

Browser or Node, no library required:

fetch.js
const res = await fetch('https://ipapi.mimso.co.uk/api/lookup?ip=1.1.1.1');
const data = await res.json();

if (data.success) {
  console.log(data.geo.country, data.network.isp);
}

Embedding the map in an <img>:

embed.html
<img src="https://ipapi.mimso.co.uk/api/lookup.png?ip=1.1.1.1"
     alt="Map" width="800" height="500">

Python

example.py
import requests

r = requests.get(
    'https://ipapi.mimso.co.uk/api/lookup',
    params={'ip': '1.1.1.1'},
    timeout=5,
).json()

if r['success']:
    print(r['geo']['country'], r['network']['isp'])

Changelog

2026-06-28

  • Plain text field endpoints: /ip, /hostname, /city, /region, /country, /country_code, /continent, /loc, /timezone, /postal, /org, /isp, /asn.
  • /api/lookup now supports ?format=text and ?format=csv.
  • Hitting / with curl returns a pretty terminal summary instead of HTML.
  • Added hostname (rDNS) to the JSON response.

2026-05-19

  • Added /api/lookup.png. Map, IP, ISP, reverse DNS hostname and location, with dark, light and satellite styles.
  • Reverse DNS resolved through the local resolver at 127.0.0.1:53.
  • Redesigned the lookup and docs pages.

2025-12-14

  • Initial release of /api/lookup.
Copied