Developer API

One REST endpoint family for IP intelligence — geolocation, network owner, threat-list hits, an explainable score and an actionable BLOCK / REVIEW / ALLOW verdict. JSON in, JSON out, authenticated with a Bearer token.

Base URLhttp://showmyip.io/api/v1
AuthBearer token
Formatapplication/json

Quickstart

Three steps from zero to your first dossier.

  1. Get a key. Create an account (free tier included) and copy your key from API Keys.
  2. Send it as a Bearer token on every request.
  3. Make your first call — the liveness check needs no key.
GET /api/v1/ping/ · public
curl http://showmyip.io/api/v1/ping/

# 200 OK
# {"status":"ok","service":"showmyip-api","version":"1.0.0"}

Authentication

Every intelligence endpoint requires an API key as a Bearer token. Keys are created and revoked from your dashboard; each call counts against your plan's monthly quota and per-minute rate limit, both shared across all your keys.

Authorization header
Authorization: Bearer smip_live_xxxxxxxxxxxxxxxxxxxxxxxx

Single lookup

GET/api/v1/lookup/{ip}/

Full dossier for one IPv4 or IPv6 address. Counts as one lookup against your quota.

ipstringrequired The IPv4 or IPv6 address to investigate, as a path segment.
curl -H "Authorization: Bearer smip_live_xxx" \
  http://showmyip.io/api/v1/lookup/8.8.8.8/
import requests

r = requests.get(
    "http://showmyip.io/api/v1/lookup/8.8.8.8/",
    headers={"Authorization": "Bearer smip_live_xxx"},
)
d = r.json()
print(d["recommendation"], d["score"])  # REVIEW 15
const res = await fetch("http://showmyip.io/api/v1/lookup/8.8.8.8/", {
  headers: { Authorization: "Bearer smip_live_xxx" },
});
const d = await res.json();
console.log(d.recommendation, d.score); // REVIEW 15
200 OK · application/json
{
  "ip": "8.8.8.8",
  "score": 15,
  "level": "low",
  "connection_type": "Hosting / Datacenter",
  "recommendation": "REVIEW",
  "fraud": { "score": 50, "risk": "medium" },
  "geo": { "country_code": "US", "city": "Mountain View" },
  "asn": { "asn": 15169, "organization": "Google LLC" },
  "threats": [],
  "reverse_dns": "dns.google",
  "badges": ["DATACENTER"]
}

Bulk lookup

POST/api/v1/bulk

Investigate many addresses in one request (paid plans). Every IP in the batch counts against your quota; the batch size is capped by your plan.

ipsarrayrequired JSON array of IPv4/IPv6 strings, up to your plan's batch size.
POST /api/v1/bulk
curl -X POST http://showmyip.io/api/v1/bulk \
  -H "Authorization: Bearer smip_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"ips": ["8.8.8.8", "1.1.1.1", "45.15.21.0"]}'
200 OK · application/json
{
  "count": 3,
  "results": [
    { "ip": "8.8.8.8", "recommendation": "REVIEW", "score": 15 },
    { "ip": "1.1.1.1", "recommendation": "ALLOW", "score": 0 }
  ]
}

Network (ASN)

GET/api/v1/network/{asn}/

Address space, country footprint, threat overlap and a network-level risk score for an autonomous system. Counts as one lookup.

asnintegerrequired Autonomous System Number, e.g. 9009 (M247).
GET /api/v1/network/9009/
curl -H "Authorization: Bearer smip_live_xxx" \
  http://showmyip.io/api/v1/network/9009/
200 OK · application/json
{
  "asn": 9009,
  "organization": "M247 Europe SRL",
  "risk": { "score": 70, "level": "high", "badges": ["TOR", "BLOCKLIST"] },
  "address_space": { "announced_ranges": 2280, "ipv4_addresses": 1532160 },
  "threats": { "total": 29, "by_category": { "tor": 3, "blocklist": 26 } }
}

Account

GET/api/v1/account/

Your current plan, quota and month-to-date usage — for building your own dashboards or alerting. Requires a key; does not count against your quota.

GET /api/v1/account/
curl -H "Authorization: Bearer smip_live_xxx" \
  http://showmyip.io/api/v1/account/
200 OK · application/json
{
  "plan": "Growth",
  "monthly_quota": 2000000,
  "used_this_month": 6333,
  "remaining": 1993667,
  "rate_limit_per_min": 300,
  "bulk_limit": 500,
  "period": "2026-06"
}

Key response fields

The fields you'll read on most integrations. The full schema lives in the dashboard API console.

FieldTypeDescription
scoreintExplainable threat score, 0–100.
levelstringclean · low · elevated · high
recommendationstringActionable verdict: ALLOW REVIEW BLOCK
fraudobjectFraud/abuse risk tuned for signup & checkout: score 0–100, risk band (minimal→critical), and factors.
connection_typestringResidential / ISP · Hosting / Datacenter · Tor exit · Proxy / VPN.
geoobjectcountry_code, city, region, latitude, longitude.
asnobjectasn number + organization (the network owner).
cloudobjectPublic-cloud attribution when the IP is in a known range: provider (AWS, GCP, Azure, Oracle, DigitalOcean, Cloudflare), region, service. null otherwise.
threatsarrayMatched threat lists (Tor, FireHOL, …) with category.
badgesarrayQuick tags: CLEAN, TOR, BLOCKLIST, DATACENTER.

Plan limits

Every response carries X-Quota-Remaining and X-RateLimit-Limit headers so you can track usage in-band.

PlanMonthly quotaRate limitBulk batch

Status codes

CodeMeaning
200OK.
400Invalid IP, malformed body, or batch over your plan's limit.
401Missing, invalid, or revoked API key.
403Feature not on your plan (e.g. bulk on Free).
429Monthly quota or per-minute rate limit exceeded.

Try it in your dashboard →