वेब खोज (Keenable)
इंटरनेट पर खोज और पन्नों को पढ़ना — सीधे आपके कोड से, उसी कुंजी के साथ जो आप मॉडलों के लिए इस्तेमाल करते हैं। दो तरीके हैं: /v1/chat/completions के ज़रिए एक साधारण मॉडल की तरह, या अलग endpoints के ज़रिए जो शुद्ध JSON लौटाते हैं।
कीमत
हर अनुरोध पर $0.005 — यानी 1000 अनुरोधों पर $5।
शुल्क प्रति कॉल है: एक कॉल यानी एक अनुरोध, चाहे कितने भी परिणाम लौटें। 50 स्रोत खोजना उतना ही महँगा है जितना एक स्रोत खोजना।
असफल अनुरोधों पर शुल्क नहीं लगता — न खोज की गड़बड़ी पर, न ग़लत मापदंडों पर।
| क्या | कितना गिना जाता है |
|---|---|
| 1 परिणाम लौटाने वाली खोज | 1 अनुरोध |
| 50 परिणाम लौटाने वाली खोज | 1 अनुरोध |
| एक पन्ना पढ़ना | 1 अनुरोध |
| किसी भी तरह की त्रुटि | 0 |
तरीका 1 — मॉडल की तरह
Cursor, Claude Code, OpenCode और किसी भी OpenAI क्लाइंट में बिना एक भी बदलाव के चलता है: बस मॉडल चुन लीजिए।
मॉडल:
| मॉडल | क्या करता है |
|---|---|
keenable/search | इंटरनेट पर खोजता है और अंशों सहित स्रोतों की सूची लौटाता है |
keenable/read | पन्ना पढ़कर उसका पाठ markdown में लौटाता है |
खोज
curl https://nordrouter.com/v1/chat/completions \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "keenable/search",
"messages": [{"role": "user", "content": "आज बिटकॉइन का भाव"}]
}'जवाब में एक सामान्य असिस्टेंट संदेश आएगा जिसमें स्रोतों की सूची होगी: शीर्षक, प्रकाशन तिथि, पूरा पता और हर एक का अंश।
पन्ना पढ़ना
संदेश का पहला शब्द पता है। उसके बाद आप जोड़ सकते हैं कि उस पन्ने पर आपको ठीक क्या चाहिए।
curl https://nordrouter.com/v1/chat/completions \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "keenable/read",
"messages": [{"role": "user", "content": "https://hi.wikipedia.org/wiki/टोक्यो जनसंख्या"}]
}'निर्देश के बिना पूरा पन्ना markdown में मिलेगा। निर्देश के साथ केवल वही जो आपने माँगा: यह तेज़ भी है और जब परिणाम आगे किसी मॉडल में जाता है तो आपकी ओर के टोकन में साफ़ तौर पर सस्ता भी।
निर्देश किस काम आता है
विकिपीडिया का एक लेख दसियों हज़ार अक्षरों का होता है। अगर आपको सिर्फ़ एक आँकड़ा चाहिए, तो निर्देश समय भी बचाता है और अगले क़दम के टोकन भी।
Python
from openai import OpenAI
client = OpenAI(
api_key="आपकी-कुंजी",
base_url="https://nordrouter.com/v1",
)
found = client.chat.completions.create(
model="keenable/search",
messages=[{"role": "user", "content": "इस हफ़्ते की AI ख़बरें"}],
)
print(found.choices[0].message.content)तरीका 2 — अलग endpoints
अगर आपको बहते पाठ के बजाय फ़ील्ड, तिथियों और छननी वाले परिणाम चाहिए, तो JSON लीजिए।
POST /v1/search
curl https://nordrouter.com/v1/search \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "न्यूरल नेटवर्क समाचार",
"max_results": 5,
"published_after": "7d"
}'मापदंड:
| मापदंड | प्रकार | तयशुदा | क्या करता है |
|---|---|---|---|
query | पाठ | ज़रूरी | क्या खोजना है |
site | पाठ | — | केवल इसी डोमेन में खोजें, जैसे ndtv.com |
max_results | संख्या | 10 | कितने परिणाम, 1 से 50 तक |
snippet_max_chars | संख्या | — | अंश की लंबाई, 180 से 10000 अक्षर |
published_after | पाठ | — | इस क्षण के बाद प्रकाशित सामग्री |
published_before | पाठ | — | इससे पहले प्रकाशित |
acquired_after | पाठ | — | जो अनुक्रमणिका में बाद में आए |
acquired_before | पाठ | — | जो अनुक्रमणिका में पहले आए |
query_time | पाठ | — | अनुक्रमणिका उस क्षण जैसी थी, वैसी में खोजें |
तिथियाँ तीन रूपों में स्वीकार होती हैं: 2026-08-01, पूरा ISO 8601 टाइमस्टैम्प, या सापेक्ष रूप में — 30min, 12h, 7d, 3mo, 1y।
प्रकाशन और अनुक्रमणिका एक बात नहीं
published_* सामग्री की अपनी तिथि से छानता है, acquired_* उस तिथि से जब पन्ना अनुक्रमणिका में आया। यह अंतर मायने रखता है: पन्ना दोबारा लिखा जा सकता है और प्रकाशन तिथि वैसी ही रह सकती है। अगर आपको जानना है कि «एक दिन में जाल पर क्या नया आया», तो acquired_after लीजिए।
उत्तर:
{
"query": "न्यूरल नेटवर्क समाचार",
"count": 5,
"results": [
{
"title": "लेख का शीर्षक",
"url": "https://example.com/article",
"description": "संक्षिप्त विवरण",
"snippet": "पन्ने के पाठ से एक अंश…",
"published_at": "2026-08-25T10:30:00Z",
"acquired_at": "2026-08-25T11:02:00Z"
}
]
}GET /v1/fetch
curl -G https://nordrouter.com/v1/fetch \
-H "Authorization: Bearer $NORDROUTER_KEY" \
--data-urlencode "url=https://example.com/article" \
--data-urlencode "prompt=क़ीमतों की तालिका निकालो"मापदंड:
| मापदंड | प्रकार | तयशुदा | क्या करता है |
|---|---|---|---|
url | पाठ | ज़रूरी | पन्ने का पता |
max_chars | संख्या | 50000 | कितने अक्षर लौटाने हैं |
prompt | पाठ | — | ठीक क्या निकालना है, 2000 अक्षरों तक |
live | true / false | false | अनुक्रमणिका के बजाय सीधे साइट से लें |
उत्तर:
{
"url": "https://example.com/article",
"title": "शीर्षक",
"description": "विवरण",
"author": "लेखक",
"content": "# पन्ने का पाठ markdown में…",
"published_at": 1787777084
}live कब चाहिए
अनुक्रमणिका से पन्ना जल्दी आता है, पर अनुक्रमणिका में सब कुछ नहीं होता। अगर पन्ना ताज़ा है या क्रॉलरों के लिए बंद है, तो live=true लगाइए — तब वह सीधे साइट से पढ़ा जाएगा। दाम वही रहता है।
सीमाएँ
| गति | प्रति कुंजी 2 अनुरोध प्रति सेकंड |
| अंश की लंबाई | 180 से 10000 अक्षर |
| प्रति कॉल परिणाम | 50 तक |
| पढ़ते समय निर्देश की लंबाई | 2000 अक्षरों तक |
गति पार करने पर Retry-After शीर्षक के साथ 429 लौटेगा — एक सेकंड बाद दोहराइए।
त्रुटियाँ
| कोड | अर्थ | क्या करें |
|---|---|---|
400 | query या url नहीं है, या पते में http:// नहीं | अनुरोध सुधारिए |
401 | कुंजी स्वीकार नहीं हुई | Authorization जाँचिए |
402 | शेष राशि ख़त्म | डैशबोर्ड से भरिए |
429 | बहुत बार | एक सेकंड बाद दोहराइए |
502 | खोज ने जवाब नहीं दिया | दोहराइए; कोई शुल्क नहीं लगा |
503 | खोज अस्थायी रूप से अनुपलब्ध | हम देख रहे हैं; कोई शुल्क नहीं लगा |
आम सवाल
क्या ख़ाली नतीजे पर भी शुल्क लगता है? हाँ, अगर खोज चली और उसने ईमानदारी से कहा «कुछ नहीं मिला» — काम तो हुआ। मुफ़्त सिर्फ़ त्रुटियाँ हैं।
क्या स्ट्रीमिंग हो सकती है? नहीं, और ज़रूरत भी नहीं: नतीजे एक ही बार में, सेकंड के अंश में आ जाते हैं।
क्या टोकन गिने जाते हैं? दाम प्रति कॉल है, टोकन का उस पर असर नहीं। फिर भी मॉडल के उत्तर में वे दिखाए जाते हैं ताकि क्लाइंट लाइब्रेरियाँ उसे ख़ाली न समझें।
search/… मॉडलों से क्या फ़र्क़ है? वे पहले खोजते हैं, फिर मिली सामग्री पर भाषा मॉडल से उत्तर देते हैं — आप दो कामों के पैसे देते हैं। यहाँ आपको कच्चे नतीजे मिलते हैं और उनका क्या करना है, यह आप ख़ुद तय करते हैं।