For terminals and scripts

Same answer as the page, one curl away.

Every endpoint answers for the address the request comes from. No key, no account, no tracking beyond a per-address rate limit. Example outputs below use documentation addresses (203.0.113.0/24, 2001:db8::/32).

Your address, plain text

curl, wget and HTTPie get the bare address and a newline on the home page. Browsers get the full Truth Check.

$ curl peekip.com
203.0.113.24
$ curl peekip.com/ip.txt
203.0.113.24
Same answer for any client, with CORS * so a web page can call it.

Force IPv4 or IPv6

The 4. host has only an IPv4 address and the 6. host only an IPv6 one, so each shows the address your machine uses for that family. If your connection has no IPv6, the 6 host can’t be reached and curl reports a connection error.

$ curl 4.peekip.com/ip.txt
203.0.113.24
$ curl 6.peekip.com/ip.txt
2001:db8:4f2a::17

The whole Truth Check as JSON

The verdict state, each source’s answer with its licence string, the flags (Tor, iCloud Private Relay, hosting ranges) and a link that explains it in a browser. Values from DB-IP carry “IP Geolocation by DB-IP”; values from IPinfo carry its attribution.

$ curl peekip.com/json
{
  "ip": "203.0.113.24",
  "family": "ipv4",
  "asn": 64500,
  "org": "Example Networks",
  "country": "US",
  "city_dbip": { "city": "Example City", "region": "Example", "country": "US" },
  "verdict": { "state": "agree", "sentence": "…", "inputs": [ … ] },
  "sources": [
    { "key": "dbip", "state": "agree", "value": "…", "licence": "IP Geolocation by DB-IP · City Lite, CC BY 4.0" },
    { "key": "ipinfo", "state": "unchecked", "value": "Not checked", "licence": "…" },
    { "key": "registry", … }, { "key": "geofeed", … }
  ],
  "flags": { "tor": false, "private_relay": false, "hosting": [], "cgnat": false },
  "checked_at": "2026-10-05T14:02:11.000Z",
  "explain": "https://peekip.com/"
}
$ curl -s peekip.com/json | jq -r .country
US
Pipe it into jq for a single field.

Limits and privacy

  • / and /ip.txt: 600 requests a minute per address. /json: 30 a minute, because it queries the registry and other sources.
  • Over the limit you get HTTP 429 with Retry-After: 60.
  • We count requests per endpoint for capacity planning. Addresses are only held by the in-memory rate limiter; see our policy and data sources.