API 키가 필요하나요?
아니요. 공개 HTTPS URL에 GET 하면 됩니다.
이 연결의 공인 IP 또는 임의 IPv4/IPv6를 안정적인 ipkit.v1 JSON으로 조회합니다. 기본 URL https://ipkit.dev. API 키 없음.
IPKit는 Cloudflare 에지에서 동작합니다. HTML과 JSON은 같은 조회 파이프라인입니다. 코드 기준 HTTP API를 설명합니다. SLA는 없으며 합리적으로 사용해 주세요.
모두 https://ipkit.dev 입니다. 경로는 대소문자를 구분합니다. IPv6는 셸에 따라 따옴표나 퍼센트 인코딩이 필요할 수 있습니다.
Lookup routes accept GET, HEAD, and OPTIONS. HEAD returns the same status and headers with an empty body. POST and other methods are not part of the lookup API. Clients do not send an API key; arbitrary lookups still need the operator-configured IPREGISTRY_API_KEY Worker secret.
There is no plaintext-only route and no endpoint that returns a single field. Read ip from the ipkit.v1 object (for example jq -r .ip). Lookups of private, loopback, link-local, CGNAT, multicast, unspecified, documentation, and other reserved IPv4/IPv6 ranges (including IPv4-mapped IPv6 such as ::ffff:10.0.0.1) return 400 RESERVED_IP. Current-IP detection of this connection is not subject to that check.
HTML과 JSON을 고르는 것은 / 뿐입니다. /{ip}와 /api/*는 항상 JSON입니다.
Successful lookups return Content-Type application/json; charset=utf-8, pretty-printed with two-space indent and a trailing newline. Field names stay in English. null means that value was not supplied. Locations are network estimates, not a street address or identity.
source is "ipregistry" when the configured intelligence provider succeeded. It is "cloudflare" when the record is built from Cloudflare request metadata (used for the current IP if the provider is missing or fails). Cloudflare metadata describes the connecting client only; it is never used as geolocation for a different target IP. Cloudflare-sourced records fill location.countryCode from request.cf.country or CF-IPCountry and location.country from that code when a name is known. Several network fields stay null, security flags are null, and security.risk is "unknown". If IPREGISTRY_API_KEY is unset, arbitrary lookups return 503 instead of guessing the caller’s country.
Illustrative ipkit.v1 object for 8.8.8.8. Values change with the address and data source; clients must tolerate nulls.
{
"schema": "ipkit.v1",
"ip": "8.8.8.8",
"type": "IPv4",
"source": "ipregistry",
"location": {
"continent": "North America",
"country": "United States",
"countryCode": "US",
"region": "California",
"regionCode": "CA",
"city": "Mountain View",
"postalCode": null,
"latitude": 37.386,
"longitude": -122.0838,
"timezone": "America/Los_Angeles"
},
"network": {
"asn": "AS15169",
"organization": "Google LLC",
"domain": "google.com",
"route": "8.8.8.0/24",
"usage": "hosting",
"carrier": null
},
"security": {
"proxy": false,
"vpn": false,
"tor": false,
"relay": false,
"cloud": true,
"threat": false,
"risk": "medium"
}
}Failures return JSON { "error": string, "code": string } with Cache-Control: no-store. error is a human-readable message; code is a stable machine token.
오류를 포함한 모든 JSON 조회 응답에 Access-Control-Allow-Origin: * 가 있습니다. OPTIONS 프리플라이트(204)는 /, /{ip}, /api/my-ip, /api/ip/{ip} 에서 GET, HEAD, OPTIONS, Max-Age 86400. / 의 HTML은 CORS JSON이 아닙니다.
연결 클라이언트 IP당 60초에 300회. SLA 없음. 합리적 사용을 부탁합니다. 무료 공개 도구이며 계약 API가 아닙니다.
Current-IP JSON (negotiated / and /api/my-ip) is Cache-Control: private, no-store so one client’s address is not reused for another. Specific-IP lookups (/{ip} and /api/ip/{ip}) are Cache-Control: public, max-age=300, s-maxage=3600, stale-while-revalidate=86400. Error responses are no-store. / JSON also varies on Accept and CF-Connecting-IP.
No authentication. HTTPS only. Parse schema and handle nulls and error objects.
Current public IP (curl)
curl https://ipkit.devLook up an address
curl https://ipkit.dev/8.8.8.8IPv6 in the path (quote colons)
curl "https://ipkit.dev/2001:4860:4860::8888"Always-JSON current IP
curl https://ipkit.dev/api/my-ipJavaScript fetch
const response = await fetch('https://ipkit.dev', {
headers: { Accept: 'application/json' },
});
const data = await response.json();
console.log(data.ip, data.location.countryCode);Python
import json, urllib.request
with urllib.request.urlopen('https://ipkit.dev') as response:
data = json.load(response)
print(data['ip'], data['location']['countryCode'])Shell one-liner (scripts / DDNS)
curl -sS https://ipkit.dev | jq -r .ip조회를 위해 요청 주소와 일반 요청 메타데이터를 Cloudflare 에지에서 처리합니다. 방문자 IP 앱 DB는 없습니다. 위치는 네트워크 추정입니다. 개인정보 처리방침을 보세요.
아니요. 공개 HTTPS URL에 GET 하면 됩니다.
text/plain 없음. JSON 파싱: curl -sS https://ipkit.dev | jq -r .ip
Accept에 text/html이 있어서입니다. ?format=json 또는 /api/my-ip 를 쓰세요.
아니요. /{ip}와 /api/ip/{ip}는 사설/예약 대역을 400 RESERVED_IP 로 거부합니다. GET / 와 /api/my-ip 는 연결 클라이언트를 반환합니다.
메시지 "IP intelligence is not configured for arbitrary lookups." 는 ipkit.dev 를 서빙하는 Cloudflare 계정에 Worker 시크릿 IPREGISTRY_API_KEY 가 없다는 뜻입니다. 현재 IP 조회는 계속 동작합니다.