IPinfoBox

API 문서

구독 중인 계정의 API 키로 조회해요. 헤더 X-API-Key에 키를 넣거나 주소 뒤에 ?key=를 붙여요. 3개월 플랜은 하루 5,000번까지, 6개월·12개월 플랜은 하루 제한이 없어요. 하루 사용량은 매일 0시(UTC)에 다시 채워져요. 모든 플랜이 1초에 20번까지예요.

기본 주소https://ipinfobox.com/api/v1

IP 하나 조회

curl -H "X-API-Key: YOUR_KEY" https://ipinfobox.com/api/v1/8.8.8.8

{
  "ip": "8.8.8.8", "version": 4, "type": "public",
  "country": { "code": "US", "name": "United States", "name_en": "United States" },
  "region": "California", "city": "Mountain View", "continent": "NA",
  "location": { "lat": 37.422, "lon": -122.085 },
  "asn": { "number": 15169, "org": "Google LLC" },
  "privacy": { "vpn": false, "vpn_provider": null, "tor": false,
               "hosting": true, "hosting_provider": "Google", "cloud_region": null }
}

IPv6도 같아요. 사설·특수 IP는 type이 private 또는 reserved이고 위치 값은 null이에요.

접속 판별 (privacy)

vpn, vpn_provider

공개 VPN 서버 목록에 있는 주소인지와 업체 이름(모르면 null)

tor

Tor Project 출구 노드 목록에 있는지

hosting, hosting_provider

클라우드 공식 IP 대역이나 호스팅 회사 망인지와 회사 이름

cloud_region

클라우드 대역이면 그 지역(예: us-east-1)

목록은 매일 갱신해요. 목록에 없는 VPN과 가정용 회선 프록시는 false로 나와요. 사설·특수 IP는 privacy가 null이에요. 판별 방법 자세히

방문자 IP로 쓰는 예

// Node.js (Express): ask for extra verification when a sign-up comes from a VPN, Tor or a data center
app.post("/signup", async (req, res) => {
  const ip = req.headers["cf-connecting-ip"] ?? req.ip; // behind Cloudflare: CF-Connecting-IP
  const r = await fetch(`https://ipinfobox.com/api/v1/${ip}`, { headers: { "X-API-Key": process.env.IPINFOBOX_KEY } });
  const info = await r.json();
  if (info.privacy && (info.privacy.vpn || info.privacy.tor || info.privacy.hosting)) {
    return res.status(403).json({ error: "extra verification required" });
  }
  // continue sign-up
});
# Python
import requests
info = requests.get(f"https://ipinfobox.com/api/v1/{ip}", headers={"X-API-Key": KEY}, timeout=3).json()
risky = bool(info.get("privacy")) and (info["privacy"]["vpn"] or info["privacy"]["tor"] or info["privacy"]["hosting"])

내 IP 조회

GET /api/v1/me        요청을 보낸 곳의 IP와 정보

남은 사용량

GET /api/v1/usage     {"plan_ends_at":"2026-11-11T...","used_today":12,"daily_limit":5000}  (하루 제한이 없는 플랜은 null)

오류

400 invalid_ip

IP 주소 형식이 아니에요.

401 invalid_api_key

키가 없거나 틀렸어요.

402 no_subscription

구독 기간이 끝났어요. 다시 결제하면 바로 쓸 수 있어요.

429 rate_limited / daily_limit

요청이 너무 많거나 오늘 사용량을 다 썼어요.