API 문서

단순하고 일관된 엔드포인트. CORS 활성화. 인증 불필요. 완전한 다국어 지원 — 모든 필드의 키와 값이 10개 이상의 언어로 번역되어 반환됩니다.

기본 URL

https://ipto.to

빠른 시작

# Detect your own IP curl https://ipto.to/v1/ip # Look up any IP curl https://ipto.to/v1/ip/8.8.8.8 # Bulk lookup (up to 100 IPs, Pro/Enterprise only) curl -X POST https://ipto.to/v1/ip/bulk \ -H "Content-Type: application/json" \ --data '["1.1.1.1","8.8.8.8","9.9.9.9"]'

터미널 단축 명령: 요청이 curl, Wget, HTTPie에서 온 경우(User-Agent로 감지) curl ipto.to 또는 curl ipto.to/8.8.8.8도 동작합니다(https://나 /v1/ip/ 불필요). 이 경우 아래의 전체 스키마가 아니라 ipinfo.io 스타일의 더 짧은 필드 집합(ip, country, city, asn, org, ...)을 반환합니다 — 이 페이지에 문서화된 전체 응답을 받으려면 /v1/ip 경로를 직접 사용하세요.

IP만 필요할 때: curl ipto.to/ip(또는 브라우저에서 열기)는 오직 본인의 IP 주소만 일반 텍스트로 반환합니다 — 73.9.114.155처럼, JSON도 페이지 장식도 없습니다. ipinfo.io/ip와 직접적으로 동일합니다. 아래의 GET /ip를 참고하세요.

기본적으로 다국어 지원: ?lang=을 지원되는 코드로 설정하면 응답의 모든 JSON 키와 값이 번역되어 돌아옵니다 — 국가/대륙뿐만 아니라요. 전체 언어 목록과 &localize=0 옵트아웃은 아래 현지화를 참고하세요.

curl "https://ipto.to/v1/ip/8.8.8.8?lang=de" # "landesname":"Vereinigte Staaten","ist_vpn":false, ... # every key & value comes back translated -- add &localize=0 for the legacy English-keys shape

Lookup Lab

ipto 요청을 자유롭게 만들고, 사용하는 언어의 바로 실행 가능한 코드로 복사하거나, 여기서 바로 보내 실시간 응답을 확인하세요. 무료 요금제는 키가 필요 없습니다.

MCP 서버

ipto는 MCP(Model Context Protocol) 툴 서버로도 접근할 수 있습니다 — Claude Desktop, Cursor 또는 MCP를 지원하는 클라이언트를 아래 엔드포인트로 연결하면 호출 가능한 14개의 도구가 노출됩니다: ip_lookup, bulk_ip_lookup(Pro/Enterprise), asn_lookup, country_lookup, reverse_dns_lookup, user_agent_parse, phone_lookup, email_lookup, fraud_score, language_detect, currency_convert, weather_lookup, trademark_lookup, patent_lookup. Streamable HTTP 기반 JSON-RPC 2.0을 사용하며 — POST만 지원하고 세션/SSE가 필요하지 않습니다. 인증 방식은 REST API와 동일합니다: 무료 티어(IP당 하루 1,000회 요청)는 생략 가능하며, 엔드포인트 URL에 ?api_key=를 추가할 수 있습니다.

{ "mcpServers": { "ipto": { "url": "https://ipto.to/mcp" } } }

stdio만 지원하는 클라이언트의 경우 다음으로 브리지하세요: npx mcp-remote https://ipto.to/mcp

curl -X POST https://ipto.to/mcp \ -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ip_lookup","arguments":{"ip":"8.8.8.8"}}}'

엔드포인트

GET/ip

요청한 클라이언트의 공인 IP 주소만을 일반 텍스트(Content-Type: text/plain)로 반환합니다 — 예: 73.9.114.155. ipinfo.io/ip와 직접적으로 동일하게 동작합니다: curl, Wget, HTTPie, 또는 일반 브라우저 방문 모두 동일하게 작동하며(위의 curl ipto.to 단축 명령과 달리 User-Agent 감지를 하지 않습니다), 브라우저에서 열면 페이지 장식 없이 순수한 IP만 표시됩니다.

파라미터도 쿼리 문자열도 없습니다. 전체 지오로케이션/위협 인텔리전스 객체가 필요하면 아래의 GET /v1/ip를 대신 사용하세요. 이 라우트는 접속 중인 IP를 직접 읽으며(D1/KV 조회 없음), 일일 요청 한도에 포함되지 않습니다 — 요청 제한을 참고하세요.

curl https://ipto.to/ip # 203.0.113.7
GET/v1/ip

요청 IP에 대한 지오로케이션과 위협 인텔리전스를 반환하며, CF 엣지 객체를 통한 도시 수준 데이터도 포함됩니다.

필수 파라미터는 없습니다. ?lang=, ?fields=, ?format=을 지원합니다 — 아래의 현지화 및 출력 형식을 참고하세요.

curl https://ipto.to/v1/ip # the lookup for the calling IP: same shape as /v1/ip/:ip below
GET/v1/ip/:ip

모든 IPv4 주소를 조회합니다. 도시 수준 필드(city, state, postal_code, latitude, longitude, timezone)는 해당 IP가 병합된 두 지리 데이터셋(IP2Location 또는 MaxMind) 중 하나에 포함될 때 채워집니다 — 응답의 geo_precision을 확인하면 도시 수준 데이터인지 국가 수준 데이터인지 알 수 있습니다. timezone의 형식은 어느 소스가 일치했는지에 따라 달라집니다(IP2Location인 경우 UTC 오프셋 문자열, MaxMind인 경우 IANA 명칭). IPv6 조회는 현재 국가 수준 데이터만 반환합니다.

ParameterInDescription
ippath필수. 유효한 IPv4 또는 IPv6 주소.
langquery선택 사항. country_name과 continent를 현지화합니다: en(기본값), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN.
fieldsquery선택 사항. 포함할 필드를 쉼표로 구분한 목록. 예: ?fields=ip,country_code,is_vpn
formatquery선택 사항. 응답 형식: json(기본값), csv, text, xml, yaml.
curl https://ipto.to/v1/ip/8.8.8.8 # only the fields you want: curl "https://ipto.to/v1/ip/8.8.8.8?fields=ip,asn,country_code,city" # {"ip":"8.8.8.8","asn":15169,"country_code":"US","city":"Mountain View"}
GET/v1/search/:query

홈페이지 검색창 뒤에서 동작하는 통합 검색 엔드포인트입니다. :query가 IP인지, ASN(AS15169 또는 15169)인지, 2자리 국가 코드인지, 이메일인지, 전화번호인지를 감지한 뒤 관련된 모든 검사를 하나의 응답으로 취합합니다. IP 쿼리의 경우 서버 측에서 병렬로 기본 IP 조회에 더해 RPKI, IP-to-company, 모바일 통신사, 호스팅된 도메인, places까지 함께 조회하므로, 기능별로 여러 번 요청하는 대신 검색 한 번으로 일일 요청 한도를 한 번만 소모합니다.

ParameterInDescription
querypath필수. IP, ASN, 국가 코드, 이메일 또는 전화번호.
FieldTypeDescription
querystring전달받은 입력을 디코딩한 값입니다.
detected_typestring"ip", "asn", "country", "email", "phone" 중 하나.
ipobject|nulldetected_type이 "ip"일 때 존재합니다 — GET /v1/ip/:ip와 동일한 형식입니다.
rpkiobject|nullIP 쿼리에서 존재합니다 — GET /v1/ip/:ip/rpki와 동일한 형식입니다.
companyobject|nullIP 쿼리에서 존재합니다 — GET /v1/ip/:ip/company와 동일한 형식입니다.
whoisobject|nullIP 쿼리에서 존재합니다 — GET /v1/ip/:ip/whois와 동일한 형식입니다.
carrierobject|nullIP 쿼리에서 존재합니다 — GET /v1/ip/:ip/carrier와 동일한 형식입니다.
asn / country / email / phoneobject|nulldetected_type이 일치할 때 위의 6개 필드 대신 존재합니다 — 해당 유형의 전용 엔드포인트와 동일한 형식입니다.

각 하위 필드는 독립적으로 성능이 저하됩니다 — 업스트림(RIPEstat, RDAP 서버, crt.sh)이 느리거나 실패하면 해당 필드만 null이 되며, 검색 전체가 실패하지는 않습니다. 기본 쿼리 자체가 유효하지 않은 경우(예: 잘못된 형식의 IP)에만 요청 전체에 대한 오류 상태가 반환됩니다.

curl https://ipto.to/v1/search/8.8.8.8
GET/v1/ip/:ip/hostname

역방향 DNS — 도메인 열거 데이터베이스가 아니라 DNS-over-HTTPS를 통한 단발성 실시간 PTR 조회입니다. 해당 IP에 PTR 레코드가 없으면 null을 반환합니다.

ParameterInDescription
ippath필수. 유효한 IPv4 또는 IPv6 주소.
curl https://ipto.to/v1/ip/8.8.8.8/hostname # {"ip":"8.8.8.8","hostname":"dns.google"}
GET/v1/ip/:ip/rpki

IP가 현재 announce 중인 라우트에 대한 RPKI 라우트 오리진 검증으로, RIPEstat을 통해 실시간으로 확인합니다(ROA 데이터베이스를 자체적으로 수집하거나 동기화하지 않습니다). status는 오직 "valid", "invalid", "unknown" 중 하나이며 — 다른 신호로부터 합성되는 값이 아닙니다. RIPEstat 실패나 타임아웃이 발생하면 오류가 아니라 이유를 설명하는 문자열과 함께 "unknown"을 반환합니다.

ParameterInDescription
ippath필수. 유효한 IPv4 또는 IPv6 주소.
FieldTypeDescription
asninteger|null현재 announce 중인 ASN으로, 실시간으로 확인됩니다 — 이 사이트 자체의 ASN 데이터셋에서 파생된 값이 아닙니다.
prefixstring|null현재 announce 중인 CIDR 프리픽스입니다.
statusstring"valid", "invalid", "unknown" 중 하나.
validating_roasarrayRIPEstat이 매칭한 구체적인 ROA로, 각각 origin/prefix/max_length/validity를 포함합니다.
validatorstring|nullRIPEstat이 사용한 RPKI 검증기입니다(예: "routinator").
reasonstring|null"unknown" 결과에 대한 설명입니다 — 예: 해당 범위를 포함하는 ROA가 없거나 RIPEstat에 접속할 수 없었던 경우.
curl https://ipto.to/v1/ip/8.8.8.8/rpki # {"ip":"8.8.8.8","asn":15169,"prefix":"8.8.8.0/24","status":"valid",...}
GET/v1/rpki

명시적인 (ASN, prefix) RPKI 검증입니다 — 위의 IP 기반 편의 기능과 달리, 확인하려는 정확한 라우트를 이미 알고 있을 때 사용합니다.

ParameterInDescription
asnquery필수. ASN 번호, AS 접두사 포함 여부는 무관합니다. 예: 15169 또는 AS15169.
prefixquery필수. CIDR 프리픽스, 예: 8.8.8.0/24.
curl "https://ipto.to/v1/rpki?asn=15169&prefix=8.8.8.0/24"
GET/v1/ip/:ip/company

RDAP(구조화된 WHOIS) 등록자 데이터와 ASN 자체 조직명을 결합하여 IP가 등록된 조직을 식별하며, 결과는 숫자 점수가 아니라 범주형 신뢰도로 제공됩니다.

ParameterInDescription
ippath필수. 유효한 IPv4 또는 IPv6 주소.
FieldTypeDescription
company_namestring|null확인된 회사명입니다 — confidence가 "low"(두 소스가 일치하지 않아 어느 쪽도 신뢰할 수 있는 값으로 제시하지 않음)이거나 "none"인 경우 null입니다.
rdap_org_namestring|nullRDAP 등록자명으로, company_name과는 별개입니다.
asn_org_namestring|nullASN 자체의 조직명으로, company_name과는 별개입니다.
confidencestring"high"(소스 일치), "medium"(한쪽 소스만 확인 가능), "low"(소스 불일치 — 둘 다 표시됨), "none" 중 하나.
reasonstringconfidence 등급에 대한 평이한 설명입니다.
curl https://ipto.to/v1/ip/1.1.1.1/company # {"ip":"1.1.1.1","company_name":null,"rdap_org_name":"APNIC Research and Development","asn_org_name":"Cloudflare, Inc.","confidence":"low",...}
GET/v1/ip/:ip/whois

RDAP 등록 레코드 원본 자체입니다 — 네트워크 블록, 등록/최종 변경 날짜, RDAP에 기록된 모든 연락처가 포함됩니다. 이 동일한 등록자 데이터를 ASN 조직명과 대조하여 신뢰도 점수가 매겨진 하나의 답으로 정리하는 위의 /company와는 다르게, 이 엔드포인트는 원본 레코드를 그대로 반환하며 고전적인 WHOIS 출력에 더 가깝습니다. IPv6 주소도 지원됩니다.

ParameterInDescription
ippath필수. 유효한 IPv4 또는 IPv6 주소.
FieldTypeDescription
availablebooleanRDAP 레코드를 확인할 수 없으면 false입니다 — reason을 참고하세요.
reasonstring|nullavailable: false 결과에 대한 설명입니다.
startAddress / endAddress / cidrstring|null등록된 네트워크 블록입니다.
netName / netHandle / parentHandlestring|null네트워크 객체에 대해 RIR이 할당한 식별자입니다.
countrystring|nullRDAP 기준 등록자 국가입니다.
allocationTypestring|null예: "direct allocation", "reassigned".
registeredDate / lastChangedDatestring|nullRDAP 레코드에서 가져온 ISO 형식 타임스탬프입니다.
rirstring|null해당 레코드를 제공한 지역 등록기관(ARIN, RIPE, APNIC, LACNIC, AFRINIC)입니다.
contactsarrayRDAP에 기록된 모든 연락처이며, 각각 역할(roles), 이름, 이메일, 핸들을 포함합니다 — 첫 번째로 매칭된 항목만이 아닙니다.
curl https://ipto.to/v1/ip/8.8.8.8/whois # {"ip":"8.8.8.8","available":true,"cidr":"8.8.8.0/24","netName":"LVLT-GOGL-8-8-8","rir":"ARIN","contacts":[...],...}
GET/v1/ip/:ip/carrier

모바일 네트워크로 분류된 IP에 대해 MCC/MNC 통신사 디렉터리와 대조하여 최선을 다해 통신사를 식별합니다. 단일 carrier 필드는 의도적으로 제공하지 않습니다 — 아래 matched_carrier_entries와 note를 참고하세요 — 단순한 통신사명만 표시하면 실시간 가입자별 정보처럼 읽힐 수 있는데, 이 데이터로는 그런 주장을 정직하게 뒷받침할 수 없기 때문입니다.

ParameterInDescription
ippath필수. 유효한 IPv4 또는 IPv6 주소.
FieldTypeDescription
is_mobile_networkbooleanfalse이면 빈 디렉터리와 함께 여기서 종료됩니다 — 모바일이 아닌 ASN에 대해서는 추측하지 않습니다.
asn_organizationstring|nullASN 자체의 조직명입니다.
matched_carrier_entriesarraycarrier명이 asn_organization과 퍼지 매칭되는 MCC/MNC 디렉터리 행으로, 해당 IP의 국가 범위로 제한됩니다.
notestring이 필드가 주장할 수 있는 것과 없는 것을 설명합니다.
curl https://ipto.to/v1/ip/8.8.8.8/carrier # {"ip":"8.8.8.8","is_mobile_network":false,"asn_organization":null,"matched_carrier_entries":[],...}
GET/v1/ip/:ip/hosted-domains

IP의 역방향 DNS(PTR) 호스트명과 인증서 투명성 로그(crt.sh)를 통해 해당 IP와 연관된 도메인을 찾습니다 — 일반적인 역방향 IP 조회가 아닙니다. 응답에 포함된 limitations 필드에서 이 기능이 정확히 무엇을 찾을 수 있고 없는지 설명합니다.

ParameterInDescription
ippath필수. 유효한 IPv4 또는 IPv6 주소.
FieldTypeDescription
ptr_hostnamestring|nullIP의 역방향 DNS 호스트명이며, PTR 레코드가 없으면 null입니다.
root_domainstring|nullptr_hostname에서 파생된 등록 가능한 도메인입니다.
subdomains_seenarray|null인증서 투명성을 통해 찾은 서브도메인입니다. null은 crt.sh 검색 자체를 완료할 수 없었음을 의미하며 — 검색은 실행되었지만 아무것도 찾지 못한 빈 배열과는 다릅니다.
limitationsstring이 기능이 구조적으로 감지할 수 없는 항목(PTR 없음, 공유 호스팅, 인증서 미발급 도메인)을 설명합니다.
curl https://ipto.to/v1/ip/8.8.8.8/hosted-domains # {"ip":"8.8.8.8","ptr_hostname":"dns.google","root_domain":"dns.google","subdomains_seen":["dns.google","dns.google.com",...],...}
POST/v1/ip/bulk

일괄 조회 — 요청당 최대 100개 IP, Pro/Enterprise 전용입니다. 각 IP를 키로 하는 객체를 반환합니다. 캐시와 데이터베이스를 병렬로 읽기 때문에 순차 호출보다 빠릅니다. 배치 안의 각 IP는 개별 조회와 동일하게 일일 요청 한도에 포함됩니다. 무료 티어 요청은 403을 반환합니다 — 요금제를 참고하세요.

ParameterInDescription
bodybody (JSON)IP 문자열의 JSON 배열입니다. 예: ["1.1.1.1","8.8.8.8"]
curl -X POST https://ipto.to/v1/ip/bulk \ -H "Content-Type: application/json" \ --data '["1.1.1.1","8.8.8.8"]'
GET/v1/asn/:asn

번호로 자율 시스템(Autonomous System)을 조회합니다. 조직명, 국가, 대륙, IP 범위 개수, 분류 유형, 환율, 로케일 참조 데이터(languages, tld, capital, borders)를 반환합니다.

ParameterInDescription
asnpathAS 접두사가 없는 ASN 번호. 예: Google의 경우 15169.
langquery선택 사항. country_name과 continent를 현지화합니다: en(기본값), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN.
formatquery선택 사항. 응답 형식: json(기본값), csv, text, xml, yaml.
curl https://ipto.to/v1/asn/15169
GET/v1/places/:ip

IP의 기존 도시 수준 위치를 역지오코딩한 뒤, 주변의 관심 지점(레스토랑, 공원, 학교, 대중교통, 주요 랜드마크), 데이터 소스가 존재하는 지역의 현지 범죄 데이터(영국과 미국만 해당), 그리고 선택적으로 요청 시 계산되는 자동차 통근 시간 추정치를 반환합니다.

ParameterInDescription
ippath필수. 유효한 IPv4 주소. IPv6는 아직 지원되지 않습니다.
dest_latquery선택 사항. 통근 시간 추정을 위한 목적지 위도 — dest_lon과 함께 사용합니다.
dest_lonquery선택 사항. 통근 시간 추정을 위한 목적지 경도 — dest_lat과 함께 사용합니다.
dest_addressquery선택 사항. 통근 시간 추정을 위한 자유 형식 목적지 주소로, 자동으로 정방향 지오코딩됩니다. dest_lat/dest_lon도 함께 전달된 경우 무시됩니다.
FieldTypeDescription
geocodeobject|nullcountry, countryCode, region, city, neighbourhood, displayName — IP에 지오코딩할 도시 수준 위치가 없으면 null입니다.
locality.restaurants / .parks / .schools / .transitarray카테고리별 최대 4개의 가장 가까운 항목으로, 각각 name과 distanceMeters를 포함합니다.
locality.notablearrayWikidata를 통한 주변의 주요 랜드마크와 간단한 설명입니다.
locality.usCrimeobject|null가장 가까운 관할 기관의 강력/재산 범죄 합계 — 미국만 해당하며, 배포 환경에 FBI_CRIME_API_KEY가 필요합니다. 그 외 지역에서는 null입니다.
locality.ukCrimeobject|null반경 1마일 이내의 거리 수준 사건 요약 — 영국(GB)만 해당합니다.
locality.caCrimenull항상 null입니다 — 캐나다 전역 범죄 데이터 소스가 연동되어 있지 않습니다(docs/places.md 참고).
commuteobject|nulldurationMinutes와 distanceKm이며, 목적지가 제공되고 OpenRouteService가 경로를 반환했을 때만 값이 있습니다. 그 외에는 null이며, 추측으로 계산되지 않습니다.
curl https://ipto.to/v1/places/8.8.8.8 curl "https://ipto.to/v1/places/8.8.8.8?dest_address=Space+Needle,+Seattle"
GET/v1/country/:code

국가 수준의 집계 통계와 로케일 참조 데이터(currency, exchange rate, languages, tld, capital, borders)입니다.

ParameterInDescription
codepathISO 3166-1 alpha-2 국가 코드. 예: US, DE, JP.
langquery선택 사항. country_name과 continent를 현지화합니다: en(기본값), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN.
formatquery선택 사항. 응답 형식: json(기본값), csv, text, xml, yaml.
curl https://ipto.to/v1/country/US # {"country_code":"US","country_name":"United States","continent":"North America","currency_code":"USD", # "calling_code":"+1","languages":["English"],"tld":[".us"],"capital":"Washington D.C.","borders":["CA","MX"], # "is_eu":false,"ip_range_count":151633,"ip_range_count_v6":30329,"asn_count":18243, ...}
GET/v1/ua

User-Agent 문자열을 파싱합니다. 브라우저, OS, 기기 유형, 봇 감지 결과를 반환합니다. 기본적으로 호출자의 User-Agent 헤더를 읽으며, ?ua=를 통해 임의의 문자열을 전달할 수도 있습니다.

ParameterInDescription
uaquery선택 사항. 파싱할 URL 인코딩된 User-Agent 문자열입니다. 기본값은 요청의 User-Agent 헤더입니다.
curl "https://ipto.to/v1/ua?ua=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+17_0%29"
GET/v1/phone/:number

전화번호를 항상 무료로 검증하고 형식을 지정합니다: 자체 호스팅 파서를 통해 지역, 회선 유형, E.164/national/international 형식을 제공하며, 제공업체 호출은 없습니다. IP/키당 월간 프리미엄 예산이 있는 경우(Free는 월 100회, 유료 등급은 그 이상 — 요금제 참고), 동일한 요청이 실시간 통신사 조회 서비스로부터 실시간 통신사 이름, 번호이동 상태, 제공업체가 분류한 전화 유형도 추가로 반환합니다 — source와 아래 필드를 참고하세요. 현지화된 country_name과 lang/lang_source는 등급과 관계없이 항상 포함됩니다 — 현지화를 참고하세요. 프리미엄 예산이 소진되거나 업스트림에 문제가 있으면 위의 무료 필드로 매끄럽게 대체되며, 이로 인해 요청이 실패하는 일은 없습니다. 번호별 조회 대신 국가 수준의 네트워크 사업자 참조 데이터가 필요하면 GET /v1/carriers를 참고하세요.

ParameterInDescription
numberpath필수. 전화번호이며, 가급적 E.164 형식(예: +14155552671)을 권장합니다. 앞의 +는 URL 인코딩해야 합니다.
countryquery선택 사항. 모호한 national 형식 번호를 파싱하기 위한 2자리 국가 코드 힌트입니다. 예: ?country=US.
modequery선택 사항. ?mode=current는 프리미엄 등급을 사용할 수 있을 때 번호의 (SIM 발급 시점이 아닌) 실시간 통신사를 요청합니다. 요청이 무료 등급으로 대체될 경우 무시됩니다.
FieldTypeDescription
validboolean해당 지역의 유효한 번호 체계 패턴과 일치하면 true입니다.
country_codestring|null해당 번호가 속한 ISO 3166-1 alpha-2 지역입니다.
national_formatstring|null해당 지역의 national 표기 방식으로 형식이 지정된 값입니다.
international_formatstring|null국가 코드와 공백을 포함한 형식입니다. 예: "+1 415 555 2671".
e164string|null표준 E.164 형식입니다. 예: "+14155552671".
line_typestring|nullFIXED_LINE, MOBILE, FIXED_LINE_OR_MOBILE, VOIP, TOLL_FREE, PREMIUM_RATE 또는 이와 유사한 값입니다. 북미를 포함한 많은 번호 체계에서는 번호만으로 유선과 모바일을 구분할 수 없습니다.
sourcestring이 요청에 실시간 통신사 조회 예산이 있었으면 "premium", 위의 무료 파서로 대체되었으면 "local"입니다. 아래의 carrier, phone_type, original_carrier, is_ported, phone_region, country_prefix는 source가 "premium"일 때만 값이 채워집니다 — 더 아래의 country_name과 lang/lang_source는 등급과 관계없이 항상 채워집니다.
phone_typestring|null실시간 통신사 조회 제공업체 자체의 카테고리 중 하나입니다: mobile, fixed_line, voip, toll_free, premium_rate, shared_cost, personal_number, pager, uan, voicemail, unknown — 앞의 4개는 가장 흔한 예시일 뿐, 전체 목록이 아닙니다. source가 "local"이면 null입니다 — 로컬 파서에서 나오며 다른 카테고리 집합을 사용하는 위의 line_type과는 별개입니다.
carrierstring|null번호의 현재 네트워크 사업자 이름입니다. source가 "local"이면 null입니다.
original_carrierstring|null번호가 이동된 경우, 원래 발급된 네트워크 사업자입니다. source가 "local"이거나 번호가 이동되지 않았으면 null입니다.
is_portedboolean|null번호가 원래 통신사에서 다른 통신사로 이동되었으면 true입니다. source가 "local"이면 null입니다.
phone_regionstring|null번호의 세부 지역/주(州) 단위 정보입니다(예: "California"), 위의 country_code보다 더 세분화되어 있습니다. source가 "local"이면 null입니다.
country_prefixstring|null앞에 "+"가 없는 번호의 국가 전화 코드입니다(예: 독일의 경우 "49"). source가 "local"이면 null입니다.
country_namestring|null전체 국가명입니다(예: "Germany") — 위의 country_code는 ISO 알파-2 형식("DE")일 뿐 표시용 이름이 아닙니다. 위의 프리미엄 전용 필드와 달리, 이 필드는 country_code가 있으면 항상 채워지며, 다른 모든 엔드포인트의 country_name 필드와 마찬가지로 ?lang=/Accept-Language를 통해 현지화됩니다 — 아래의 lang/lang_source를 참고하세요.
langstring위의 country_name에 실제로 적용된 언어입니다 — 해석된 ?lang= 값이거나, 요청되지 않았거나 지원되지 않는 값이면 "en"입니다.
lang_sourcestring요청에 ?lang=이 있었으면 "param", 대신 Accept-Language가 사용되었으면 "header", 둘 다 없어서 영어가 사용되었으면 "default"입니다. GET /v1/asn/:asn와 GET /v1/country/:code의 동일한 이름을 가진 필드와 같은 의미입니다.
curl "https://ipto.to/v1/phone/+14155552671"
POST/v1/phone/bulk

일괄 검증입니다. /v1/ip/bulk와 달리 모든 티어에서 일괄 접근이 가능합니다 — Free 티어를 제한하는 것은 403이 아니라 티어별 배치 상한입니다. Free: 요청당 10개, 하루 100개. Pro: 요청당 100개, 하루 1,000개. Enterprise: 요청당 1,000개, 하루 10,000개. 이 한도는 일반적인 일일 요청 한도와는 별개입니다 — 요청 제한을 참고하세요.

ParameterInDescription
bodybody (JSON)전화번호 문자열의 JSON 배열입니다.
curl -X POST https://ipto.to/v1/phone/bulk \ -H "Content-Type: application/json" \ --data '["+14155552671","+442071838750"]'
GET/v1/carriers

참조 조회: 특정 전화번호와는 무관하게, 주어진 국가에 알려진 모바일 통신사(MCC/MNC)를 조회합니다. 커뮤니티가 관리하는 MCC/MNC 목록(MIT 라이선스, 2026년 마지막 동기화 — 자세한 내용은 docs 저장소를 참고하세요)에서 가져오며, 번호 체계 할당은 자주 바뀌지 않으므로 실시간 피드가 아니라 정적 참조 테이블로 제공됩니다.

ParameterInDescription
countryquery필수. 2자리 국가 코드. 예: ?country=US.
curl "https://ipto.to/v1/carriers?country=US"
GET/v1/email/:email

이메일 구문 검증, DNS-over-HTTPS를 통한 실시간 MX 레코드 확인, 그리고 커뮤니티가 관리하는 차단 목록(CC0 라이선스, 매일 동기화)을 기준으로 한 일회용/임시 도메인 감지를 수행합니다. 메일함이 실제로 존재하는지는 검증하지 않습니다 — 이를 위해서는 이 API가 수행하지 않는 SMTP 핸드셰이크가 필요합니다(has_mx가 정확히 무엇을 증명하고 증명하지 않는지는 아래 필드 참조를 확인하세요).

ParameterInDescription
emailpath필수. URL 인코딩된 이메일 주소입니다(@는 %40으로 인코딩해야 합니다).
FieldTypeDescription
valid_syntaxboolean주소가 표준 이메일 구문 패턴과 일치하면 true입니다. 메일함의 존재 여부는 검증하지 않습니다.
domainstring|null소문자로 변환된 도메인 부분입니다. valid_syntax가 false이면 null입니다.
has_mxboolean|null해당 도메인에 현재 하나 이상의 MX 레코드가 있으면 true입니다. 구문이 유효하지 않거나 DNS 쿼리 자체가 실패/타임아웃된 경우 null입니다 — null은 false가 아니라 알 수 없음으로 취급해야 합니다.
disposableboolean|null해당 도메인이 알려진 일회용/임시 이메일 제공업체와 일치하면 true입니다. has_mx와 동일한 조건에서 null입니다.
source"premium"|"local"이 요청에 대해 실시간 검증이 실행되었으면 "premium", 실행되지 않았으면 "local"입니다(한도 도달 또는 기능 미활성화) — 위의 필드(valid_syntax부터 disposable까지)는 두 경우 모두 항상 채워집니다.
is_reachablestring|null선택적 실시간 검증의 전체 판정 결과입니다: "safe"(전달 가능), "invalid"(거부됨), "risky"(불확실), "unknown"(판단 불가 — 다시 시도). 이 요청에 대해 실시간 검증이 실행되지 않은 경우 null입니다(아래 source 참조).
is_catch_allboolean|null해당 도메인이 모든 주소의 메일을 수신하여 이 특정 메일함의 존재 여부를 확인할 수 없는 경우 true입니다. 실시간 검증이 실행되지 않은 경우 null입니다.
mailbox_fullboolean|null실시간 검증에서 메일함이 가득 찬 것으로 확인된 경우 true입니다. 실시간 검증이 실행되지 않은 경우 null입니다.
is_role_accountboolean|null주소가 개인 메일함이 아니라 역할 계정(예: support@, admin@)처럼 보이는 경우 true입니다. 실시간 검증이 실행되지 않은 경우 null입니다.
is_disabledboolean|null실시간 검증에서 메일함이 명시적으로 비활성화된 것으로 확인된 경우 true입니다. 실시간 검증이 실행되지 않은 경우 null입니다.
curl "https://ipto.to/v1/email/user%40example.com" # When the live-verification budget allows, the same response also includes the # source/is_reachable/is_catch_all/mailbox_full/is_role_account/is_disabled fields above: # {"email":"user@example.com","valid_syntax":true,"domain":"example.com","has_mx":true, # "disposable":false,"source":"premium","is_reachable":"safe","is_catch_all":false, # "mailbox_full":false,"is_role_account":false,"is_disabled":false}
GET/v1/fraud-score

IP, 이메일, 전화번호, User-Agent 중 제공한 항목을 결합하여 하나의 0–100 점수로 산출합니다 — 이는 ip-api.com, ipapi.co, ipgeolocation.io, ipify.org, ipregistry.co, ip2location.io, AbstractAPI, IPLocate.io, BigDataCloud 중 어느 곳도 하나의 통합 신호로 제공하지 않는 기능입니다(직접 확인함). 네 개의 입력 모두 선택 사항이며 서로 독립적입니다 — 원하는 조합을 전달하면 됩니다. ip를 생략하면 본인의 IP가, ua를 생략하면 본인의 User-Agent 헤더가 기본값으로 사용되며, 이는 GET /v1/ip 및 GET /v1/ua와 동일한 규칙입니다. 전달하지 않은 신호는 단순히 응답에서 빠지며 정상(clean)으로 채점되지 않습니다 — 그 가중치는 실제로 제공된 신호들에 재분배됩니다.

ParameterInDescription
ipquery선택 사항. 기본값은 본인의 IP입니다. IPv6는 아직 점수가 매겨지지 않습니다(다른 위협 데이터 API와 동일한 제약입니다).
emailquery선택 사항. 임의의 이메일 주소.
phonequery선택 사항. 임의의 전화번호.
uaquery선택 사항. 기본값은 본인의 User-Agent 헤더입니다.
FieldTypeDescription
scoreinteger제공된 신호들을 가중 결합한 0-100 사이의 점수입니다.
risk_tierstring"low"(<20), "medium"(20-44), "high"(45-69), "critical"(70+) 중 하나.
signalsobject입력별 세부 내역입니다 — 실제로 제공한 입력에 대한 키만 존재합니다: ip, email, phone, user_agent. 각 항목은 자체 구성 점수와 함께, 해당 입력에 대해 GET /v1/ip/:ip, /v1/email/:email, /v1/phone/:number, /v1/ua가 이미 반환하는 것과 동일한 필드를 포함합니다.
curl "https://ipto.to/v1/fraud-score?ip=1.2.3.4&email=test%40mailinator.com"
GET/v1/screenshot

실제 헤드리스 Chrome 인스턴스(Cloudflare Browser Rendering, 서드파티 스크린샷 업체가 아님)에서 URL을 렌더링하여 PNG를 반환합니다. 내부/사설 대상(localhost, RFC 1918 대역, 링크 로컬/클라우드 메타데이터 주소)은 브라우저가 실행되기도 전에 거부됩니다. Browser Rendering 자체의 플랫폼 수준 제한이 적용되며, 이는 이 API의 다른 부분보다 훨씬 엄격합니다 — 낮은 등급의 Cloudflare 플랜에서는 일반적인 일일 요청 한도에 도달하기 훨씬 전에 이 기능이 먼저 제한될 수 있습니다.

ParameterInDescription
urlquery필수. http 또는 https여야 합니다.
curl "https://ipto.to/v1/screenshot?url=https://example.com" --output screenshot.png
GET/v1/language

로컬 트라이그램 빈도 분석을 통해 텍스트의 언어를 식별합니다 — 외부 업체 호출도, AI 모델 추론도, 로깅도 없습니다. 입력이 10자 미만이면 language는 null을 반환하며, 약 30자 미만이면 최선의 추측값은 반환하지만 reliable은 false가 됩니다.

ParameterInDescription
textquery필수. 최대 5,000자까지 가능합니다 — 더 긴 입력은 거부되지 않고 잘립니다.
FieldTypeDescription
languageobject|null가장 유력한 결과에 대한 code(ISO 639-1), iso639_3, name, local_name입니다. 텍스트가 너무 짧거나 인식되지 않으면("und") null입니다.
reliableboolean짧은 입력에 대해서는 false입니다 — 결과를 확신할 수 있는 매칭이 아니라 추측값으로 취급하세요.
candidatesarray밀접하게 관련된 언어 쌍을 위해, 상대 점수와 함께 최대 5개의 차순위 언어를 제공합니다.
curl "https://ipto.to/v1/language?text=Bonjour%2C+comment+allez-vous%3F"
GET/v1/currency/convert

모든 IP, ASN, 국가 조회에서 currency_code/exchange_rate_usd를 제공하는 것과 동일한 일일 기준 환율 피드를 사용하여 두 통화(154개 지원) 간 금액을 변환합니다 — 지오로케이션 응답 안에 중첩되는 대신 독립적인 변환 엔드포인트로 제공됩니다.

ParameterInDescription
fromquery필수. 3자리 ISO 4217 통화 코드.
toquery필수. 3자리 ISO 4217 통화 코드.
amountquery선택 사항. 기본값은 1입니다.
FieldTypeDescription
resultnumber변환된 금액입니다.
ratenumberfrom 1단위당 to의 단위 수입니다.
updatedstring이 변환에 사용된 기준 환율 동기화의 ISO 타임스탬프입니다.
curl "https://ipto.to/v1/currency/convert?from=USD&to=EUR&amount=100"
GET/v1/currency/rates

USD뿐 아니라 지원되는 모든 통화를 기준으로 재계산한 전체 환율표(154개 통화)입니다.

ParameterInDescription
basequery선택 사항. 기본값은 USD입니다.
FieldTypeDescription
ratesobject통화 코드 → base 대비 환율의 맵입니다.
curl "https://ipto.to/v1/currency/rates?base=EUR"
GET/v1/currency/history

하나의 통화 쌍에 대해 최대 90일 전까지의 일일 기준 환율 이력입니다 — 환율 변환 도구의 환율 추세 차트 뒤에 있는 데이터입니다. 한 번 백필된 뒤, GET /v1/currency/convert를 업데이트하는 것과 동일한 cron에 의해 매일 추가됩니다. 매수/매도 거래 스프레드가 아니라 시간에 따른 단일 일일 기준 환율입니다.

ParameterInDescription
targetquery필수. 차트로 표시할 3자리 ISO 4217 통화 코드.
basequery선택 사항. 기본값은 USD입니다.
daysquery선택 사항. 30, 60, 90 중 하나. 기본값은 30입니다.
FieldTypeDescription
seriesarray날짜 오름차순으로 정렬된 { date, rate } 값의 배열입니다.
statsobject반환된 시리즈 전체에 대한 min, avg, max, current 값입니다.
curl "https://ipto.to/v1/currency/history?base=USD&target=EUR&days=90"
GET/v1/weather

지명, 우편번호 또는 "lat,lon" 쌍, 혹은 lat + lon 또는 ip에 대한 현재 기상 상태를 반환하며, detail=1을 사용하면 시간별 전망과 여러 날에 걸친 예보도 함께 제공합니다. 미국 지역은 미국 국립기상청(National Weather Service)이, 그 밖의 지역은 MET Norway가 응답합니다. include=를 추가하면 단위 선택, 최대 9일, 태양과 달, 공식 경보 등을 포함한 전체 문서를 받을 수 있습니다 — 아래의 include 카드를 참고하세요. weather-lookup 도구는 이 엔드포인트를 명시적으로 호출하기 전에 브라우저에서 호출자 자신의 위치도 자동으로 감지합니다.

ParameterInDescription
qquery도시명, 우편번호 또는 "lat,lon"(최대 100자). 대신 lat와 lon, 또는 ip를 전달할 수도 있습니다. 셋 중 하나는 필수입니다.
detailquery선택 사항. "1"을 지정하면 weather에 pressure_mb/visibility_km/dewpoint_c/sunrise/sunset 등이 추가되고, forecast 객체(hourly + daily)도 함께 제공됩니다. 기본적으로는 생략됩니다.
FieldTypeDescription
conditionstring|null짧은 텍스트 설명입니다.
temp_c / temp_fnumber|null현재 기온입니다.
feels_like_cnumber|null섭씨로 표시된 체감 온도입니다.
humidity_pctnumber|null상대 습도입니다.
wind_kmph / wind_dirnumber|null / string|null풍속과 16방위 풍향입니다.
uv_indexnumber|null자외선 지수입니다.
locationobject|null조회한 장소에 대해 확인된 name, region, country, lat/lon입니다 — 원본 입력값 그대로가 아닙니다.
forecast.hourly[]arraydetail=1일 때만 제공됩니다. 이후 24시간을 3시간 단위로 나눈 hour_label, temp_c/temp_f, weather_code, chance_of_rain_pct입니다.
forecast.daily[]arraydetail=1일 때만 제공됩니다. 3일간의 전망으로 date, day_label, weather_code, condition, chance_of_rain_pct, max/min temp_c/temp_f를 포함합니다.
curl "https://ipto.to/v1/weather?q=Tokyo"
curl "https://ipto.to/v1/weather?q=Tokyo&detail=1"
GET/v1/trademark/:serial

8자리 일련번호로 사건 상태를 조회하기 위해 USPTO의 Trademark Status & Document Retrieval(TSDR) 시스템에 실시간으로 프록시합니다 — 요청마다 직접 호출되며, 캐시되거나 재판매되는 사본이 아닙니다. 사건 상태 데이터는 미국 정부 저작물로서 USPTO 이용 약관에 따라 퍼블릭 도메인이므로, 모든 응답에는 이를 조용히 캐시하거나 재판매하는 대신 source/attribution 필드가 포함됩니다. 상표 로고/이미지 데이터는 의도적으로 범위에서 제외됩니다 — USPTO 약관은 이미지 라이선스를 이 엔드포인트가 반환하는 사건 상태 텍스트 데이터와 별도로 취급합니다. 등록번호 조회는 아직 지원되지 않습니다. 현재 USPTO가 문서화한 것은 일련번호 경로뿐입니다. 상표 조회 도구에서 직접 사용해 보세요.

ParameterInDescription
serialpath필수. 정확히 8자리 숫자. 예: 98267877.
FieldTypeDescription
sourcestring항상 "USPTO TSDR"입니다.
attributionstringUSPTO 이용 약관에 따라 필요한 출처 표기 문구입니다.
dataobjectUSPTO가 반환한 원본 사건 상태 페이로드를 재구성하지 않고 그대로 전달합니다 — 2026-08-12에 실시간 동작을 확인했습니다. data.trademarks[0] 아래에는 status(출원/등록 날짜, markElement, descOfMark, tm5StatusDesc), parties.ownerGroups(역할별 소유자 이름/주소), gsList[](상품/서비스 설명 및 분류), prosecutionHistory[](전체 사건 타임라인)가 있습니다. 필드 존재 여부는 출원 상태에 따라 다릅니다 — 예를 들어 심사 대기 중인 출원에는 아직 usRegistrationNumber가 없습니다.
curl "https://ipto.to/v1/trademark/98267877" # ANTHROPIC, Reg. No. 8296420
GET/v1/patent/:number

7~8자리 실용특허(utility patent) 번호로 등록 상태를 조회하기 위해 USPTO의 Patent File Wrapper API(Open Data Portal)에 실시간으로 프록시합니다 — 요청마다 직접 호출되며, 캐시되거나 재판매되는 사본이 아닙니다. 원래 목표했던 소스(PatentsView의 Search API)는 2026-03-20에 서비스 종료가 확인되어, 대신 그 실시간 후속 서비스에 프록시합니다. Patent File Wrapper 데이터는 미국 정부 저작물로서 USPTO 이용 약관에 따라 퍼블릭 도메인이므로, 모든 응답에는 source/attribution 필드가 포함됩니다. 범위는 출원/심사 절차 중심입니다 — Lens.org, Espacenet, Google Patents처럼 인용 그래프, 특허 패밀리, 법적 상태 필드, 이미지는 제공하지 않습니다. 데이터 범위는 2001년 이후 출원부터 시작합니다. 디자인, 식물, 재발행 특허는 아직 지원되지 않으며, 등록된 특허 번호를 통한 실용특허만 지원됩니다. 특허 조회 도구에서 직접 사용해 보세요.

ParameterInDescription
numberpath필수. 7~8자리 숫자. 예: 12393227. 출원번호가 아닌 등록된 실용특허 번호만 가능합니다.
FieldTypeDescription
sourcestring항상 "USPTO Patent File Wrapper"입니다.
attributionstringUSPTO 이용 약관에 따라 필요한 출처 표기 문구입니다.
dataobjectUSPTO가 반환한 원본 심사 기록 페이로드를 재구성하지 않고 그대로 전달합니다 — 실제 특허(12393227, 9935534)를 대상으로 2026-08-12에 실시간 동작을 확인했습니다. 주요 필드: applicationMetaData(inventionTitle, filingDate, applicationStatusDescriptionText, applicationStatusDate, patentNumber, inventorBag[]), recordAttorney.attorneyBag[], applicationNumberText, eventDataBag[](전체 심사 타임라인). 번호가 존재하지 않거나 디자인/식물/재발행 특허이거나 2001년 이전 데이터인 경우 404를 반환합니다.
curl "https://ipto.to/v1/patent/12393227" # WEARABLE COMPUTING DEVICE, granted 2025
GET/v1/feeds

페이지네이션된 VPN, Tor, 위협 인텔리전스 피드입니다. 페이지당 200개 항목이 제공됩니다. 각 항목에는 IP/CIDR, 제공자 정보, ISP, 국가, 분류 유형이 포함됩니다.

ParameterInDescription
pagequery0부터 시작하는 페이지 번호입니다. 기본값: 0.
typequery유형별 필터: VPN, Tor Exit Node, Tor Node, High-Risk Threat Intel.
qqueryIP 또는 CIDR 부분 문자열로 필터링합니다.
curl "https://ipto.to/v1/feeds?page=0&type=VPN" # {"metadata":{...},"pagination":{"page":0,"page_size":200,"total":11200,"total_pages":56,"has_next":true}, # "ranges":[{"ip":"2.26.157.0/24","type":"VPN","provider":"Datacamp Limited","isp":"Datacamp Limited","country":"GB"}, ...]}
GET/v1/feeds/stats

메타데이터만 반환합니다 — 전체 항목 수, 소스별 개수, 마지막 동기화 시간. IP 데이터는 반환하지 않습니다.

curl https://ipto.to/v1/feeds/stats # {"total_tracked_ranges":34561,"last_updated":"2026-10-06T18:00:44.321Z", # "sources":[{"name":"X4BNet VPN Ranges","type":"VPN","count":11200}, ...]}
GET/v1/abuse

페이지네이션된 악용 네트워크 범위입니다. 여러 피드 간 교차 검증을 통해 1-10점으로 점수가 매겨집니다. 위험 등급: critical(8-10), high(5-7), medium(3-4).

ParameterInDescription
pagequery0부터 시작하는 페이지 번호입니다. 기본값: 0.
tierquery위험 등급별 필터: critical, high, medium.
qquery네트워크 범위 부분 문자열로 필터링합니다.
sourcequery선택 사항. source_feed 에 반환되는 소스 피드 이름과 정확히 일치하는 값으로 필터링합니다. 예: 'Spamhaus DROP' 또는 'IPsum Threat Intel'.
curl "https://ipto.to/v1/abuse?page=0&tier=critical&source=Spamhaus%20DROP" # {"metadata":{...},"pagination":{"page":0,"page_size":200,"total":1640,"total_pages":9,"has_next":true}, # "networks":[{"network_range":"1.10.16.0/20","abuse_score":10,"risk_tier":"critical","source_feed":"Spamhaus DROP"}, ...]}
GET/v1/abuse/stats

메타데이터만 반환합니다 — 전체 네트워크 수, 소스별 개수, 위험 등급별 분류, 마지막 동기화 시간.

curl https://ipto.to/v1/abuse/stats # {"total_networks_tracked":18300,"last_updated":"2026-10-06T18:00:15.762Z", # "classification":{"ipsum_threat_intel":16660,"spamhaus_drop":1641,"spamhaus_edrop":0}, # "sources":[{"name":"IPsum Threat Intel","count":16660}, ...]}
GET/v1/datasets/:kind

이 API가 이미 기반으로 하고 있는 공개 데이터셋을 다운로드 가능한 CSV로 내보냅니다 — 동일한 데이터이며 새로운 라이선스는 아닙니다. asn과 ranges는 항상 사용할 수 있으며, geo-city는 해당 소스의 데이터셋이 배포 환경에서 활성화되기 전까지 503을 반환합니다. geo-city는 병합된 뷰가 아니라 한 번에 하나의 지리 소스의 원본 행을 내보냅니다 — ?source=primary(기본값) 또는 ?source=secondary를 전달하세요.

ParameterInDescription
kindpath다음 중 하나: asn, ranges, geo-city.
sourcequerygeo-city 전용입니다. primary(기본값) 또는 secondary.
curl -OJ https://ipto.to/v1/datasets/asn curl -OJ https://ipto.to/v1/datasets/ranges curl -OJ "https://ipto.to/v1/datasets/geo-city?source=secondary"
POST/v1/keys

API 키를 즉시 발급합니다 — 이메일도 가입도 필요 없습니다. 모든 키는 Free 티어(하루 1,000회 요청, 일괄 조회 미포함)로 시작합니다. Pro와 Enterprise 키는 더 높은 일일 한도와 일괄 조회(요청당 최대 100개 IP)를 제공합니다 — 요금제를 참고하세요. 키를 안전하게 보관하세요 — 나중에 다시 조회할 수 없습니다.

curl -X POST https://ipto.to/v1/keys
GET/v1/keys/usage

키가 지금까지 몇 번의 요청을 했는지 확인합니다. 요청 수에 반영되도록 하려면 임의의 /v1/* 요청에 X-API-Key 헤더 또는 ?api_key=로 키를 전달하세요.

ParameterInDescription
keyquery필수. POST /v1/keys가 반환한 키입니다.
curl "https://ipto.to/v1/keys/usage?key=ipto_xxxxxxxx"
GET/v1/ip/:ip/abuse

IP를 소유한 네트워크의 악용 신고 연락처를 RDAP에서 가져옵니다: RIR, 네트워크 핸들, 해당 CIDR, 악용 신고용 메일함. 신고를 어디로 보내야 하는지 알 때 사용합니다.

ParameterInDescription
ippathIPv4 또는 IPv6 주소.
curl https://ipto.to/v1/ip/8.8.8.8/abuse # {"available":true,"failure":null,"ip":"8.8.8.8","rir":"arin","network":"GOGL","cidr":"8.8.8.0/24", # "contacts":[{"name":"Abuse","email":"network-abuse@google.com","handle":"ABUSE5250-ARIN"}]}

레지스트리에 연결할 수 없으면 available 은 false 이며 failure 에 사유가 들어갑니다.

GET/v1/asn/:asn/ranges

ASN이 실제로 광고하는 IP 범위를 페이지 단위로 반환하며, 각 범위에는 국가와 호스팅 / 모바일 / 주거용 / 봇 / 블랙리스트 플래그가 포함됩니다.

ParameterInDescription
asnpathAS 접두사를 제외한 ASN 번호. 예: 15169.
limitquery페이지당 범위 수. 기본값 50, 최대 200.
offsetquery건너뛸 범위 수. 기본값 0.
curl "https://ipto.to/v1/asn/15169/ranges?limit=1&offset=0" # {"asn":15169,"total":153,"limit":1,"offset":0,"ranges":[{"start_ip":"8.8.4.0","end_ip":"8.8.4.255", # "country_code":"US","is_hosting":false,"is_mobile":false,"is_residential":false,"is_bot":false,"is_blacklisted":false}]}
GET/v1/asn/:asn/whois

ASN의 레지스트리(RDAP) 정보: 핸들, 이름, 국가, 할당 유형, 등록일, RIR 및 연락처.

ParameterInDescription
asnpathAS 접두사를 제외한 ASN 번호. 예: 15169.
curl https://ipto.to/v1/asn/15169/whois # {"asn":15169,"available":true,"reason":null,"handle":"AS15169","name":"GOOGLE","country":"US", # "allocationType":"...","registeredDate":"...","lastChangedDate":"...","rir":"arin","contacts":[...]}

레지스트리에 연결할 수 없으면 available 은 false 이며 reason 이 포함됩니다.

GET/v1/asn/:asn/geo-sample

ASN이 실제로 어디에 있는지: 가장 큰 범위 일부를 샘플링해 도시 수준으로 위치를 파악한 지점과 가장 많은 도시. ASN 페이지의 분포 지도에 사용됩니다.

ParameterInDescription
asnpathAS 접두사를 제외한 ASN 번호. 예: 15169.
curl https://ipto.to/v1/asn/15169/geo-sample # {"asn":15169,"sampled":true,"sample_size":30,"points":[{"city":"Council Bluffs","state":"Iowa", # "country_code":"US","latitude":41.2591,"longitude":-95.8517}, ...],"top_cities":[...]}

샘플이며 전체 범위 목록이 아닙니다. 모든 범위는 /v1/asn/:asn/ranges 를 사용하세요.

GET/v1/asn/:asn/hosted-domains

ASN에서 호스팅되는 도메인으로, 주소 샘플에 대한 역방향 DNS(PTR)로 찾습니다. 각 항목에는 루트 도메인, PTR 호스트 이름, 샘플링한 IP가 포함됩니다.

ParameterInDescription
asnpathAS 접두사를 제외한 ASN 번호. 예: 15169.
curl https://ipto.to/v1/asn/15169/hosted-domains # {"asn":15169,"sampled":true,"sample_size":5,"domains":[{"root_domain":"googleusercontent.com", # "ptr_hostname":"0.0.214.35.bc.googleusercontent.com","sample_ip":"35.214.0.0"}, ...]}

샘플링한 결과이므로 ASN이 무엇을 호스팅하는지에 대한 단서일 뿐 전체 목록이 아닙니다. 단일 IP는 /v1/ip/:ip/hosted-domains 를 사용하세요.

GET/v1/asn/:asn/relationships

ASN의 BGP 관계: 피어, 업스트림 공급자, 다운스트림 고객과 각각의 개수.

ParameterInDescription
asnpathAS 접두사를 제외한 ASN 번호. 예: 15169.
curl https://ipto.to/v1/asn/15169/relationships # {"asn":15169,"available":true,"peers":[],"upstreams":[],"downstreams":[], # "peer_count":0,"upstream_count":0,"downstream_count":0}

BGP 데이터 소스에 연결할 수 없으면 available 은 false 입니다. available: true 이면서 배열이 비어 있으면 해당 ASN에 대해 보고된 항목이 없다는 뜻입니다.

GET/v1/ip-ranges

IPv4 공간 디렉터리: /8 블록마다 한 항목으로, 포함된 범위·국가·ASN 수와 최다 국가를 보여줍니다. 여기서 시작해 /v1/ip-ranges/:a 와 /v1/ip-ranges/:a/:b 로 더 깊이 들어가세요.

curl https://ipto.to/v1/ip-ranges # {"blocks":[{"octet":1,"range_count":814,"country_count":15,"asn_count":182,"top_country":"KR", # "top_country_share":35,"top_country_name":"South Korea"}, ...],"data_version":"2026-10-06"}
GET/v1/ip-ranges/:a

하나의 /8(예: 8.0.0.0/8) 안의 /16 블록으로, 블록별 범위·국가·ASN 수가 같은 형식으로 포함됩니다.

ParameterInDescription
apath첫 번째 옥텟, 0-255.
curl https://ipto.to/v1/ip-ranges/8 # {"octet1":8,"cidr":"8.0.0.0/8","blocks":[{"octet":8,"range_count":...,"country_count":...,"asn_count":..., # "top_country":"US", ...}, ...]}
GET/v1/ip-ranges/:a/:b

하나의 /16(예: 8.8.0.0/16) 안의 할당된 범위로, 각 범위가 속한 ASN과 블록별 개수가 포함됩니다.

ParameterInDescription
apath첫 번째 옥텟, 0-255.
bpath두 번째 옥텟, 0-255.
curl https://ipto.to/v1/ip-ranges/8/8 # {"octet1":8,"octet2":8,"cidr":"8.8.0.0/16","blocks":[{"octet":1,"range_count":1,"country_count":1,"asn_count":1, # "top_country":"US", ...}, ...],"ranges_total":30,"ranges":[...]}
GET/v1/nearby

좌표에 대한 Nearby 페이로드의 한 부분으로, 클라이언트가 도착하는 대로 각 부분을 렌더링할 수 있습니다: 역지오코딩, 주변 관심 장소, 지역 범죄 통계.

ParameterInDescription
latquery위도, 필수.
lonquery경도, 필수.
partquery어떤 부분인지: geocode, poi 또는 crime. 알 수 없는 값은 400을 반환합니다.
countryquerypart=crime 전용: ISO 국가 코드. 범죄 데이터는 US와 GB에 대해 제공됩니다.
regionquerypart=crime 전용: 주 또는 지역 이름. 예: Utah.
cityquerypart=crime 전용: 도시 이름. 예: Orem.
langquery선택 사항. 장소 라벨을 현지화합니다(위 현지화 표와 같은 코드).
curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=geocode" # {"geocode":{...reverse-geocoded place...}} curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=poi" # {"locality":{...nearby points of interest...}} curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=crime&country=US&region=Utah&city=Orem" # {"locality":{"ukCrime":null,"usCrime":{"agencyName":"Orem Police Department","agencyType":"City", # "distanceKm":4.4,"year":2025,"categories":[{"category":"violent-crime","label":"Violent crime","totalOffenses":129}, ...]}}}
GET/v1/commute

두 지점 간 자동차 이동 시간과 거리. 빠른 경로: /v1/places/:ip 가 수행하는 역지오코딩과 주변 장소 조회를 건너뜁니다.

ParameterInDescription
from_latquery출발지 위도, 필수.
from_lonquery출발지 경도, 필수.
dest_latquery목적지 위도. dest_lon 과 함께 사용하거나 대신 dest_address 를 전달하세요.
dest_lonquery목적지 경도.
dest_addressquery자유 형식 텍스트 목적지로, 자동으로 지오코딩됩니다. dest_lat/dest_lon 이 없을 때 사용됩니다.
curl "https://ipto.to/v1/commute?from_lat=40.2969&from_lon=-111.6948&dest_lat=40.7608&dest_lon=-111.8910" # {"from":{"lat":40.2969,"lon":-111.6948},"to":{"lat":40.7608,"lon":-111.891}, # "commute":{"durationMinutes":44,"distanceKm":63.5}}

목적지를 확인할 수 없으면 응답에 to: null, commute: null 및 reason 문자열이 포함됩니다.

GET/v1/address-lookup

IP 대신 입력한 도로명 주소를 기준으로 한 /v1/places/:ip 페이로드: 지오코드, 지역 정보, 선택적 통근 시간 추정.

ParameterInDescription
qquery자유 형식 주소, 필수.
dest_latquery통근 시간 추정을 포함하기 위한 선택적 목적지 위도(dest_lon 과 함께).
dest_lonquery선택적 목적지 경도.
dest_addressquerydest_lat/dest_lon 대신 사용할 수 있는, 자유 형식 텍스트의 선택적 목적지.
partquerypart=geo 는 라벨과 좌표만 반환하여 첫 렌더링을 더 빠르게 합니다.
langquery선택 사항. 장소 라벨을 현지화합니다(위 현지화 표와 같은 코드).
curl "https://ipto.to/v1/address-lookup?q=1600+Pennsylvania+Ave+NW+Washington+DC" # {"query":"1600 Pennsylvania Ave NW Washington DC","found":true,"label":"...","latitude":38.89, # "longitude":-77.03,"geocode":{...},"commute":null,"locality":{...}} curl "https://ipto.to/v1/address-lookup?q=1600+Pennsylvania+Ave+NW+Washington+DC&part=geo" # {"query":"...","found":true,"label":"...","latitude":38.89,"longitude":-77.03}

주소를 지오코딩할 수 없으면 found 는 false 입니다.

GET/v1/address-suggest

주소 자동 완성: 입력 중인 주소와 일치하는 몇 개의 장소를 반환하며, 특정 지점을 우선하도록 지정할 수 있습니다.

ParameterInDescription
qquery입력 중인 주소 텍스트, 필수.
near_latquery결과를 가까운 쪽으로 우선시할 선택적 위도.
near_lonquery결과를 가까운 쪽으로 우선시할 선택적 경도.
curl "https://ipto.to/v1/address-suggest?q=1600+Penn&near_lat=38.9&near_lon=-77.0" # {"suggestions":[{"label":"Penn Quarter, Ward 2, Washington, District of Columbia, United States", # "lat":38.8949563,"lon":-77.0224592}, ...]}
GET/v1/weather?include=

지명, 우편번호, 좌표 또는 IP에 대한 전체 날씨 문서입니다. include로 필요한 블록을 고르세요: current, hourly, daily, astro(태양과 달), solar, indicators, alerts, marine, air_quality, nowcast 또는 all. 미국 지역은 미국 국립기상청(National Weather Service), 그 밖의 지역은 MET Norway의 데이터이며 어느 쪽인지는 meta.source에 표시됩니다. include를 생략하면 위에 설명한 간단한 { query, weather } 형식이 반환됩니다.

ParameterInDescription
q / lat+lon / ipquery위치: q(도시, 우편번호 또는 "lat,lon"), lat와 lon, 또는 ip 중 하나. 셋 중 하나는 필수입니다.
countryquery선택. 모호한 q를 구분하기 위한 ISO 코드 또는 국가명. 예: 우편번호 75001에 country=FR.
includequery이 형식에서는 필수. 쉼표로 구분: current, hourly, daily, astro, solar, indicators, alerts, marine, air_quality, nowcast 또는 all.
unitsquerymetric(기본값) 또는 imperial. 필드 이름도 단위를 따릅니다: temp_c는 temp_f로, wind_kmph는 wind_mph로, precip_mm은 precip_in으로 바뀝니다.
wind_unitquerykmh, ms, mph 또는 kn. 풍속 단위만 바꿉니다.
hoursquery반환할 시간별 항목 수, 1-240. 기본값 48. 가까운 시간은 1시간 간격, 이후는 6시간 간격이며 step_hours로 구분합니다.
daysquery반환할 일별 항목 수, 1-9. 기본값 7. 미국 데이터는 7일을 다룹니다.
curl "https://ipto.to/v1/weather?lat=38.8977&lon=-77.0365&include=current,daily,alerts&days=1" # {"query":"38.8977,-77.0365","place":{"name":"Washington","region":"DC","country":"United States","country_code":"US", # "lat":38.8977,"lon":-77.0365,"timezone":"America/New_York"}, # "current":{"time":"2026-10-07T12:00-04:00","observed":false,"temp_c":18.9,"feels_like_c":18.9,"humidity_pct":52,"wind_kmph":12.9, # "wind_gust_kmph":24.1,"wind_dir":"S","uv_index":5.4,"condition":"Sunny","weather_code":113,"is_day":true, ...}, # "daily":[{"date":"2026-10-07","tmax_c":22.2,"tmin_c":12.8,"precip_mm":0,"precip_prob_pct":1,"gust_max_kmph":25.9,"uv_index_max":5.4, ...}], # "alerts":{"available":true,"source":"NWS","official":true,"items":[]}, # "meta":{"source":"NOAA National Weather Service","fallback_used":false,"coverage":{"precip_prob":true,"wind_gusts":true, ...}, # "derived":["current.uv_index","current.wet_bulb", ...],"timezone":"America/New_York", ...}} curl "https://ipto.to/v1/weather?q=Oslo&include=marine,air_quality,nowcast&units=imperial" # Norway-only blocks come back with available: true there and available: false everywhere else

meta.coverage는 해당 장소에서 사용할 수 있는 필드를 알려줍니다. 강수 확률, 돌풍, 뇌우 확률은 미국과 북유럽에만 있으며 그 밖의 지역에서는 null입니다(0이 아님). alerts는 미국과 노르웨이의 공식 경보입니다. marine, air_quality, nowcast는 노르웨이와 인근 해역만 다루며 다른 곳에서는 available: false입니다. meta.derived에 있는 항목은 ipto.to의 추정값이고, indicators는 파생된 표시일 뿐 공식 경보가 아닙니다. 데이터를 표시할 때는 meta.attribution을 유지하세요(MET Norway 데이터는 CC BY 4.0입니다).

GET/v1/weather/history

이미 조회된 장소에 대해 ipto.to가 자체적으로 기록한 일별 데이터입니다. 그날의 예보 스냅샷에서 나타난 가장 높은 최고기온, 가장 낮은 최저기온, 가장 큰 강수량을 담습니다. 이미 요청된 장소만 데이터가 있으며 시간이 지나며 쌓입니다.

ParameterInDescription
q / lat+lon / ipquery위치: q(도시, 우편번호 또는 "lat,lon"), lat와 lon, 또는 ip 중 하나. 셋 중 하나는 필수입니다.
daysquery반환할 최근 일수, 1-400. 기본값 30.
curl "https://ipto.to/v1/weather/history?q=Tokyo&days=7" # {"query":"Tokyo","place":{"name":"Tokyo","cc":"JP", ...}, # "days":[{"date":"2026-10-06","tmax_c":24.1,"tmin_c":17.8,"precip_mm":1.2,"condition_code":296,"source":"metno","snapshots":4}, ...], # "note":"Daily envelope of day-0 forecast snapshots (highest high, lowest low, largest precipitation seen), not station observations."}

예보 스냅샷이며 관측소 관측값이나 재분석이 아니므로 관측된 이력으로 사용하지 마세요. 404는 해당 장소의 스냅샷이 아직 기록되지 않았다는 뜻입니다.

GET/v1/weather/radar/frames

사용 가능한 레이더 애니메이션 프레임을 오래된 순으로 반환하며, 각 프레임에는 Unix 타임스탬프와 레이더 타일 URL에 사용할 프레임 id가 있습니다.

curl https://ipto.to/v1/weather/radar/frames # {"frames":[{"time":1791316200,"id":"fdc753dba723"},{"time":1791316800,"id":"2314000028f2"}, ...]}
GET/v1/weather/radar/:frame/:z/:x/:y.png

표준 웹 지도 z/x/y 위치에서 한 프레임의 레이더 지도 타일(PNG). 같은 출처로 프록시되어 지도가 서드파티 요청 없이 불러올 수 있습니다.

ParameterInDescription
framepath/v1/weather/radar/frames 에서 얻은 프레임 id(소문자 16진수).
zpath줌 레벨.
xpath타일 열.
ypath타일 행.
# 1. pick the latest frame id FRAME=$(curl -s https://ipto.to/v1/weather/radar/frames | python3 -c "import sys,json;print(json.load(sys.stdin)['frames'][-1]['id'])") # 2. fetch a tile (image/png) curl -o radar.png "https://ipto.to/v1/weather/radar/$FRAME/5/6/12.png"
GET/v1/weather/satellite/:z/:x/:y.png

표준 웹 지도 z/x/y 위치의 위성 영상 지도 타일로, 같은 출처로 프록시됩니다.

ParameterInDescription
zpath줌 레벨.
xpath타일 열.
ypath타일 행.
curl -o satellite.jpg "https://ipto.to/v1/weather/satellite/5/6/12.png" # the response body is the tile image (served as image/jpeg despite the .png path)
GET/v1/openapi/email.json

/v1/email/:email 에 대한 기계 판독 가능한 OpenAPI 3.1 계약. LLM 및 MCP 에이전트가 이 문서를 읽지 않고도 이메일 엔드포인트를 호출할 수 있도록 작성되었습니다.

curl https://ipto.to/v1/openapi/email.json # {"openapi":"3.1.0","info":{...},"servers":[{"url":"https://ipto.to"}],"paths":{"/v1/email/{email}":{...}}}

IP 조회 필드 참조

FieldTypeDescription
ipstring조회한 IP 주소입니다.
versionstring"v4" 또는 "v6".
bogonboolean사설, 예약, 또는 라우팅 불가능한 주소이면 true입니다.
bogon_typestring|nullbogon인 경우의 이유 코드: "loopback", "private", "link-local", "multicast", "reserved", "documentation", "unspecified" 중 하나.
asninteger|null이 IP를 announce하는 자율 시스템 번호(ASN)입니다.
asn_namestring|nullASN의 짧은 이름입니다(예: "GOOGLE").
asn_orgstring|nullASN에 등록된 조직명입니다(예: "Google LLC").
asn_typestring|nullASN 카테고리: "hosting", "isp", "business", "education", "government", "mobile", "residential" 중 하나.
continentstring|null대륙 전체 이름입니다(예: "North America").
continent_codestring|null두 자리 대륙 코드: AF AS EU NA SA OC AN.
country_codestring|nullIP가 위치한 국가의 ISO 3166-1 alpha-2 국가 코드입니다(예: "US"). 도시 및 위도/경도와 같은 지오로케이션 데이터를 사용합니다. 지오로케이션 일치 항목이 없으면 ASN 등록 국가(asn_country_code)를 사용하며, 국가명, 국기, 통화 등도 이 값에서 파생됩니다.
country_namestring|null영어로 된 국가 전체 이름입니다(예: "United States").
country_flagstring|null국가 이모지 국기입니다(예: "🇺🇸").
is_euboolean해당 국가가 EU 회원국(27개국)이면 true입니다.
citystring|null도시명입니다. 자체 조회 시, 그리고 병합된 두 지리 소스(IP2Location 또는 MaxMind) 중 하나가 일치하는 명시적 조회 시 채워집니다 — geo_precision을 확인하세요.
statestring|null행정 구역/하위 지역입니다. city와 동일한 제공 조건을 따릅니다.
postal_codestring|null우편번호입니다. 자체 조회 시, 그리고 IP2Location(우선)이나 MaxMind가 일치하는 명시적 조회 시 채워집니다 — city와 동일한 제공 조건입니다.
latitudenumber|null십진수 위도입니다. city와 동일한 제공 조건을 따릅니다.
longitudenumber|null십진수 경도입니다. city와 동일한 제공 조건을 따릅니다.
timezonestring|null시간대입니다 — city와 동일한 제공 조건을 따릅니다. 자체 조회 시에는 IANA 식별자입니다(예: "America/New_York"). 명시적 조회 시 형식은 매칭된 소스에 따라 달라집니다: IP2Location인 경우 "-08:00"과 같은 UTC 오프셋 문자열, MaxMind인 경우 IANA 명칭입니다.
geo_precisionstring위치 데이터의 정밀도입니다: "city", "country"(도시 수준 조회에 일치하는 항목이 없음), "none" 중 하나.
geo_country_codestring|nullIP가 위치한 국가로, 지오로케이션 데이터 기준입니다(ISO 3166-1 alpha-2). 값이 있으면 country_code와 같습니다. 지오로케이션 일치 항목이 없으면 null입니다.
asn_country_codestring|nullASN 보유자의 등록 국가입니다(ISO 3166-1 alpha-2). 보유자가 등록된 국가와 다른 나라에서 광고되는 CDN, VPN, 호스팅 또는 애니캐스트 네트워크에서는 country_code와 다를 수 있습니다. IP에 ASN 항목이 없으면 null입니다.
currency_codestring|null해당 국가의 ISO 4217 통화 코드입니다(예: "USD").
exchange_rate_usdnumber|null154개 통화를 다루는 매일 동기화되는 기준 환율 피드를 기준으로, USD 1단위당 현지 통화 단위 수입니다. 해당 목록에 없는 통화는 null입니다.
calling_codestring|null+ 접두사를 포함한 국가 전화 코드입니다(예: "+1").
languagesstring[]해당 국가의 공식/공인 언어이며, 영어로 표기됩니다.
tldstring[]국가 코드 최상위 도메인입니다. 예: [".us"].
capitalstring|null수도 이름입니다.
bordersstring[]인접 국가들의 ISO alpha-2 코드입니다.
is_datacenterbooleanIP가 호스팅 또는 클라우드 제공업체에 속하면 true입니다.
is_mobilebooleanIP가 모바일 통신사에 등록되어 있으면 true입니다.
is_residentialbooleanIP가 가정용 브로드밴드로 분류되면 true입니다.
connection_typestring"mobile", "datacenter", "unknown" 중 하나이며 — is_mobile/is_datacenter와 동일한 분류에서 파생됩니다. 가정용과 기업용을 구분하려는 시도는 의도적으로 하지 않습니다: ASN 조직명 텍스트만으로는 신뢰성 있게 판단할 수 없으므로, mobile이나 datacenter로 확실히 분류되지 않는 ASN은 추측하지 않고 "unknown"으로 남겨둡니다.
is_botbooleanIP가 알려진 봇 인프라와 연관되어 있으면 true입니다.
is_proxybooleanIP가 알려진 프록시 출구 지점이면 true입니다.
is_vpnbooleanIP가 위협 피드에 있는 알려진 VPN 서버 범위에 포함되면 true입니다.
is_torbooleanIP가 확인된 Tor 출구 노드이면 true입니다.
is_abuserbooleanIP가 여러 악용 인텔리전스 피드에서 표시한 네트워크 범위에 포함되면 true입니다.
abuse_scoreinteger|nullis_abuser가 true인 경우, 여러 피드 간 교차 검증을 통한 1-10 심각도 점수입니다. 그 외에는 null입니다.
risk_tierstring|null"critical"(8-10), "high"(5-7), "medium"(3-4) 중 하나이며 — abuse_score에서 파생됩니다. 표시되지 않았으면 null입니다.
threat_typestring|nullis_tor/is_vpn/is_abuser가 겹칠 때 가장 조치하기 용이한 하나의 매칭 카테고리입니다: "tor_exit" > "abuser" > "vpn" 순으로 우선합니다. 일치하는 항목이 없으면 null입니다.
flagsobjectis_* 필드를 그대로 반영하는 하위 호환용 객체입니다. 키: hosting, mobile, residential, bot, blacklisted, vpn, tor, abuser.
meta.data_versionstring조회에 사용된 데이터셋 날짜입니다(YYYY-MM-DD). 자체 조회의 경우 "cf-edge"입니다. 사설 대역의 경우 "bogon"입니다.
meta.cachedboolean응답이 캐시 레이어에서 제공되었으면 true입니다.
meta.langstring이 응답에 실제로 사용된 언어 — ?lang=이 주어지면 그 값과 일치하며, 그렇지 않으면 Accept-Language에서 해석된 값 또는 "en"입니다.
meta.lang_source"param"|"header"|"default"lang이 어떻게 결정되었는지: "param"(?lang=이 전달됨), "header"(Accept-Language에서 해석됨), "default"(둘 다 없었음) 중 하나입니다.

출력 형식

IP, ASN, 국가 조회는 모두 ?format=을 지원합니다.

FormatContent-TypeUsage
jsonapplication/json기본값입니다. 전체 구조화된 응답입니다.
csvtext/csv평면화된 key,value 쌍입니다. 중첩된 객체는 생략됩니다.
texttext/plainkey: value 형식의 줄입니다. 한 줄에 필드 하나씩입니다.
xmlapplication/xml전체 중첩 구조이며, 배열은 태그를 반복합니다.
yamlapplication/x-yaml전체 중첩 구조입니다.
curl "https://ipto.to/v1/ip/8.8.8.8?format=csv" curl "https://ipto.to/v1/ip/8.8.8.8?format=xml" curl "https://ipto.to/v1/ip/8.8.8.8?format=yaml" curl "https://ipto.to/v1/ip/8.8.8.8?fields=ip,country_code,is_vpn,is_tor"

현지화

/v1/ip, /v1/asn/:asn, /v1/country/:code에 ?lang=을 전달하면 country_name과 continent가 현지화됩니다. 그 외의 값(ASN 조직명, 도시명, 통화 코드)은 원래 형태를 그대로 유지합니다 — 이들은 UI 텍스트가 아니라 식별자와 고유명사이기 때문입니다. 지원되지 않는 코드는 오류 대신 영어로 대체됩니다.

CodeLanguage
enEnglish (default)
ptPortuguês
frFrançais
deDeutsch
zh-TW繁體中文
ko한국어
zh-CN简体中文
ja-JP日本語
es-ESEspañol
ar-SAالعربية
hi-INहिन्दी
curl "https://ipto.to/v1/ip/8.8.8.8?lang=de" # "landesname":"Vereinigte Staaten","kontinent":"Nordamerika","ist_vpn":false, ... # every key is renamed and every enum value translated -- this is the default for any non-English lang

?lang=이 없나요? 대신 Accept-Language 헤더를 보내보세요 — 동일한 엔드포인트가 이 헤더도 읽으므로, 쿼리 문자열 없이 curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8만으로도 응답이 현지화됩니다. 둘 다 있을 경우 명시적인 ?lang=이 항상 우선합니다. 참고: LANG/LC_ALL 셸 환경 변수(예: LANG=es_ES.UTF-8 curl ...)는 curl 자체의 로케일만 설정할 뿐 — curl은 이 값을 읽거나 헤더로 변환하지 않으므로 응답 언어에는 아무 영향이 없습니다. 실제로 동작하는 것은 Accept-Language와 ?lang= 두 가지뿐입니다.

curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 # "nombre_país":"Estados Unidos","continente":"Norteamérica" -- full key+value localization, same as ?lang=es # equivalent, explicit form: curl "https://ipto.to/v1/ip/8.8.8.8?lang=es" # does NOT work -- LANG only sets curl's own locale, never a header: LANG=es_ES.UTF-8 curl https://ipto.to/v1/ip/8.8.8.8

모든 /v1/ip, /v1/asn/:asn, /v1/country/:code 응답에는 lang과 lang_source가 포함되어 있어(/v1/ip에서는 meta 안에 중첩, 나머지 두 엔드포인트에서는 최상위 필드) 요청 내용을 추측할 필요 없이 어떤 언어가 적용되었고 그것이 "param", "header", "default" 중 무엇으로 결정되었는지 항상 정확히 확인할 수 있습니다.

curl -s -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 | python3 -m json.tool # "meta": { "data_version": "...", "cached": true, "lang": "es-ES", "lang_source": "header" }

영어가 아닌 lang을 설정하면 모든 키와 값의 현지화가 기본 동작입니다 — 중첩된 flags와 meta 키를 포함한 모든 필드명이 대상 언어로 바뀌어 돌아오고, 고정된 열거형 값(risk_tier, threat_type, connection_type, geo_precision, bogon_type, asn_type)도 함께 번역됩니다. 예전처럼 영어 키 형태가 필요하신가요? /v1/ip에 &localize=0을 추가하면 됩니다.

curl -s "https://ipto.to/v1/ip/8.8.8.8?lang=de&localize=0" | python3 -m json.tool # opts back out to the legacy English-keys shape: # "country_name": "Vereinigte Staaten", "geo_precision": "country", "is_vpn": false, # "flags": { "hosting": false, "mobile": false, ... }, # "meta": { "lang": "de", "lang_source": "param", ... }

코드 예제

JavaScript

const res = await fetch("https://ipto.to/v1/ip/8.8.8.8"); const data = await res.json(); console.log(data.country_name, data.asn_org, data.is_vpn);

Python

import requests r = requests.get("https://ipto.to/v1/ip/8.8.8.8") print(r.json()["country_name"], r.json()["is_vpn"])

PHP

$data = json_decode(file_get_contents("https://ipto.to/v1/ip/8.8.8.8"), true); echo $data["country_name"] . " " . $data["asn_org"];

Go

resp, _ := http.Get("https://ipto.to/v1/ip/8.8.8.8") var data map[string]interface{} json.NewDecoder(resp.Body).Decode(&data)

요청 제한

한도는 하루(UTC) 단위로 적용되며, 무료 티어는 IP 주소 기준으로, Pro/Enterprise는 키 기준으로 집계됩니다. 한도를 초과하면 Retry-After 헤더와 함께 HTTP 429가 반환됩니다. 프로덕션 워크로드의 경우 요금제를 참고하세요.

모든 /v1/* 엔드포인트, /mcp 서버, curl ipto.to / curl ipto.to/:ip 단축 명령에 적용됩니다. 유일한 예외는 GET /ip입니다 — 조회 비용이 없는 단순 헤더 에코이므로 한도를 전혀 소모하지 않습니다.

TierRequests / dayAuth
Free1,000없음
Pro100,000API 키(헤더)
EnterpriseUnlimitedAPI 키 + 전용 엔드포인트

오류 코드

StatusMeaning
200OK. 응답에 데이터가 포함됩니다.
202피드 데이터가 동기화 중입니다. 45초 후 다시 시도하세요.
400잘못된 요청입니다. IP, ASN, 또는 국가 코드가 유효하지 않습니다.
404데이터셋에서 ASN 또는 국가를 찾을 수 없습니다.
503데이터셋을 아직 사용할 수 없습니다. 초기 수집이 진행 중일 수 있습니다.