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

प्रकाशित लेखक David Carrero

यह ब्लॉग महीनों से एक ही बात दोहरा रहा है: आपका पासवर्ड ब्राउज़र से बाहर नहीं जाना चाहिएजनरेटर यादृच्छिकता आपकी अपनी मशीन पर crypto.getRandomValues() से लेता है, और चेकर आप जो टाइप करते हैं उसे कहीं भेजे बिना ही जाँचता है।

और आज हम एक 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।

इनमें से कोई आँकड़ा नया नहीं है। ये उसी इंजन से आते हैं जो मुखपृष्ठ का मीटर बनाता है: बिट का वही सूत्र, वही हमला-मॉडल — प्रति सेकंड 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 दरअसल एक एंटीपैटर्न है: पासवर्ड नेटवर्क से गुज़रता है और ऐसी मशीन से होकर जाता है जो आपकी नहीं है। हम कुछ नहीं रखते, इससे समस्या का आकार नहीं बदलता, सिर्फ़ उसमें हमारा हिस्सा बदलता है — और आप जानते ही हैं कि जिस वादे को आप जाँच नहीं सकते उसकी क़ीमत क्या है

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

ब्योरा दो पन्नों पर है। API क्या है बताता है कि यह किसके लिए है, आज क्या जवाब देता है और क्या नहीं। रेफ़रेंस में नौ पैरामीटर, हर फ़ील्ड की एक-एक कर व्याख्या, त्रुटि कोड और सीमाएँ हैं; एडिटर के बगल में यही पन्ना खुला रहता है। और अगर आप चाहते हैं कि इसे कोई मशीन पढ़े, तो 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 ट्रांसपोर्ट के साथ लागू करता है।

तस्वीर: Stanislav Kondratiev · Pexels

← ब्लॉग पर वापस