API रेफरेंस

सरल, कंसिस्टेंट एंडपॉइंट्स। CORS इनेबल्ड। कोई ऑथेंटिकेशन ज़रूरी नहीं। पूरी तरह मल्टीलिंगुअल — हर फ़ील्ड की key और value 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 ipto.to या curl ipto.to/8.8.8.8 (https:// या /v1/ip/ की ज़रूरत नहीं) भी तब काम करता है जब रिक्वेस्ट curl, Wget, या HTTPie से आती है — User-Agent से पहचाना जाता है। यह एक छोटा, 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 key और value ट्रांसलेटेड वापस आती है — सिर्फ़ country/continent नहीं। पूरी भाषा लिस्ट और &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 लुकअप नहीं) और प्रति-दिन रिक्वेस्ट बजट के खिलाफ़ मीटर नहीं होता — देखें Rate limits।

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

रिक्वेस्ट करने वाले IP के लिए जियोलोकेशन और थ्रेट इंटेलिजेंस रिटर्न करता है, जिसमें CF edge ऑब्जेक्ट के ज़रिए सिटी-लेवल डेटा भी शामिल है।

कोई ज़रूरी पैरामीटर नहीं। ?lang=, ?fields=, ?format= स्वीकार करता है — नीचे Localization और Output formats देखें।

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, mobile-carrier, hosted-domains, और places को भी फैन-आउट करता है, इसलिए एक ही सर्च आपके डेली रेट-लिमिट बजट से हर फ़ीचर के लिए अलग-अलग नहीं, सिर्फ़ एक रिक्वेस्ट लेता है।

ParameterInDescription
querypathज़रूरी। एक IP, ASN, कंट्री कोड, ईमेल, या फ़ोन नंबर।
FieldTypeDescription
querystringमिला हुआ डिकोडेड इनपुट, जैसा प्राप्त हुआ।
detected_typestring"ip", "asn", "country", "email", या "phone"।
ipobject|nullमौजूद होता है जब detected_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|nullजब detected_type मैच करे तो ऊपर वाले छह फ़ील्ड्स की जगह मौजूद होता है — उस टाइप के अपने डेडिकेटेड एंडपॉइंट जैसा ही शेप।

हर सब-फ़ील्ड अलग-अलग डिग्रेड होता है — कोई धीमा या फ़ेल हुआ अपस्ट्रीम (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 के फ़िलहाल-अनाउंस्ड रूट के लिए RPKI रूट-ओरिजिन वेलिडेशन, RIPEstat के ज़रिए लाइव रिज़ॉल्व होता है (कोई ROA डेटाबेस लोकली इनजेस्ट या सिंक नहीं किया जाता)। status हमेशा सिर्फ़ "valid", "invalid", या "unknown" होता है — किसी और सिग्नल से कभी सिंथेसाइज़ नहीं किया जाता; कोई भी RIPEstat फ़ेलियर या टाइमआउट एक reason स्ट्रिंग के साथ "unknown" रिटर्न करता है, एरर नहीं।

ParameterInDescription
ippathज़रूरी। कोई भी मान्य IPv4 या IPv6 एड्रेस।
FieldTypeDescription
asninteger|nullफ़िलहाल-अनाउंस करने वाला ASN, लाइव रिज़ॉल्व होता है — इस साइट के अपने ASN डेटासेट से नहीं निकाला जाता।
prefixstring|nullफ़िलहाल-अनाउंस्ड CIDR प्रीफ़िक्स।
statusstring"valid", "invalid", या "unknown"।
validating_roasarrayRIPEstat ने जो specific ROA(s) मैच किए, हर एक origin/prefix/max_length/validity के साथ।
validatorstring|nullRIPEstat ने कौन-सा RPKI validator इस्तेमाल किया (जैसे "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 रजिस्ट्रेशन रिकॉर्ड — network block, registration/last-changed dates, और RDAP के पास मौजूद हर contact। ऊपर वाले /company से अलग, जो इसी रजिस्ट्रेंट डेटा को ASN के org नाम के साथ मिलाकर एक confidence-scored जवाब में बदल देता है; यह एंडपॉइंट रॉ रिकॉर्ड को जैसा है वैसा ही रिटर्न करता है, क्लासिक WHOIS आउटपुट के करीब। IPv6 एड्रेस भी सपोर्टेड हैं।

ParameterInDescription
ippathज़रूरी। कोई भी मान्य IPv4 या IPv6 एड्रेस।
FieldTypeDescription
availablebooleanअगर कोई RDAP रिकॉर्ड रिज़ॉल्व नहीं हो सका तो 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 के पास मौजूद हर contact, हर एक roles, name, email, और handle के साथ — सिर्फ़ पहला मैच नहीं।
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

मोबाइल नेटवर्क के रूप में क्लासिफ़ाइड IPs के लिए बेस्ट-एफ़र्ट मोबाइल-कैरियर आइडेंटिफ़िकेशन, MCC/MNC ऑपरेटर डायरेक्टरी के खिलाफ़ क्रॉस-रेफ़रेंस किया गया। जानबूझकर इसमें कोई एक carrier फ़ील्ड नहीं है — नीचे matched_carrier_entries और note देखें — क्योंकि एक सीधा carrier नाम एक लाइव पर-सब्सक्राइबर दावे जैसा लगेगा, जिसे यह डेटा ईमानदारी से सपोर्ट नहीं कर सकता।

ParameterInDescription
ippathज़रूरी। कोई भी मान्य IPv4 या IPv6 एड्रेस।
FieldTypeDescription
is_mobile_networkbooleanfalse होने पर यहीं एक खाली directory के साथ रुक जाता है — non-mobile ASN के लिए कोई अंदाज़ा नहीं लगाया जाता।
asn_organizationstring|nullASN का अपना ऑर्गेनाइज़ेशन नाम।
matched_carrier_entriesarrayMCC/MNC डायरेक्टरी की वे रो जिनका carrier नाम asn_organization से fuzzy-match करता है, 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 के reverse-DNS (PTR) hostname और certificate-transparency logs (crt.sh) के ज़रिए उससे जुड़े डोमेन ढूंढता है — कोई सामान्य reverse-IP लुकअप नहीं। रिस्पॉन्स का अपना limitations फ़ील्ड बिल्कुल बताता है कि यह क्या ढूंढ सकता है और क्या नहीं।

ParameterInDescription
ippathज़रूरी। कोई भी मान्य IPv4 या IPv6 एड्रेस।
FieldTypeDescription
ptr_hostnamestring|nullIP का reverse-DNS hostname, या null अगर इसका कोई PTR रिकॉर्ड नहीं है।
root_domainstring|nullptr_hostname से निकाला गया registrable डोमेन।
subdomains_seenarray|nullcertificate transparency के ज़रिए मिले सबडोमेन। null का मतलब है कि crt.sh सर्च खुद पूरी नहीं हो सकी — यह एक खाली array से अलग है, जिसका मतलब है कि सर्च चली लेकिन कुछ नहीं मिला।
limitationsstringबताता है कि यह फ़ीचर स्ट्रक्चरल रूप से क्या डिटेक्ट नहीं कर सकता (no PTR, shared hosting, uncertified डोमेन)।
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 IPs तक, सिर्फ़ Pro/Enterprise। हर IP को की के तौर पर लेकर एक keyed ऑब्जेक्ट रिटर्न करता है। पैरेलल कैश और डेटाबेस रीड्स की वजह से सीक्वेंशियल कॉल्स से तेज़। बैच में हर IP आपके डेली रिक्वेस्ट बजट में गिना जाता है, अलग-अलग लुकअप करने जैसा ही। Free-tier रिक्वेस्ट्स को 403 मिलता है — देखें pricing।

ParameterInDescription
bodybody (JSON)IP स्ट्रिंग्स का JSON array। जैसे ["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 को लुकअप करें। org नाम, देश, महाद्वीप, IP रेंज काउंट, क्लासिफ़िकेशन टाइप, एक्सचेंज रेट, और locale रेफरेंस डेटा (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 की मौजूदा सिटी-लेवल लोकेशन को reverse-geocode करता है, फिर आस-पास के पॉइंट्स ऑफ़ इंटरेस्ट (रेस्टोरेंट, पार्क, स्कूल, ट्रांज़िट, notable लैंडमार्क), जहां कोई सोर्स मौजूद हो वहां लोकल क्राइम डेटा (सिर्फ़ UK और US), और एक ऑप्शनल ऑन-डिमांड ड्राइविंग कम्यूट एस्टिमेट रिटर्न करता है।

ParameterInDescription
ippathज़रूरी। कोई भी मान्य IPv4 एड्रेस। IPv6 अभी सपोर्टेड नहीं है।
dest_latqueryऑप्शनल। कम्यूट एस्टिमेट के लिए destination latitude — dest_lon के साथ पेयर करें।
dest_lonqueryऑप्शनल। कम्यूट एस्टिमेट के लिए destination longitude — dest_lat के साथ पेयर करें।
dest_addressqueryऑप्शनल। कम्यूट एस्टिमेट के लिए फ़्री-टेक्स्ट destination एड्रेस, ऑटोमैटिकली forward-geocoded होता है। अगर dest_lat/dest_lon भी दिए गए हों तो इसे अनदेखा किया जाता है।
FieldTypeDescription
geocodeobject|nullcountry, countryCode, region, city, neighbourhood, displayName — null अगर IP के पास geocode करने के लिए कोई सिटी-लेवल लोकेशन नहीं है।
locality.restaurants / .parks / .schools / .transitarrayहर कैटेगरी में 4 तक सबसे नज़दीकी एंट्रीज़, हर एक name और distanceMeters के साथ।
locality.notablearrayWikidata के ज़रिए, एक छोटे विवरण के साथ आस-पास के notable लैंडमार्क।
locality.usCrimeobject|nullसबसे नज़दीकी एजेंसी के violent/property crime टोटल — सिर्फ़ US, डिप्लॉयमेंट पर एक FBI_CRIME_API_KEY ज़रूरी है। बाकी हर जगह null।
locality.ukCrimeobject|null1 मील के अंदर स्ट्रीट-लेवल इंसिडेंट समरी — सिर्फ़ GB।
locality.caCrimenullहमेशा null — कोई Canada-wide क्राइम सोर्स वायर्ड-अप नहीं है (docs/places.md देखें)।
commuteobject|nulldurationMinutes और distanceKm, सिर्फ़ तब जब कोई destination दिया गया हो और OpenRouteService ने कोई route रिटर्न किया हो। बाकी हर स्थिति में 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

कंट्री-लेवल एग्रीगेट स्टैटिस्टिक्स के साथ locale रेफरेंस डेटा (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 स्ट्रिंग को पार्स करें। browser, OS, device टाइप, और बॉट डिटेक्शन रिटर्न करता है। डिफ़ॉल्ट रूप से कॉलर का User-Agent हेडर पढ़ता है, या ?ua= के ज़रिए कोई भी स्ट्रिंग पास करें।

ParameterInDescription
uaqueryऑप्शनल। पार्स करने के लिए URL-encoded 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

एक फ़ोन नंबर को हमेशा फ्री में validate और format करता है: region, line type, और E.164/national/international फ़ॉर्मैटिंग एक self-hosted पार्सर के ज़रिए, कोई vendor कॉल नहीं। जब per-IP/key मंथली प्रीमियम budget उपलब्ध हो (Free पर 100/महीना, paid टियर्स पर ज़्यादा — देखें pricing), तो वही रिक्वेस्ट एक रियल-टाइम carrier-lookup सर्विस से लाइव carrier नाम, porting स्टेटस, और एक provider-classified phone type भी रिटर्न करती है — देखें source और नीचे दिए फ़ील्ड्स। एक लोकलाइज़्ड country_name और lang/lang_source टियर की परवाह किए बिना हमेशा शामिल होते हैं — देखें Localization। प्रीमियम budget ख़त्म होने पर, या किसी upstream इश्यू पर, ऊपर वाले फ्री फ़ील्ड्स पर सहजता से fall back करता है; इसकी वजह से रिक्वेस्ट कभी fail नहीं होती। प्रति-नंबर lookup की बजाय country-level network-operator रेफरेंस के लिए इसके बजाय GET /v1/carriers देखें।

ParameterInDescription
numberpathज़रूरी। कोई भी फ़ोन नंबर, आइडियली E.164 फ़ॉर्मैट में (जैसे +14155552671)। शुरुआती + को URL-encode करें।
countryqueryऑप्शनल। अस्पष्ट national-format नंबर्स को पार्स करने के लिए 2-लेटर कंट्री कोड hint, जैसे ?country=US।
modequeryOptional। ?mode=current नंबर का रियल-टाइम (SIM-issued की बजाय) carrier मांगता है, जब प्रीमियम टियर उपलब्ध हो। रिक्वेस्ट के फ्री टियर पर fall back होने पर इसे इग्नोर किया जाता है।
FieldTypeDescription
validbooleantrue अगर नंबर अपने region के लिए मान्य numbering-plan पैटर्न से मैच करता है।
country_codestring|nullISO 3166-1 alpha-2 region जिससे नंबर संबंधित है।
national_formatstring|nullregion के अपने 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, या इनके जैसा कुछ। कई numbering plans (North America के प्लान समेत) सिर्फ़ नंबर से fixed और mobile में फ़र्क़ नहीं कर पाते।
sourcestring"premium" अगर इस रिक्वेस्ट के लिए लाइव carrier-lookup budget उपलब्ध था, "local" अगर यह ऊपर वाले फ्री पार्सर पर fall back हुआ। नीचे दिए carrier, phone_type, original_carrier, is_ported, phone_region, और country_prefix सिर्फ़ तभी भरे जाते हैं जब source "premium" हो — इससे आगे country_name और lang/lang_source टियर की परवाह किए बिना हमेशा भरे जाते हैं।
phone_typestring|nullलाइव carrier-lookup प्रोवाइडर की अपनी categories में से एक: mobile, fixed_line, voip, toll_free, premium_rate, shared_cost, personal_number, pager, uan, voicemail, या unknown — सिर्फ़ पहले चार नहीं, जो केवल सबसे आम उदाहरण हैं। जब source "local" हो तो null — ऊपर वाले line_type से अलग, जो लोकल पार्सर से आता है और categories का एक अलग सेट इस्तेमाल करता है।
carrierstring|nullनंबर के मौजूदा network operator का नाम। जब source "local" हो तो null।
original_carrierstring|nullवह network operator जिस पर नंबर मूल रूप से issue हुआ था, अगर तब से यह port हो चुका है। जब source "local" हो या नंबर port नहीं हुआ हो तो null।
is_portedboolean|nulltrue अगर नंबर अपने original carrier से port हो चुका है। जब source "local" हो तो null।
phone_regionstring|nullनंबर के लिए locality/state-level डिटेल (जैसे "California"), ऊपर वाले country_code से ज़्यादा फ़ाइन-ग्रेन्ड। जब source "local" हो तो null।
country_prefixstring|nullनंबर का calling code बिना आगे "+" के (जैसे Germany के लिए "49")। जब source "local" हो तो null।
country_namestring|nullपूरा country डिस्प्ले नाम (जैसे "Germany") — ऊपर वाला country_code सिर्फ़ ISO alpha-2 फ़ॉर्म है ("DE"), कोई डिस्प्ले नाम नहीं। ऊपर वाले प्रीमियम-ओनली फ़ील्ड्स के उलट, यह हमेशा भरा जाता है (जब भी country_code भरा हो) और ?lang=/Accept-Language के ज़रिए बिल्कुल वैसे ही लोकलाइज़ होता है जैसे किसी भी दूसरे endpoint का country_name फ़ील्ड पहले से होता है — नीचे lang/lang_source देखें।
langstringवह भाषा जो असल में ऊपर वाले country_name पर लागू हुई — resolved ?lang= वैल्यू, या "en" अगर कोई भाषा रिक्वेस्ट नहीं की गई थी या रिक्वेस्ट की गई भाषा सपोर्टेड नहीं है।
lang_sourcestring"param" अगर रिक्वेस्ट पर ?lang= मौजूद था, "header" अगर इसके बजाय Accept-Language इस्तेमाल हुआ, या "default" अगर दोनों में से कोई नहीं था और English इस्तेमाल हुई। GET /v1/asn/:asn और GET /v1/country/:code पर मौजूद इसी नाम वाले फ़ील्ड जैसा ही मतलब।
curl "https://ipto.to/v1/phone/+14155552671"
POST/v1/phone/bulk

बैच वेलिडेशन। हर टियर को बल्क एक्सेस मिलता है (/v1/ip/bulk के उलट) — Free को बाउंडेड रखने का काम per-tier बैच cap करता है, कोई 403 नहीं। Free: 10/रिक्वेस्ट, 100/दिन। Pro: 100/रिक्वेस्ट, 1,000/दिन। Enterprise: 1,000/रिक्वेस्ट, 10,000/दिन। यह बजट आपकी सामान्य डेली रिक्वेस्ट लिमिट से अलग है — देखें Rate limits।

ParameterInDescription
bodybody (JSON)फ़ोन नंबर स्ट्रिंग्स का JSON array।
curl -X POST https://ipto.to/v1/phone/bulk \ -H "Content-Type: application/json" \ --data '["+14155552671","+442071838750"]'
GET/v1/carriers

रेफरेंस लुकअप: किसी दिए गए देश के लिए कौन-से mobile network operators (MCC/MNC) जाने जाते हैं — किसी specific फ़ोन नंबर से नहीं जुड़ा। एक community-maintained MCC/MNC कलेक्शन (MIT-लाइसेंस्ड, आख़िरी बार 2026 में सिंक हुआ — डिटेल्स के लिए docs repo देखें) से लिया गया; एक स्टैटिक रेफरेंस टेबल, कोई लाइव फ़ीड नहीं, क्योंकि numbering-plan असाइनमेंट इतनी बार नहीं बदलते कि लाइव फ़ीड ज़रूरी हो।

ParameterInDescription
countryqueryज़रूरी। 2-लेटर कंट्री कोड, जैसे ?country=US।
curl "https://ipto.to/v1/carriers?country=US"
GET/v1/email/:email

ईमेल syntax वेलिडेशन, DNS-over-HTTPS के ज़रिए एक लाइव MX-रिकॉर्ड चेक, और एक community-maintained blocklist (CC0-लाइसेंस्ड, रोज़ाना सिंक होता है) के खिलाफ़ disposable/temporary-डोमेन डिटेक्शन। यह वेरिफ़ाई नहीं करता कि mailbox खुद मौजूद है या नहीं — इसके लिए एक SMTP handshake चाहिए जो यह API नहीं करता (has_mx वाकई क्या साबित करता है और क्या नहीं, इसके लिए नीचे फ़ील्ड रेफरेंस देखें)।

ParameterInDescription
emailpathज़रूरी। कोई भी ईमेल एड्रेस, URL-encoded (@ को %40 के रूप में encode करना ज़रूरी है)।
FieldTypeDescription
valid_syntaxbooleantrue अगर एड्रेस एक स्टैंडर्ड ईमेल syntax पैटर्न से मैच करता है। यह वेरिफ़ाई नहीं करता कि mailbox मौजूद है।
domainstring|nullडोमेन वाला हिस्सा, lowercase में। अगर valid_syntax false है तो null।
has_mxboolean|nulltrue अगर डोमेन के पास अभी कम-से-कम एक MX रिकॉर्ड है। अगर syntax अमान्य था या DNS क्वेरी खुद फ़ेल/टाइमआउट हुई तो null — null को unknown मानें, false नहीं।
disposableboolean|nulltrue अगर डोमेन किसी जाने-पहचाने disposable/temporary-ईमेल प्रोवाइडर से मैच करता है। 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, email, phone, और 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 जैसा ही कन्वेंशन। जो सिग्नल आप पास नहीं करते वह सिर्फ़ रिस्पॉन्स से गायब होता है, उसे क्लीन के तौर पर स्कोर नहीं किया जाता — उसका वेट उन सिग्नल्स में फिर से बांट दिया जाता है जो आपने दिए थे।

ParameterInDescription
ipqueryऑप्शनल। डिफ़ॉल्ट रूप से आपका अपना IP। IPv6 अभी स्कोर नहीं किया जाता (बाकी threat-data API जैसी ही लिमिटेशन)।
emailqueryऑप्शनल। कोई भी ईमेल एड्रेस।
phonequeryऑप्शनल। कोई भी फ़ोन नंबर।
uaqueryऑप्शनल। डिफ़ॉल्ट रूप से आपका अपना User-Agent हेडर।
FieldTypeDescription
scoreintegerजो भी सिग्नल दिए गए उन सबका 0-100 weighted कंपोज़िट।
risk_tierstring"low" (<20), "medium" (20-44), "high" (45-69), या "critical" (70+)।
signalsobjectप्रति-इनपुट ब्रेकडाउन — सिर्फ़ उन इनपुट की keys मौजूद होती हैं जो आपने वाकई दी थीं: 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

एक असली headless Chrome इंस्टेंस (Cloudflare Browser Rendering, कोई थर्ड-पार्टी स्क्रीनशॉट वेंडर नहीं) में एक URL को रेंडर करता है और एक PNG रिटर्न करता है। इंटरनल/प्राइवेट टारगेट्स (localhost, RFC 1918 रेंज, link-local/cloud-metadata एड्रेस) को ब्राउज़र लॉन्च होने से पहले ही रिजेक्ट कर दिया जाता है। Browser Rendering की अपनी प्लेटफ़ॉर्म-लेवल लिमिट्स लागू होती हैं, जो इस बाकी API से कहीं ज़्यादा टाइट हैं — लोअर Cloudflare प्लान्स पर उम्मीद करें कि यह आपके सामान्य डेली रिक्वेस्ट बजट से काफ़ी पहले थ्रॉटल हो जाएगा।

ParameterInDescription
urlqueryज़रूरी। http या https होना चाहिए।
curl "https://ipto.to/v1/screenshot?url=https://example.com" --output screenshot.png
GET/v1/language

लोकल trigram-frequency एनालिसिस के ज़रिए किसी टेक्स्ट की भाषा पहचानता है — कोई एक्सटर्नल वेंडर कॉल नहीं, कोई AI-मॉडल इन्फ़रेंस नहीं, कोई लॉगिंग नहीं। 10 कैरेक्टर से कम इनपुट पर null language रिटर्न होता है; ~30 कैरेक्टर से कम पर अब भी एक best guess मिल सकता है लेकिन reliable false होगा।

ParameterInDescription
textqueryज़रूरी। 5,000 कैरेक्टर तक — इससे लंबा इनपुट ट्रंकेट किया जाता है, रिजेक्ट नहीं।
FieldTypeDescription
languageobject|nullबेस्ट मैच के लिए code (ISO 639-1), iso639_3, name, और local_name। अगर टेक्स्ट बहुत छोटा है या पहचाना नहीं गया ("und") तो null।
reliablebooleanछोटे इनपुट के लिए false — रिज़ल्ट को एक अंदाज़ा मानें, कॉन्फ़िडेंट मैच नहीं।
candidatesarrayनज़दीकी से जुड़ी भाषाओं के लिए, रिलेटिव स्कोर के साथ 5 तक runner-up भाषाएं।
curl "https://ipto.to/v1/language?text=Bonjour%2C+comment+allez-vous%3F"
GET/v1/currency/convert

उसी डेली reference-rate फ़ीड का इस्तेमाल करते हुए दो करेंसी (154 सपोर्टेड) के बीच एक अमाउंट कन्वर्ट करता है जो हर IP, ASN, और कंट्री लुकअप पर currency_code/exchange_rate_usd को पहले से पावर करती है — यहां एक स्टैंडअलोन कन्वर्शन एंडपॉइंट के तौर पर एक्सपोज़्ड है, किसी जियोलोकेशन रिस्पॉन्स के अंदर nested होने के बजाय।

ParameterInDescription
fromqueryज़रूरी। 3-लेटर ISO 4217 करेंसी कोड।
toqueryज़रूरी। 3-लेटर ISO 4217 करेंसी कोड।
amountqueryऑप्शनल। डिफ़ॉल्ट रूप से 1।
FieldTypeDescription
resultnumberकन्वर्ट किया गया अमाउंट।
ratenumber1 from के बदले to की यूनिट्स।
updatedstringreference-rate सिंक का ISO टाइमस्टैम्प जो इस कन्वर्शन ने इस्तेमाल किया।
curl "https://ipto.to/v1/currency/convert?from=USD&to=EUR&amount=100"
GET/v1/currency/rates

सिर्फ़ USD नहीं, किसी भी सपोर्टेड करेंसी के खिलाफ़ rebase किया गया पूरा एक्सचेंज-रेट टेबल (154 करेंसी)।

ParameterInDescription
basequeryऑप्शनल। डिफ़ॉल्ट रूप से USD।
FieldTypeDescription
ratesobjectcurrency code → base के मुकाबले rate का मैप।
curl "https://ipto.to/v1/currency/rates?base=EUR"
GET/v1/currency/history

एक करेंसी पेयर के लिए 90 दिन पीछे तक की डेली reference-rate history — currency converter टूल पर rate-trend चार्ट के पीछे का डेटा। एक बार backfill किया जाता है, फिर उसी cron के ज़रिए रोज़ाना append होता है जो GET /v1/currency/convert को अपडेट करता है। यह समय के साथ एक सिंगल डेली reference rate है, कोई bid/ask ट्रेडिंग स्प्रेड नहीं।

ParameterInDescription
targetqueryज़रूरी। चार्ट करने के लिए 3-लेटर ISO 4217 करेंसी कोड।
basequeryऑप्शनल। डिफ़ॉल्ट रूप से USD।
daysqueryऑप्शनल। 30, 60, 90 में से एक। डिफ़ॉल्ट रूप से 30।
FieldTypeDescription
seriesarray{ date, rate } पॉइंट्स का ascending-date array।
statsobjectरिटर्न की गई series में 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 के साथ, एक hourly outlook और मल्टी-डे फ़ोरकास्ट। अमेरिका के स्थानों के लिए नेशनल वेदर सर्विस (National Weather Service) और बाकी दुनिया के लिए MET Norway जवाब देता है। यूनिट्स, 9 दिन तक, सूर्य और चंद्रमा, आधिकारिक चेतावनियों और बहुत कुछ वाले पूरे दस्तावेज़ के लिए include= जोड़ें — नीचे दिया 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सेल्सियस में "Feels like" तापमान।
humidity_pctnumber|nullसापेक्ष आर्द्रता (humidity)।
wind_kmph / wind_dirnumber|null / string|nullहवा की गति और 16-पॉइंट कम्पास दिशा।
uv_indexnumber|nullUV इंडेक्स।
locationobject|nullक्वेरी की गई जगह के लिए रिज़ॉल्व किया गया name, region, country, और lat/lon — सिर्फ़ रॉ इनपुट नहीं।
forecast.hourly[]arrayसिर्फ़ detail=1। अगले 24 घंटे 3-घंटे के स्टेप्स में: hour_label, temp_c/temp_f, weather_code, chance_of_rain_pct।
forecast.daily[]arrayसिर्फ़ detail=1। 3-दिन का outlook: 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-digit serial नंबर से case status के लिए USPTO के Trademark Status & Document Retrieval (TSDR) सिस्टम का लाइव प्रॉक्सी — एक डायरेक्ट प्रति-रिक्वेस्ट कॉल, कोई कैश्ड या resold कॉपी नहीं। Case-status डेटा एक U.S. सरकारी work है और USPTO की अपनी terms of use के अनुसार पब्लिक डोमेन है, इसलिए हर रिस्पॉन्स में इसे चुपचाप कैश या resell करने के बजाय एक source/attribution फ़ील्ड होती है। Trademark लोगो/इमेज डेटा जानबूझकर scope से बाहर है — USPTO की terms इमेज लाइसेंसिंग को इस एंडपॉइंट के रिटर्न किए गए case-status टेक्स्ट डेटा से अलग रखती हैं। Registration-number लुकअप अभी सपोर्टेड नहीं है; आज सिर्फ़ serial-number path ही USPTO द्वारा डॉक्यूमेंटेड है। इसे Trademark Lookup टूल पर आज़माएं।

ParameterInDescription
serialpathज़रूरी। बिल्कुल 8 अंक, जैसे 98267877।
FieldTypeDescription
sourcestringहमेशा "USPTO TSDR"।
attributionstringUSPTO की terms of use के अनुसार ज़रूरी attribution लाइन।
dataobjectUSPTO द्वारा रिटर्न किया गया रॉ case-status payload, reshape किए बिना पास-थ्रू किया गया — 2026-08-12 को लाइव कन्फ़र्म किया गया। data.trademarks[0] के अंदर: status (filing/registration dates, markElement, descOfMark, tm5StatusDesc), parties.ownerGroups (role के हिसाब से owner name/address), gsList[] (goods/services विवरण और classes), और prosecutionHistory[] (पूरी case टाइमलाइन)। फ़ील्ड की मौजूदगी application स्टेटस के हिसाब से अलग-अलग होती है — जैसे किसी pending एप्लिकेशन में अभी usRegistrationNumber नहीं होता।
curl "https://ipto.to/v1/trademark/98267877" # ANTHROPIC, Reg. No. 8296420
GET/v1/patent/:number

7-8 अंकों के utility patent नंबर से grant status के लिए USPTO के Patent File Wrapper API (Open Data Portal) का लाइव प्रॉक्सी — एक डायरेक्ट प्रति-रिक्वेस्ट कॉल, कोई कैश्ड या resold कॉपी नहीं। मूल रूप से टारगेट किया गया सोर्स (PatentsView का Search API) 2026-03-20 को बंद होना कन्फ़र्म हुआ; इसकी जगह यह इसके लाइव उत्तराधिकारी को प्रॉक्सी करता है। Patent File Wrapper डेटा एक U.S. सरकारी work है और USPTO की अपनी terms of use के अनुसार पब्लिक डोमेन है, इसलिए हर रिस्पॉन्स में एक source/attribution फ़ील्ड होती है। Scope application/prosecution-केंद्रित है — Lens.org, Espacenet, या Google Patents जैसा कोई citation graph, patent family, legal-status फ़ील्ड, या इमेज नहीं। कवरेज 2001 में फ़ाइल की गई applications से शुरू होती है। Design, plant, और reissue patents अभी सपोर्टेड नहीं हैं; सिर्फ़ granted patent नंबर से utility patents। इसे Patent Lookup टूल पर आज़माएं।

ParameterInDescription
numberpathज़रूरी। 7-8 अंक, जैसे 12393227। सिर्फ़ granted utility patent नंबर, कोई application नंबर नहीं।
FieldTypeDescription
sourcestringहमेशा "USPTO Patent File Wrapper"।
attributionstringUSPTO की terms of use के अनुसार ज़रूरी attribution लाइन।
dataobjectUSPTO द्वारा रिटर्न किया गया रॉ prosecution-record payload, reshape किए बिना पास-थ्रू किया गया — असली patents (12393227, 9935534) के खिलाफ़ 2026-08-12 को लाइव कन्फ़र्म किया गया। मुख्य फ़ील्ड्स: applicationMetaData (inventionTitle, filingDate, applicationStatusDescriptionText, applicationStatusDate, patentNumber, inventorBag[]), recordAttorney.attorneyBag[], applicationNumberText, और eventDataBag[] (पूरी prosecution टाइमलाइन)। अगर नंबर मौजूद नहीं है, कोई design/plant/reissue patent है, या 2001 कवरेज से पहले का है तो 404 रिटर्न करता है।
curl "https://ipto.to/v1/patent/12393227" # WEARABLE COMPUTING DEVICE, granted 2025
GET/v1/feeds

पेजिनेटेड VPN, Tor, और थ्रेट इंटेलिजेंस फ़ीड। प्रति पेज 200 एंट्रीज़। हर एंट्री में IP/CIDR, provider attribution, ISP, देश, और क्लासिफ़िकेशन टाइप शामिल है।

ParameterInDescription
pagequery0-indexed पेज नंबर। डिफ़ॉल्ट: 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

पेजिनेटेड abusive नेटवर्क रेंज। cross-feed corroboration से 1-10 स्कोर किया गया। रिस्क टियर: critical (8-10), high (5-7), medium (3-4)।

ParameterInDescription
pagequery0-indexed पेज नंबर। डिफ़ॉल्ट: 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

उन ओपन डेटासेट्स का डाउनलोड करने लायक CSV एक्सपोर्ट जिन पर यह API पहले से बना है — वही डेटा, कोई नया लाइसेंस नहीं। asn और ranges हमेशा उपलब्ध होते हैं; geo-city तब तक 503 रिटर्न करता है जब तक किसी दिए गए डिप्लॉयमेंट पर उस सोर्स का डेटासेट एक्टिव न हो। geo-city एक बार में एक जियो सोर्स की रॉ रो एक्सपोर्ट करता है, कोई merged व्यू नहीं — ?source=primary (डिफ़ॉल्ट) या ?source=secondary पास करें।

ParameterInDescription
kindpathइनमें से एक: asn, ranges, geo-city।
sourcequeryसिर्फ़ geo-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 रिक्वेस्ट/दिन; bulk लुकअप शामिल नहीं)। Pro और Enterprise की ज़्यादा डेली लिमिट और bulk लुकअप (प्रति-रिक्वेस्ट 100 IPs तक) अनलॉक करती हैं — देखें pricing। की को सुरक्षित रख लें — इसे बाद में दोबारा नहीं लाया जा सकता।

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 और abuse मेलबॉक्स। रिपोर्ट कहाँ भेजनी है, यह जानने के लिए इस्तेमाल करें।

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 लौटता है।
countryqueryकेवल part=crime के लिए: ISO देश कोड। अपराध डेटा US और GB के लिए उपलब्ध है।
regionqueryकेवल part=crime के लिए: राज्य या क्षेत्र का नाम, जैसे Utah।
cityqueryकेवल part=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। निकट की प्रविष्टियाँ प्रति घंटा और आगे की हर 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 रहते हैं (कभी शून्य नहीं)। 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)। समान-origin से परोसी जाती है ताकि मानचित्र बिना किसी तृतीय-पक्ष अनुरोध के उसे लोड कर सके।

ParameterInDescription
framepath/v1/weather/radar/frames से फ़्रेम id (छोटे अक्षरों में हेक्स)।
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 स्थिति के लिए उपग्रह चित्र मानचित्र टाइल, समान-origin से परोसी जाती है।

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"।
bogonbooleantrue अगर यह एक प्राइवेट, रिज़र्व्ड, या non-routable एड्रेस है।
bogon_typestring|nullbogon होने पर reason कोड: "loopback", "private", "link-local", "multicast", "reserved", "documentation", "unspecified"।
asninteger|nullAutonomous System Number जो इस IP को अनाउंस करता है।
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|nullउस देश का ISO 3166-1 alpha-2 कंट्री कोड (जैसे "US") जहाँ IP स्थित है, शहर और अक्षांश/देशांतर वाले जियोलोकेशन डेटा से ही। जियोलोकेशन मिलान न होने पर ASN का पंजीकरण देश (asn_country_code) उपयोग होता है; देश का नाम, ध्वज, मुद्रा आदि भी इसी से निकाले जाते हैं।
country_namestring|nullदेश का पूरा अंग्रेज़ी नाम (जैसे "United States")।
country_flagstring|nullदेश का इमोजी फ़्लैग (जैसे "🇺🇸")।
is_eubooleantrue अगर देश एक EU सदस्य राष्ट्र है (27 सदस्य)।
citystring|nullशहर का नाम। self-lookup पर, और उन explicit लुकअप पर भरा जाता है जहां दोनों merged जियो सोर्स (IP2Location या MaxMind) में से किसी एक में मैच मिलता है — geo_precision चेक करें।
statestring|nullप्रशासनिक region/subdivision। city जैसी ही उपलब्धता।
postal_codestring|nullPostal/ZIP कोड। self-lookup पर, और उन explicit लुकअप पर भरा जाता है जहां IP2Location (प्रिफ़र्ड) या MaxMind में मैच मिलता है — city जैसी ही उपलब्धता।
latitudenumber|nullदशमलव latitude। city जैसी ही उपलब्धता।
longitudenumber|nullदशमलव longitude। city जैसी ही उपलब्धता।
timezonestring|nullTimezone — city जैसी ही उपलब्धता। self-lookup पर एक IANA आइडेंटिफ़ायर (जैसे "America/New_York")। explicit लुकअप पर फ़ॉर्मैट इस पर निर्भर करता है कि कौन-सा सोर्स मैच हुआ: IP2Location से "-08:00" जैसी UTC-offset स्ट्रिंग, या MaxMind से एक IANA नाम।
geo_precisionstringलोकेशन डेटा कितना सटीक है: "city", "country" (city-level लुकअप में कोई मैच नहीं मिला), या "none"।
geo_country_codestring|nullवह देश जहाँ IP स्थित है, जियोलोकेशन डेटा के अनुसार (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|null1 USD के बदले लोकल करेंसी की यूनिट्स, 154 करेंसी कवर करने वाली एक डेली-सिंक्ड reference-rate फ़ीड से। उस सेट से बाहर की करेंसी के लिए null।
calling_codestring|null+ प्रीफ़िक्स समेत कंट्री कॉलिंग कोड (जैसे "+1")।
languagesstring[]देश की आधिकारिक/मान्यता प्राप्त भाषाएं, अंग्रेज़ी में।
tldstring[]कंट्री-कोड टॉप-लेवल डोमेन, जैसे [".us"]।
capitalstring|nullराजधानी शहर का नाम।
bordersstring[]सीमावर्ती देशों के ISO alpha-2 कोड।
is_datacenterbooleantrue अगर IP किसी hosting या cloud प्रोवाइडर का है।
is_mobilebooleantrue अगर IP किसी mobile carrier के नाम रजिस्टर्ड है।
is_residentialbooleantrue अगर IP को residential broadband के तौर पर क्लासिफ़ाइड किया गया है।
connection_typestring"mobile", "datacenter", या "unknown" — is_mobile/is_datacenter जैसी ही क्लासिफ़िकेशन से निकाला गया। जानबूझकर residential-बनाम-corporate का फ़र्क़ करने की कोशिश नहीं करता: यह सिर्फ़ ASN org-name टेक्स्ट से भरोसेमंद तरीक़े से निकाला नहीं जा सकता, इसलिए जिस ASN को mobile या datacenter के तौर पर कॉन्फ़िडेंटली क्लासिफ़ाई नहीं किया जा सका वह अंदाज़ा लगाने के बजाय "unknown" ही रहता है।
is_botbooleantrue अगर IP किसी जाने-पहचाने बॉट इन्फ़्रास्ट्रक्चर से जुड़ा है।
is_proxybooleantrue अगर IP एक जाना-पहचाना proxy exit पॉइंट है।
is_vpnbooleantrue अगर IP थ्रेट फ़ीड की किसी जानी-पहचानी VPN सर्वर रेंज में आता है।
is_torbooleantrue अगर IP एक कन्फ़र्म्ड Tor exit नोड है।
is_abuserbooleantrue अगर IP कई abuse intel फ़ीड्स द्वारा फ़्लैग की गई किसी नेटवर्क रेंज में आता है।
abuse_scoreinteger|nullजब is_abuser true हो तो cross-feed corroboration से मिला 1-10 severity स्कोर। बाकी स्थितियों में null।
risk_tierstring|null"critical" (8-10), "high" (5-7), या "medium" (3-4) — abuse_score से निकाला गया। अगर फ़्लैग नहीं किया गया तो null।
threat_typestring|nullजब is_tor/is_vpn/is_abuser ओवरलैप करें तो सबसे actionable मैच हुई कैटेगरी: "tor_exit" > "abuser" > "vpn"। अगर कोई भी मैच न हो तो null।
flagsobjectis_* फ़ील्ड्स को मिरर करने वाला backward-compatible ऑब्जेक्ट। Keys: hosting, mobile, residential, bot, blacklisted, vpn, tor, abuser।
meta.data_versionstringलुकअप के लिए इस्तेमाल की गई डेटासेट डेट (YYYY-MM-DD)। self-lookup के लिए "cf-edge"। प्राइवेट रेंज के लिए "bogon"।
meta.cachedbooleantrue अगर रिस्पॉन्स कैश लेयर से सर्व किया गया।
meta.langstringइस रिस्पॉन्स में वास्तव में इस्तेमाल की गई भाषा — अगर ?lang= दिया गया हो तो उससे मेल खाती है, वरना Accept-Language से रिज़ॉल्व की गई वैल्यू, या "en"।
meta.lang_source"param"|"header"|"default"lang कैसे तय हुआ: "param" (?lang= पास किया गया था), "header" (Accept-Language से रिज़ॉल्व किया गया), या "default" (दोनों में से कोई मौजूद नहीं था)।

आउटपुट फ़ॉर्मैट

IP, ASN, और country लुकअप सभी ?format= सपोर्ट करते हैं।

FormatContent-TypeUsage
jsonapplication/jsonडिफ़ॉल्ट। पूरा स्ट्रक्चर्ड रिस्पॉन्स।
csvtext/csvफ़्लैट key,value पेयर। Nested ऑब्जेक्ट्स छोड़ दिए जाते हैं।
texttext/plainkey: value लाइनें। प्रति लाइन एक फ़ील्ड।
xmlapplication/xmlपूरा nested स्ट्रक्चर, arrays टैग को दोहराते हैं।
yamlapplication/x-yamlपूरा nested स्ट्रक्चर।
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"

लोकलाइज़ेशन

country_name और continent को लोकलाइज़ करने के लिए /v1/ip, /v1/asn/:asn, या /v1/country/:code पर ?lang= पास करें। बाकी सब कुछ (ASN org नाम, शहरों के नाम, करेंसी कोड) अपने ओरिजिनल फ़ॉर्म में रहता है — वे आइडेंटिफ़ायर और proper nouns हैं, 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 हेडर भेजें — वही endpoints इसे भी पढ़ते हैं, तो सिर्फ़ curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 से बिना किसी query string के रिस्पॉन्स लोकलाइज़ हो जाता है। अगर दोनों मौजूद हों, तो explicit ?lang= हमेशा प्राथमिकता लेता है। ध्यान दें: शेल का LANG/LC_ALL एनवायरनमेंट वेरिएबल (जैसे LANG=es_ES.UTF-8 curl ...) सिर्फ़ curl का अपना locale सेट करता है — 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" }

जैसे ही आप कोई non-English lang सेट करते हैं, पूरा key+value लोकलाइज़ेशन डिफ़ॉल्ट बिहेवियर बन जाता है — नेस्टेड flags और meta keys सहित हर फ़ील्ड टारगेट भाषा में rename होकर वापस आती है, और तय एनम वैल्यूज़ (risk_tier, threat_type, connection_type, geo_precision, bogon_type, asn_type) का भी अनुवाद होता है। पुराना English-keys फ़ॉर्मेट चाहिए? /v1/ip में &localize=0 जोड़ें, वापस opt-out करने के लिए।

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) लागू होती हैं, free टियर पर IP एड्रेस से गिनी जाती हैं या Pro/Enterprise पर की से। अपनी लिमिट पार करने पर एक Retry-After हेडर के साथ HTTP 429 रिटर्न होता है। प्रोडक्शन वर्कलोड के लिए, देखें pricing।

यह हर /v1/* एंडपॉइंट, /mcp सर्वर, और curl ipto.to / curl ipto.to/:ip शॉर्टकट्स पर लागू होता है। GET /ip एकमात्र अपवाद है — बिना किसी लुकअप कॉस्ट के एक सीधा header echo, इसलिए यह किसी भी बजट से कुछ नहीं लेता।

TierRequests / dayAuth
Free1,000कुछ नहीं
Pro100,000API की (header)
EnterpriseUnlimitedAPI की + डेडिकेटेड एंडपॉइंट्स

एरर कोड

StatusMeaning
200OK। रिस्पॉन्स में डेटा शामिल है।
202फ़ीड डेटा सिंक हो रहा है। 45 सेकंड में फिर से कोशिश करें।
400Bad request। अमान्य IP, ASN, या कंट्री कोड।
404ASN या देश डेटासेट में नहीं मिला।
503डेटासेट अभी उपलब्ध नहीं है। शुरुआती ingest चल रहा हो सकता है।