← LiquidityWise

पूल कार्ड और उसका JSON

Ethereum मेननेट

इस साइट की दो चीज़ें दूसरी साइटों के लिए बनी हैं: एक पूल का सुझाया गया दायरा दिखाने वाला कार्ड, जिसे कोई भी पृष्ठ एक फ़्रेम में रख सकता है, और वही आँकड़े JSON में, जिन्हें किसी भी साइट का कोड पढ़ सकता है। दोनों में से किसी के लिए कुंजी या खाते की ज़रूरत नहीं। दोनों का वर्णन यहाँ वैसा ही है जैसा कोड उन्हें देता है, और टेस्ट इस पृष्ठ को उसी कोड से बाँधे रखते हैं: इसमें लिखा हर पैरामीटर वही है जिससे पता पढ़ा जाता है, और हर फ़ील्ड वही है जिससे जवाब भेजे जाने से पहले मिलाया जाता है।

कार्ड

/embed/pool एक छोटा पृष्ठ है जो साइट के फ़्रेमवर्क से नहीं, हाथ से लिखा गया है। इस पर जोड़ी अपने प्रोटोकॉल, शुल्क और नेटवर्क के साथ दिखती है; सुझाया गया दायरा, उस अवधि और चौड़ाई के साथ जिसके लिए वह बना; मौजूदा कीमत; एक पंक्ति कि यह वित्तीय सलाह नहीं है; और यहाँ पूल के पृष्ठ पर लौटने वाला लिंक, जो नए टैब में खुलता है। दायरा हमेशा साइट की डिफ़ॉल्ट सेटिंग से बनता है, 30 दिन और 1σ, चाहे किसी की अपनी सेटिंग कुछ भी हो। जब तक मौजूदा कीमत दायरे से बाहर है, एक नोट जुड़ता है, और एक और नोट उस v4 पूल के लिए जिसका hook स्वैप की लागत बदल सकता है।

इसमें न कोई स्क्रिप्ट है, न कोई फ़ॉर्म, और यह कुछ भी लोड नहीं करता: इसकी अपनी Content-Security-Policy इसकी इनलाइन स्टाइल के सिवा किसी चीज़ की अनुमति नहीं देती। इसके रंग साइट के हैं, हल्के या गहरे, जैसा पाठक का सिस्टम सेट है। यह अपने आसपास का पृष्ठ नहीं देख सकता, और इसे चुनने का कोई पैरामीटर नहीं है।

इसे 360 पिक्सेल चौड़ा और 220 पिक्सेल ऊँचा फ़्रेम दें, या ऐसे पूल के लिए 260 पिक्सेल ऊँचा जिसका hook स्वैप की लागत बदल सकता है, क्योंकि उसके कार्ड में एक पंक्ति ज़्यादा होती है। हर पूल का पृष्ठ "इस पूल को अपनी साइट पर लगाएँ" के नीचे ठीक यही देता है, उस पूल के लिए सही ऊँचाई के साथ, और दिया गया फ़्रेम उस कॉलम से कभी चौड़ा नहीं होता जिसमें उसे चिपकाया जाए।

यह इस साइट का अकेला पृष्ठ है जिसे कोई दूसरी साइट फ़्रेम में रख सकती है। हर दूसरा पता, यह पृष्ठ भी, X-Frame-Options: DENY और frame-ancestors 'none' के साथ भेजा जाता है; कार्ड पहले वाले के बिना और frame-ancestors * के साथ भेजा जाता है।

Ethereum पर 0.3% वाले USDC / WETH पूल का फ़्रेम, जैसा उस पूल का पृष्ठ उसे देता है:
<iframe src="https://liquiditywise.com/embed/pool?address=0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8" title="USDC / WETH on LiquidityWise" width="360" height="220" style="border:0;max-width:100%" loading="lazy"></iframe>
आँकड़ों वाला कार्ड किन हेडरों के साथ भेजा जाता है, उन हेडरों के अलावा जो हर पृष्ठ पर होते हैं:
Content-Type: text/html; charset=utf-8
Cache-Control: public, max-age=300, s-maxage=300
Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; base-uri 'none'; form-action 'none'; frame-ancestors *

पैरामीटर

कार्ड और JSON एक जैसे पैरामीटर लेते हैं, और पूल का नाम वैसे ही लेते हैं जैसे साइट के अपने पृष्ठ: v3 पूल उसके address से, जैसे /pool पर, और v4 पूल उसके id से, जैसे /v4 पर। दोनों में से ठीक एक चाहिए, और कौन-सा आया, यही बताता है कि प्रोटोकॉल कौन-सा है। दो बार दिया गया पूल या नेटवर्क अस्वीकार होता है, उसके किसी एक मान को चुना नहीं जाता, और यहाँ न लिखा कोई भी पैरामीटर अनदेखा किया जाता है।

भाषा केवल पते से आती है, पाठक के ब्राउज़र या किसी कुकी से कभी नहीं: कार्ड लगाने वाली साइट उसे चुनती है, और एक ही पता उसे लोड करने वाले हर व्यक्ति के लिए एक ही जवाब है, इसी से कैश उसे रख पाता है। कार्ड साइट की सभी 10 भाषाओं में लिखा है, और अरबी में दाएँ से बाएँ पढ़ा जाता है।

address
स्वीकार करता है v3 पूल के कॉन्ट्रैक्ट का पता: 0x और 40 हेक्साडेसिमल अंक, बड़े या छोटे अक्षरों में।
वरना इसके अलावा कुछ भी किसी पूल का नाम नहीं लेता, और न ही ऐसे नेटवर्क पर v3 पूल जहाँ v3 नहीं पढ़ा जाता (Unichain): 400, और कुछ नहीं पढ़ा जाता।
id
स्वीकार करता है v4 पूल का id, उसकी कुंजी का हैश: 0x और 64 हेक्साडेसिमल अंक, बड़े या छोटे अक्षरों में।
वरना इसके अलावा कुछ भी किसी पूल का नाम नहीं लेता: 400, और कुछ नहीं पढ़ा जाता। address के साथ दिया गया id भी नहीं।
chain
स्वीकार करता है नीचे की तालिका से किसी नेटवर्क का छोटा नाम। न दिया जाए, तो नेटवर्क Ethereum है।
वरना ऐसा नाम जिसे साइट नहीं पढ़ती, अस्वीकार होता है, कभी Ethereum नहीं माना जाता: 400।
lang
स्वीकार करता है नीचे की सूची से एक भाषा कोड, कार्ड के शब्दों और JSON के disclaimer के लिए; आँकड़े हर भाषा में एक ही हैं। न दिया जाए, तो अंग्रेज़ी।
वरना कोई और मान, या दो बार दिया गया lang, अंग्रेज़ी देता है। यह कभी अस्वीकार नहीं होता।

नेटवर्क, उस छोटे नाम से जो chain लेता है:

chainनेटवर्कv3 पूलv4 पूल
ethereumEthereumपढ़े जाते हैंपढ़े जाते हैं
baseBaseपढ़े जाते हैंपढ़े जाते हैं
arbitrumArbitrum Oneपढ़े जाते हैंपढ़े जाते हैं
unichainUnichainनहीं पढ़े जातेपढ़े जाते हैं
optimismOP Mainnetपढ़े जाते हैंपढ़े जाते हैं
polygonPolygonपढ़े जाते हैंपढ़े जाते हैं

भाषाएँ, उस कोड से जो lang लेता है:

  • enEnglish
  • trTürkçe
  • deDeutsch
  • esEspañol
  • arالعربية
  • hiहिन्दी
  • zh中文
  • ruРусский
  • ptPortuguês
  • zh-Hant繁體中文

JSON

GET /api/embed/pool, उन्हीं पैरामीटरों के साथ, कार्ड के आँकड़े JSON में देता है, उस साइट के लिए जो उन्हें ख़ुद बनाना पसंद करे: वही रीडिंग, उतनी ही देर रखी हुई। हर आँकड़ा एक JSON संख्या है, और हर कीमत उसी दिशा में लिखी है जिसमें पूल का पृष्ठ उसे लिखता है: एक price.base कितने price.quote के बराबर है।

भेजे जाने से पहले जवाब को उसके स्कीमा से मिलाया जाता है, और जो जवाब उस पर खरा नहीं उतरता, वह भेजा नहीं जाता: उसके बदले पूल को न पढ़ा जा सकने वाला बताया जाता है। इसलिए 200 स्टेटस वाले जवाब में हमेशा ठीक नीचे वाले फ़ील्ड होते हैं, न ज़्यादा न कम।

किसी भी साइट की स्क्रिप्ट इसे पढ़ सकती है। हर जवाब, त्रुटियाँ और अस्वीकृतियाँ भी, Access-Control-Allow-Origin: * के साथ भेजा जाता है। यह कोई कुकी नहीं रखता और किसी क्रेडेंशियल की ज़रूरत नहीं। सादे GET को preflight की ज़रूरत नहीं होती, और किसी preflight का जवाब नहीं दिया जाता, इसलिए अनुरोध अपने हेडर जोड़े बिना भेजें।

आँकड़ों वाला जवाब किन हेडरों के साथ भेजा जाता है, उन हेडरों के अलावा जो हर पृष्ठ पर होते हैं:
Content-Type: application/json; charset=utf-8
Cache-Control: public, max-age=300, s-maxage=300
Access-Control-Allow-Origin: *

200 जवाब का हर फ़ील्ड, उसके JSON प्रकार के साथ:

protocol"v3" | "v4"
address से नामित पूल के लिए v3, id से नामित पूल के लिए v4।
chain.idinteger > 0
नेटवर्क का chain id।
chain.slugstring
नेटवर्क का छोटा नाम, जैसा chain उसे लेता है।
chain.namestring
नेटवर्क का नाम।
poolstring
पूल का पता (v3) या id (v4), छोटे अक्षरों में।
pair.token0string
पूल के पहले टोकन का प्रतीक, जैसा उसका कॉन्ट्रैक्ट बताता है: यह ऐसे कॉन्ट्रैक्ट का पाठ है जिसे कोई भी तैनात कर सकता है, इसलिए पृष्ठ में रखने से पहले उसे escape करें।
pair.token1string
दूसरे टोकन का प्रतीक, उसी तरह।
lpFeePpminteger ≥ 0 | null
स्वैप पर पूल तरलता देने वालों को जो शुल्क देता है, दस लाखवें हिस्सों में: 3000 यानी 0.3%। जब v4 पूल का hook शुल्क हर स्वैप पर अलग तय करता है, तब null।
price.basestring
वह टोकन जिसकी एक इकाई के लिए हर कीमत दी गई है।
price.quotestring
वह टोकन जिसमें हर कीमत गिनी गई है।
price.currentnumber > 0
पढ़े जाने के समय पूल की कीमत।
range.lowernumber > 0
सुझाए गए दायरे का निचला किनारा, कीमत के रूप में।
range.uppernumber > 0
उसका ऊपरी किनारा।
range.currentInRangeboolean
मौजूदा कीमत दायरे के भीतर है या नहीं। न हो, तो कार्ड एक नोट जोड़ता है।
range.lowerTruncatedboolean
true जब पूल की tick ग्रिड बैंड के निचले किनारे तक नहीं पहुँच पाती, इसलिए दायरा उससे पहले रुक जाता है।
range.upperTruncatedboolean
वही, ऊपरी किनारे के लिए।
parameters.horizonDaysinteger > 0
वह अवधि जिसके लिए दायरा बना, दिनों में: हमेशा डिफ़ॉल्ट, 30।
parameters.standardDeviationMultipliernumber > 0
वह चौड़ाई जिसके लिए वह बना, मानक विचलनों में: हमेशा डिफ़ॉल्ट, 1σ।
hookMayAlterSwapsboolean
उस v4 पूल के लिए true जिसका hook स्वैप की लागत बदल सकता है, hook के पते से पढ़ा गया; v3 के लिए, बिना hook वाले v4 पूल के लिए, और ऐसे hook के लिए जिसकी अनुमतियाँ स्वैप को नहीं छूतीं, false। जहाँ true है, कार्ड पर एक नोट होता है।
analysedAtstring (ISO 8601)
कीमत कब पढ़ी गई, UTC में, मिलीसेकंड तक — यह नहीं कि यह जवाब कब भेजा गया, जो कुछ मिनट बाद हो सकता है।
poolUrlstring
इस साइट पर पूल का पृष्ठ, उसी अवधि और चौड़ाई के साथ।
disclaimerstring
आँकड़े क्या हैं और क्या नहीं, उस भाषा में जो lang बताता है।
उदाहरणों वाले पूल के लिए एक जवाब। इसके आँकड़े एक उदाहरण हैं: पूल से पढ़े नहीं गए, बल्कि साइट के अपने कोड ने कीमतों के एक नमूना महीने से निकाले हैं, और एक टेस्ट जाँचता है कि उस महीने के लिए कोड अब भी ठीक यही जवाब देता है:
{
  "protocol": "v3",
  "chain": {
    "id": 1,
    "slug": "ethereum",
    "name": "Ethereum"
  },
  "pool": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
  "pair": {
    "token0": "USDC",
    "token1": "WETH"
  },
  "lpFeePpm": 3000,
  "price": {
    "base": "WETH",
    "quote": "USDC",
    "current": 3000
  },
  "range": {
    "lower": 2824.2704157479307,
    "upper": 3184.336896959513,
    "currentInRange": true,
    "lowerTruncated": false,
    "upperTruncated": false
  },
  "parameters": {
    "horizonDays": 30,
    "standardDeviationMultiplier": 1
  },
  "hookMayAlterSwaps": false,
  "analysedAt": "2026-08-21T09:15:00.000Z",
  "poolUrl": "https://liquiditywise.com/pool?address=0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8&days=30&sigma=1",
  "disclaimer": "For information only, not financial advice. The range is worked out from how far this pool's price moved over the last 30 days: it is not a forecast and not a recommendation."
}

स्टेटस कोड और त्रुटियाँ

कार्ड और JSON एक जैसे स्टेटस कोड से जवाब देते हैं। दोनों में से कोई कभी साइट के अपने त्रुटि पृष्ठ से या भीतर क्या बिगड़ा, उससे जवाब नहीं देता: कार्ड एक वाक्य और लौटने का अपना लिंक दिखाता है, और JSON एक error के साथ जवाब देता है जिसे स्क्रिप्ट जाँच सके, और disclaimer के साथ — सिवाय अस्वीकृति के, जिसमें उसकी जगह इंतज़ार का समय होता है।

JSON का जवाब, और उसे कितनी देर रखा जा सकता है:

200

आँकड़े: उनके साथ कार्ड, या ऊपर वाला JSON।

Cache-Control: public, max-age=300, s-maxage=300

400 not-a-pool

पता ऐसे किसी पूल का नाम नहीं लेता जिसे साइट पढ़ती है: न address न id, या दोनों, या कोई एक बिगड़ा हुआ या दो बार दिया गया, ऐसा नेटवर्क जिसे साइट नहीं पढ़ती, या ऐसी जगह v3 पूल जहाँ केवल v4 पढ़ा जाता है (Unichain)। कुछ नहीं पढ़ा गया, और दोबारा पूछने से जवाब नहीं बदलेगा।

Cache-Control: public, max-age=3600, s-maxage=3600

{
  "error": "not-a-pool",
  "disclaimer": "For information only, not financial advice. The range is worked out from how far this pool's price moved over the last 30 days: it is not a forecast and not a recommendation."
}

503 unreadable

सही ढंग से नामित पूल जो अभी पढ़ा नहीं जा सका: कोई स्रोत समय पर जवाब नहीं दे सका, या उस नेटवर्क पर ऐसा कोई पूल नहीं है। poolUrl फिर भी उसके पृष्ठ तक ले जाता है। एक मिनट बाद दोबारा पूछने पर वह मिल सकता है।

Cache-Control: public, max-age=60, s-maxage=60

{
  "error": "unreadable",
  "poolUrl": "https://liquiditywise.com/pool?address=0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8&days=30&sigma=1",
  "disclaimer": "For information only, not financial advice. The range is worked out from how far this pool's price moved over the last 30 days: it is not a forecast and not a recommendation."
}

429 rate-limited

एक ही क्लाइंट से बहुत अधिक अनुरोध: नीचे अनुरोध सीमा देखें। Retry-After और retryAfterSeconds दोनों बताते हैं कि कितने सेकंड रुकना है। कार्ड अपनी भाषा में यही कहने वाले एक छोटे पृष्ठ से जवाब देता है।

Cache-Control: no-store
Retry-After: 42

{
  "error": "rate-limited",
  "retryAfterSeconds": 42
}

कैशिंग और अनुरोध सीमा

हर जवाब बताता है कि उसे कितनी देर रखा जा सकता है, ब्राउज़र में भी और साझा कैश में भी: आँकड़े 300 सेकंड; न पढ़ा जा सका पूल 60 सेकंड, ताकि लौट आया पूल ज़्यादा देर तक न पढ़ा जा सकने वाला न दिखे; किसी पूल का नाम न लेने वाला पता 3,600 सेकंड, क्योंकि बाद का कोई पल इसे नहीं बदलेगा। अस्वीकृति कभी नहीं रखी जाती। हर जवाब उसी पते से पूछने वाले हर व्यक्ति के लिए एक जैसा है, और यही उसे रखना सुरक्षित बनाता है।

इसके पीछे सर्वर हर पूल के आँकड़े उन्हें पढ़ने के पल से 300 सेकंड तक रखता है, कार्ड और JSON दोनों के लिए, हर भाषा में: किसी एक पूल का हर कार्ड, जिस भी पृष्ठ पर लगा हो, अवधि ख़त्म होने तक एक ही रीडिंग है। जो पूल पढ़ा न जा सका, वह रखा नहीं जाता, और अगले अनुरोध पर फिर पूछा जाता है। इसलिए जवाब में कीमत जवाब से पुरानी हो सकती है: analysedAt बताता है कि वह कब पढ़ी गई।

जो अनुरोध सही ढंग से लिखे पूल का नाम लेता है, वह उस पूल को पढ़ता है, इसलिए वह उसी कोटे में गिना जाता है जिसमें साइट के अपने पूल पृष्ठ: हर क्लाइंट के लिए 60 सेकंड की खिड़की में 10 अनुरोध, और यह खिड़की क्लाइंट के पहले अनुरोध से शुरू होती है; क्लाइंट वह IP पता है जिससे अनुरोध साइट तक पहुँचता है। सीमा पार होने पर जवाब Retry-After के साथ 429 है। साइट तक पहुँचने वाला ऐसा हर अनुरोध गिना जाता है, सर्वर के रखे आँकड़ों से जवाब पाने वाला भी; किसी पूल का नाम न लेने वाला अनुरोध नहीं गिना जाता।

ब्राउज़र से, कार्ड या fetch उस पाठक के खाते में गिना जाता है जो उसे लोड करता है, उस साइट के नहीं जिस पर वह लगा है — इसलिए 10 से ज़्यादा कार्ड लगाने वाले पृष्ठ पर, उससे ऊपर के कार्ड हर पाठक के लिए अस्वीकार होंगे। सर्वर से, आपके सारे अनुरोध उस सर्वर का एक ही कोटा बाँटते हैं: हर जवाब को उतने 300 सेकंड रखें जितने वह अनुमति देता है; इसकी कीमत कम है, क्योंकि उस समय के ज़्यादातर हिस्से में सर्वर वैसे भी वही रीडिंग देता जो आपके पास है। सीमा पूल पढ़ने की लागत कम रखने के लिए है, और यहाँ कुछ भी वादा नहीं करता कि वह ऐसी ही रहेगी।

उदाहरण

आँकड़े, टर्मिनल से:
curl -s "https://liquiditywise.com/api/embed/pool?address=0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8"
किसी पृष्ठ की अपनी स्क्रिप्ट से, या सर्वर से, हर जवाब को सँभालते हुए:
const response = await fetch(
  "https://liquiditywise.com/api/embed/pool?address=0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
);
const body = await response.json();

if (response.ok) {
  // The range, in body.price.quote per one body.price.base
  console.log(body.range.lower, body.range.upper, body.price.quote, body.price.base);
  console.log(body.disclaimer);
} else if (response.status === 429) {
  console.log(`Asked too often: wait ${body.retryAfterSeconds} seconds`);
} else {
  console.log(body.error); // "not-a-pool" or "unreadable"
}
कार्ड, किसी पृष्ठ पर:
<iframe src="https://liquiditywise.com/embed/pool?address=0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8" title="USDC / WETH on LiquidityWise" width="360" height="220" style="border:0;max-width:100%" loading="lazy"></iframe>

एक क्लिक पूरा ब्लॉक चुन लेता है, कॉपी करने के लिए तैयार।

शर्तें, सादे शब्दों में

आँकड़े माप हैं, सलाह नहीं। दायरा इस बात से निकाला जाता है कि पिछले 30 दिनों में पूल की कीमत कितनी हिली: यह कोई पूर्वानुमान नहीं है और कोई सिफ़ारिश भी नहीं, और हर जवाब यह ख़ुद कहता है, कार्ड अपने सामने और JSON disclaimer में। हर आँकड़ा कैसे बनता है और क्या छोड़ देता है, यह "यह कैसे काम करता है" पृष्ठ पर है।

कार्ड पर लौटने का उसका अपना लिंक है, "LiquidityWise द्वारा विश्लेषित"। JSON में श्रेय देने का कोई फ़ील्ड नहीं है, और कोड में कुछ भी इसे नहीं माँगता; उसमें जो है वह है poolUrl, यहाँ पूल का पृष्ठ, और disclaimer। आँकड़ों के पास दिखाए जाएँ, तो ये दोनों पाठक को बताते हैं कि आँकड़े कहाँ से आए और क्या हैं।

न कोई वर्ज़न नंबर है, न कुंजी, और न यह वादा कि जवाब का आकार ऐसा ही रहेगा या साइट किसी भी पल उपलब्ध होगी। जो पक्का है, वह इससे सीमित है: भेजने से पहले जवाब को उसके स्कीमा से मिलाया जाता है, और टेस्ट इस पृष्ठ को उस स्कीमा और पता पढ़ने वाले कोड से बाँधे रखते हैं, इसलिए यह वही बताता है जो अभी दिया जाता है। दोनों में कोई भी बदलाव कोड के सार्वजनिक इतिहास में दिखता है।

कोड ओपन सोर्स है, MIT लाइसेंस के तहत।

यह कैसे काम करता हैकोड, GitHub परMIT लाइसेंस