# password.es का API अब जवाब देता है: इसे कैसे इस्तेमाल करें

> बिना कुंजी और बिना रजिस्ट्रेशन एक कॉल, जो पासवर्ड और वही आँकड़े लौटाती है जो साइट पर दिखते हैं: बिट, तोड़ने का समय और स्तर। साथ में वह भी जो यह अभी नहीं करता, और इसे बुलाना हमेशा अच्छा विचार क्यों नहीं है।

2026-08-31 · David Carrero · password.es
Original: https://password.es/hi/blog/password-api-kaise-istemal-karein/

---

यह ब्लॉग महीनों से एक ही बात दोहरा रहा है: [आपका पासवर्ड ब्राउज़र से बाहर नहीं
जाना चाहिए](/hi/blog/hum-aapka-password-kahin-nahi-bhejte/)।
[जनरेटर](/hi/) यादृच्छिकता आपकी अपनी मशीन पर `crypto.getRandomValues()` से लेता
है, और [चेकर](/hi/checker/) आप जो टाइप करते हैं उसे कहीं भेजे बिना ही जाँचता है।

और आज हम एक API प्रकाशित कर रहे हैं जो पासवर्ड सर्वर पर बनाता है।

**विरोधाभास साफ़ है और हम इसे छिपाएँगे नहीं**: API का हर जवाब ठीक यही कहने वाली
एक चेतावनी लेकर आता है। लेकिन ऐसी जगहें हैं जहाँ ब्राउज़र होता ही नहीं — सौ खाते
बनाने वाली एक स्क्रिप्ट, अस्थायी क्रेडेंशियल जारी करने वाला एक सर्वर, एक असिस्टेंट
जिससे कोई पासवर्ड माँगता है और वह गढ़ देता है — और वहाँ विकल्प «ब्राउज़र» नहीं है:
वहाँ विकल्प गलत चुना हुआ `random()` है या हाथ से टाइप की गई एक स्ट्रिंग। यह उसी
के लिए है।

## पूरी कॉल

कोई कुंजी नहीं, कोई रजिस्ट्रेशन नहीं, कोई हेडर नहीं। बस इतना ही:

`curl -X POST https://api.password.es/v1/generate`

यह 16 अक्षरों का एक पासवर्ड और उसका विश्लेषण लौटाता है। यह पैराग्राफ़ लिखते समय
चलाया गया: `x*7$9,BUy9PPvOI?`, 89 अक्षरों की वर्णमाला से लिया गया, **103.6 बिट**
एन्ट्रॉपी और तोड़ने का समय 2.5 × 10¹¹ साल। स्तर 4 में से 4।

इनमें से कोई आँकड़ा नया नहीं है। ये उसी इंजन से आते हैं जो मुखपृष्ठ का मीटर बनाता
है: [बिट](/hi/blog/entropy-ke-bits-kya-hain/) का वही सूत्र, वही हमला-मॉडल — प्रति
सेकंड 10¹² कोशिशें, ऑफ़लाइन, तेज़ हैश — और चेकर का वही स्तर-पैमाना। अगर साइट और
API एक ही पासवर्ड के लिए अलग आँकड़े दें, तो दोनों में से एक झूठ बोल रहा होगा।

## जवाब में क्या आता है, फ़ील्ड दर फ़ील्ड

जवाब में `passwords` आता है — हमेशा एक ऐरे, चाहे आप एक ही माँगें — और एक
`analysis` ब्लॉक जिसमें `length`, `pool`, `bits`, `log10_guesses`,
`crack_time_log10_seconds`, `crack_time`, `level`, `level_scale` और `ceiling`
होते हैं।

इनमें से दो एक पैराग्राफ़ के हकदार हैं। **`level_scale` बताता है कि स्तर कहाँ से
आया** (आज हमेशा `"time"`), ताकि आगे चलकर साइट और API के बीच कोई फ़र्क़ आए तो वह
आँकड़े मिलाकर अनुमान लगाने के बजाय फ़ील्ड में ही दिख जाए। और **`ceiling` बताता है
कि आँकड़ा सटीक है या ऊपरी सीमा**: `generate` में यह हमेशा `false` होता है, क्योंकि
पासवर्ड सर्वर ने बनाया है और उसे पता है किस वर्णमाला से; साइट के चेकर में यह हमेशा
संभव नहीं, क्योंकि वहाँ पासवर्ड आप लाते हैं।

इसके बाद आता है `notice`, यानी चेतावनी, और एक `_meta` ब्लॉक जिसमें प्लान, लागू की
गई भाषा, सीमाएँ और दस्तावेज़ों का लिंक होता है।

## विकल्प

सभी वैकल्पिक, और नाम अंग्रेज़ी में — क्योंकि API जोड़ने वाला फ़ील्ड के नाम ज्यों
के त्यों टाइप करता है: `length` (4–64, डिफ़ॉल्ट 16), `count` (1–20), `lower`,
`upper`, `digits`, `symbols`, `exclude_ambiguous`, `no_repeats` और `lang`।

`curl -X POST https://api.password.es/v1/generate -H 'content-type: application/json' -d '{"length":20,"exclude_ambiguous":true}'`

दो बातें जो दस्तावेज़ बताते हैं और जोड़ने से पहले जान लेना ठीक रहता है।
**`exclude_ambiguous` छह अक्षर हटाता है, सात नहीं**: यह `0 O 1 I l | o` छोड़ता है,
पर खड़ी लकीर शुरू से ही चिह्नों के सेट में नहीं थी, इसलिए वर्णमाला 89 से घटकर 83
होती है, 82 नहीं। इसीलिए जवाब में `pool` 83 लिखा आता है। और **`no_repeats` कोई
पक्की गारंटी नहीं है**: यह दस बार दोबारा कोशिश करता है, ठीक वैसे ही जैसे साइट का
जनरेटर, और 64 अक्षरों पर लगभग 0.1 % बार अगल-बगल की पुनरावृत्ति निकल ही जाती है।
उलटा वादा करने से यह कह देना ज़्यादा उपयोगी है।

## जवाब की भाषा

डिफ़ॉल्ट रूप से यह अंग्रेज़ी में जवाब देता है, क्योंकि बिना कुछ कहे जोड़ने वाला
यही उम्मीद करता है। इसे URL में `?lang=` से, बॉडी में `"lang"` से या
`Accept-Language` हेडर से बदला जाता है, और टकराव हो तो पहला जीतता है। जो भाषा
मौजूद नहीं, वह त्रुटि नहीं है: वह अंग्रेज़ी पर आ जाती है।

यहाँ एक असंतुलन है जिसका अंदाज़ा नहीं लगता, इसीलिए API खुद बता देता है:
**संदेश अंग्रेज़ी और स्पेनिश में हैं; लिंक साइट की अठारहों भाषाओं में**। जर्मन
माँगने पर लिंक जर्मन में मिलेंगे और संदेश तब भी अंग्रेज़ी में। अनुमान लगाने की
ज़रूरत नहीं: `_meta.lang` में `{ "messages", "links" }` आता है, जो बताता है कि
किस हिस्से पर क्या लगा।

## MCP सर्वर

MCP वह प्रोटोकॉल है जिससे कोई असिस्टेंट — Claude, ChatGPT — बाहरी औज़ार इस्तेमाल
करता है। `https://api.password.es/mcp` एक MCP सर्वर है, बिना रजिस्ट्रेशन और बिना
कुंजी के, और यह सिर्फ़ एक औज़ार देता है: `generate_password`, ऊपर वाले ही
पैरामीटरों के साथ।

यही हिस्सा हमारे लिए सबसे अहम है, और तकनीकी वजह से नहीं: **जिस असिस्टेंट के पास
पासवर्ड लाने की कोई जगह नहीं, वह उसे गढ़ लेता है**, और वहाँ से जो निकलता है वह
यादृच्छिक नहीं होता, वह वही होता है जिसे मॉडल पासवर्ड जैसा समझता है। सर्वर जुड़ा
हो तो वह सुधार करना छोड़ देता है और `crypto.getRandomValues()` से बना पासवर्ड
लौटाता है — उसके विश्लेषण के साथ, और उस चेतावनी के साथ जो औज़ार के विवरण में और
हर नतीजे में शामिल है। यही चेतावनी असिस्टेंट अंत में उस व्यक्ति को पढ़कर सुनाता है
जिसने पासवर्ड माँगा था, और इसीलिए वह वहाँ है।

अगर आप दूसरे MCP सर्वरों से आ रहे हैं तो एक बात: **यह स्टेटलेस है।** POST का जवाब
JSON से मिलता है और कोई स्ट्रीम नहीं खुलती, `Mcp-Session-Id` न भेजा जाता है न
अपेक्षित है, नोटिफ़िकेशन का जवाब बिना बॉडी के 202 है, और GET 405 देता है।
2025-06-18 का विनिर्देश यह सब साफ़ तौर पर मंज़ूर करता है, पर जो सत्र और SSE की
उम्मीद रखता है, उसे कोई न बताए तो अंधेरे में डिबग करना पड़ेगा।

## जो यह नहीं करता

**`/v1/check` 501 लौटाता है।** यह चूक नहीं है और न ही आधा बना एंडपॉइंट: यह
जान-बूझकर ऐसा है, और जवाब खुद वजह बताता है। चेकर जैसे ही आँकड़े लौटाने के लिए वही
पैटर्न इंजन चाहिए जो साइट पर चलता है, और वह भेजी गई चीज़ के हिसाब से प्रति अनुरोध
11 ms से 3.6 सेकंड तक CPU लेता है। बिना रजिस्ट्रेशन और बिना कुंजी वाली सेवा में
यह दायरा एक उत्पाद-निर्णय है — लंबाई की सीमा कहाँ रखी जाए — और वह अभी लिया नहीं
गया। तब तक 501 के साथ `checker_url` आता है, जो माँगी गई भाषा में साइट के चेकर की
ओर इशारा करता है, और वह यही काम बिना कुछ भेजे करता है।

खाते भी नहीं हैं, न कुंजियाँ, न प्लान। और चूँकि वे हैं ही नहीं, पूरे API में
रजिस्ट्रेशन का एक भी लिंक नहीं है: सीमा पार होने की त्रुटि में भी नहीं, जहाँ हर
कोई डालता है।

## सीमाएँ

एक ही, और वही सच में लागू होती है: **प्रति IP प्रति मिनट 60 अनुरोध**। इस पन्ने पर
भरोसा करने की ज़रूरत नहीं: यह संख्या हर जवाब के भीतर `_meta.limits.burst` में
आती है। पार करने पर `Retry-After` और `RateLimit-*` हेडरों के साथ 429 मिलता है।

`_meta` में आपको एक `quota` ब्लॉक भी दिखेगा जिसके मान `null` हैं। यह उस दिन के
लिए रखी गई जगह है जब खाते होंगे, और यह जान-बूझकर खाली है: **घोषित की गई पर लागू न
की गई सीमा, कोई सीमा न बताने से बदतर है**, क्योंकि जोड़ने वाला उसका पालन करता है
और ऐसी संख्या के हिसाब से कोड लिखता है जिसे कोई गिन ही नहीं रहा।

## और फिर भी, दो बार सोचिए

पासवर्ड बनाने वाला API दरअसल एक एंटीपैटर्न है: पासवर्ड नेटवर्क से गुज़रता है और
ऐसी मशीन से होकर जाता है जो आपकी नहीं है। हम कुछ नहीं रखते, इससे समस्या का आकार
नहीं बदलता, सिर्फ़ उसमें हमारा हिस्सा बदलता है — और आप जानते ही हैं कि [जिस वादे
को आप जाँच नहीं सकते उसकी क़ीमत क्या
है](/hi/blog/hum-aapka-password-kahin-nahi-bhejte/)।

इसीलिए यह चेतावनी सिर्फ़ इस पन्ने पर नहीं रहती: यह हर जवाब के साथ, आपकी माँगी हुई
भाषा में चलती है। और इसीलिए यह पैराग्राफ़ यहाँ है, दस्तावेज़ के अंत में छिपा हुआ
नहीं। **जिस पासवर्ड को आप खुद इस्तेमाल करेंगे, उसके लिए इस साइट का
[जनरेटर](/hi/) पूरा आपके ब्राउज़र में चलता है और कुछ नहीं भेजता।** API दूसरी चीज़
के लिए है: उसके लिए जो तब होता है जब स्क्रीन के सामने कोई नहीं होता।

ब्योरा दो पन्नों पर है। [API क्या है](/hi/api/) बताता है कि यह किसके लिए है, आज
क्या जवाब देता है और क्या नहीं। [रेफ़रेंस](/hi/api/docs/) में नौ पैरामीटर, हर
फ़ील्ड की एक-एक कर व्याख्या, त्रुटि कोड और सीमाएँ हैं; एडिटर के बगल में यही पन्ना
खुला रहता है। और अगर आप चाहते हैं कि इसे कोई मशीन पढ़े, तो `openapi.json` है।

---

*स्रोत: स्वयं API, 31 अगस्त 2026 को प्रोडक्शन के विरुद्ध सत्यापित —
`POST /v1/generate`, `POST /v1/check` (501), `POST /mcp` और `GET /openapi.json`
· विश्लेषण के आँकड़े password.es के जनरेटर और चेकर वाले इंजन से ही आते हैं ·
हमला-मॉडल प्रति सेकंड 10¹² कोशिशें है, ऑफ़लाइन और तेज़ हैश के साथ, साइट के बाक़ी
हिस्से जैसा ही · MCP सर्वर 2025-06-18 का विनिर्देश स्टेटलेस Streamable HTTP
ट्रांसपोर्ट के साथ लागू करता है।*
