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/lookupreturns JSON.GET /api/lookup.pngreturns a 3200x2000 PNG.
Quick start
Hit the JSON endpoint with an ip query parameter:
curl "https://ipapi.mimso.co.uk/api/lookup?ip=1.1.1.1"
For the image:
curl -o map.png "https://ipapi.mimso.co.uk/api/lookup.png?ip=1.1.1.1"
Base URL
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.
Access-Control-Allow-Origin: *, so they work from the browser.
GET /api/lookup
Returns a JSON object for an IPv4 or IPv6 address.
Parameters
1.1.1.1 or 2606:4700::1111.
Response shape
A successful call returns the same top-level structure for every address:
{ "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.
"Unknown".GB.EU.Europe/London.{ lat: number, lon: number }.network
ASN, ISP and routing details.
AS13335.1.1.1.0/24.business, isp, hosting, education or government.RIPE, ARIN, APNIC.security
Boolean signals. true when the address matches.
contact
Abuse contact details from the regional registry, where available. Fields may be empty if the registry has nothing on file.
meta
Information about the response itself.
Errors
Errors return success: false and a short message. Status codes follow standard HTTP semantics.
400 missing or invalid address
{ "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.
{ "success": false, "error": "No coordinates available for that address" }
500 server error
{ "success": false, "error": "Internal server error" }
GET /api/lookup.png
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
dark (default), light or satellite.
Response
An image/png response, cached for one hour. Returns 422 when the address has no coordinates.
Preview
Example for 1.1.1.1. Switch between styles to see how each renders.
<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:
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
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.
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
curl "https://ipapi.mimso.co.uk/api/lookup?ip=8.8.8.8" | jq
Image
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:
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>:
<img src="https://ipapi.mimso.co.uk/api/lookup.png?ip=1.1.1.1" alt="Map" width="800" height="500">
Python
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/lookupnow supports?format=textand?format=csv.- Hitting
/withcurlreturns 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.