एक पेमेंट कंपनी ने अपने डिलीवरी पार्टनरों को हफ़्ते का भुगतान भेजा। सैकड़ों खातों में पैसा गया। उनमें से एक में अक्षर का एक अंक ग़लत टाइप हुआ था, और रक़म किसी अनजान व्यक्ति के खाते में पहुँच गई। पैसा वापस आने में हफ़्तों लगे। इस तरह की घटना रोकने के लिए बैंक खाते की जाँच बनी है, और उसके दो हिस्से हैं जिन्हें लोग अक्सर एक ही चीज़ समझ लेते हैं: penny drop और name match।
ये बैंक खाता जाँचने के दो मुक़ाबले वाले तरीक़े नहीं हैं। ये एक ही जाँच के दो आधे हिस्से हैं। penny drop से पता चलता है कि खाता मौजूद है या नहीं, क्रेडिट स्वीकार करता है या नहीं, और बैंक के अनुसार उसका धारक कौन है। name match से तय होता है कि वह धारक वही व्यक्ति या कारोबार है जिसे आप भुगतान करना चाहते थे। StampMitra का bank account endpoint दोनों एक ही call में करता है: खाते की स्थिति और बैंक में दर्ज नाम लौटाता है, और अगर आपने name भेजा हो तो दोनों की तुलना करता nameMatchResult और nameMatchScore भी।
फ़र्क़ इसलिए मायने रखता है कि दोनों हिस्से अलग-अलग तरह से विफल होते हैं। penny drop किसी और के खाते पर भी सफल हो सकता है। name match बंद हो चुके खाते पर भी पूरा मिल सकता है। जो भुगतान प्रवाह सिर्फ़ एक पर टिकता है, वह या तो ग़लत व्यक्ति को पैसा दे देगा या अच्छे व्यक्ति को ठुकरा देगा। यह गाइड बताती है कि हर हिस्सा क्या साबित करता है, बैंक का नाम कहाँ से आता है और PAN कार्ड के नाम से अलग क्यों होता है, जवाब को स्वीकार, समीक्षा और अस्वीकार के फ़ैसलों में कैसे बदलें, यह हल्के और भारी विकल्पों से कैसे तुलना खाता है, और वह एक जगह जहाँ retry में सावधानी चाहिए।
मुख्य बातें
- penny drop पुष्टि करता है कि खाता मौजूद और पहुँच में है और बैंक के रिकॉर्ड का धारक-नाम लौटाता है। name match उस नाम को अपेक्षित नाम से मिलाता है। आपको दोनों चाहिए।
- एक endpoint,
POST /v1/verify/bank-account, scopeverification.bank-account.read।accountNumber(9 से 18 अंक) औरifsc(11 अक्षर) ज़रूरी।nameऔरphoneवैकल्पिक। - जवाब में
valid,nameAtBank,bankName,utr,city,branch,micr,nameMatchScore,nameMatchResult,accountStatus,accountStatusCode,ifscDetailsऔरreferenceIdआते हैं। - docs के नमूने में
nameMatchScoreएक string है ("100"),nameMatchResultGOOD_MATCHहै औरaccountStatusACCOUNT_IS_VALID। reference हर एक का एक ही उदाहरण दिखाता है, इसलिए मानों का समूह खुला मानिए। - बैंक में दर्ज नाम अक्सर व्यक्ति के औपचारिक नाम से छोटा, संक्षिप्त या अलग क्रम में होता है। इसके लिए बनाइए: normalise कीजिए, स्कोर लीजिए, फिर समीक्षा।
- बैंक का नाम उस payee के नाम से मिलाइए जिसे आपने कहीं और verify किया है (जैसे PAN का नाम), सिर्फ़ उससे नहीं जो उसने टाइप किया।
- reference नहीं कहता कि verification calls idempotent हैं। penny drop की timeout वाली call को आँख मूँदकर retry करना सुरक्षित नहीं: पहले देखिए कि पहली call पूरी हुई या नहीं।
- StampMitra के production access फ़ॉर्म में bank account verification ऊँचे जोखिम का चिह्नित है और अतिरिक्त जाँच के बाद खुलता है, इसलिए जल्दी आवेदन कीजिए।
- वैध खाता और मिलता नाम यह साबित करते हैं कि खाता असली और संभवतः उनका है। इससे उनकी नीयत, या खाते के सिर्फ़ ज़रिया होने की बात साबित नहीं होती।
तीन payee, तीन नीतियाँ
एक ही जवाब के साथ अलग बरताव चाहिए, इस पर निर्भर करते हुए कि आप किसे क्या भुगतान करने जा रहे हैं और ग़लती की क़ीमत क्या है। तीन काल्पनिक स्थितियाँ जो एक ही फ़ैसले की बनावट अलग सीमाओं के साथ इस्तेमाल करती हैं।
गिग वर्कर को हफ़्ते का भुगतान। रक़में छोटी और बार-बार, payee हज़ारों, और ग़लती से ठुकराया गया वर्कर एक support टिकट और हाथ से निकला पार्टनर है। नीति: पहले PAN verify कीजिए, बैंक के nameAtBank को PAN के पंजीकृत नाम से उदार सीमा पर मिलाइए, और अगर पहला नाम और उपनाम का पहला अक्षर मिलें तो आंशिक मिलान को flag के साथ पास होने दीजिए। बाक़ी को समीक्षा की कतार में भेजिए जो रद्द चेक की फ़ोटो माँगे। जाँच सुलझने तक पहला भुगतान रोकिए और फिर रुकी रक़म छोड़ दीजिए। ग़लती की क़ीमत एक हफ़्ते की कमाई तक सीमित है।
ट्रेडिंग कंपनी के लिए वेंडर ऑनबोर्डिंग। रक़में बड़ी, वेंडर कम और हर एक पर असली मेहनत लायक़। नीति: वेंडर का PAN, GSTIN और, कंपनी हो तो, CIN verify कीजिए; फिर बैंक खाता verify कीजिए और लुकअप से मिले legal name से तुलना कीजिए, trade name सिर्फ़ प्रोपराइटरशिप के लिए मानिए। आंशिक मिलान हमेशा किसी इंसान के पास जाए, जो रद्द चेक या बैंक पत्र माँगे। बाद में खाता बदला जाए तो वही प्रवाह चले और पहले भुगतान से पहले दूसरा अनुमोदक हो। यहाँ ग़लती की क़ीमत ग़लत जगह गया इनवॉइस भुगतान है, इसीलिए समीक्षा की कतार वैकल्पिक नहीं है।
कर्ज़ का वितरण। रक़म बड़ी है, उधार लेने वाले की पूरी KYC हो चुकी है, और जो पैसा खाते में जाएगा उसे वापस बुलाना मुश्किल है। नीति सख़्त है: बैंक का नाम verify किए उधारकर्ता के नाम से ऊँची सीमा पर मिलना चाहिए, साझा खातों की समीक्षा हो, और हर आंशिक मिलान ऐसे इंसान के पास जाए जिसके सामने उधारकर्ता के दस्तावेज़ हों। ऋणदाता ifscDetails को उधारकर्ता के बताए बैंक और शहर से भी मिलाता है। नाम का बेमेल वितरण को तब तक रोकता है जब तक सुलझ न जाए, देरी चाहे कितनी शर्मनाक लगे। नियंत्रित ऋणदाताओं को अपने नियामक या पार्टनर बैंक से भी पूछ लेना चाहिए कि वितरण पर कौन-से नियंत्रण ज़रूरी हैं, क्योंकि वे नियम इस API के बाहर हैं।
तीनों नीतियाँ वही decide_bank function अलग accept_score और reject_score मानों के साथ इस्तेमाल करती हैं, और फ़र्क़ मुख्यतः इसमें है कि समीक्षा की कतार क्या माँगती है और पैसा क्या रोकता है। कोड वही रहता है। नीति configuration है।
दो विचार जिन्हें लोग मिला देते हैं
कोई कहे "हम penny drop verification करते हैं", तो वह आम तौर पर एक साथ चार अलग बातें कह रहा होता है।
| सवाल | जवाब कौन देता है | कौन-सी ग़लती पकड़ता है |
|---|---|---|
| क्या यह खाता मौजूद और चालू है? | खुद penny drop, एक छोटा क्रेडिट जो सफल या विफल होता है | खाता संख्या या IFSC में टाइपो, बंद या फ़्रीज़ हुए खाते |
| बैंक के हिसाब से इसका मालिक कौन है? | क्रेडिट के साथ लौटा लाभार्थी का नाम | इच्छित व्यक्ति से अलग किसी को भुगतान |
| क्या वह नाम उससे मिलता है जिसकी मुझे उम्मीद है? | नाम की तुलना, जो आपका कदम है या प्लेटफ़ॉर्म का | ग़लत payee, ख़च्चर या उधार के खाते, लापरवाह टाइपो |
| क्या माँगने वाला व्यक्ति इस खाते का मालिक है? | दोनों में से कोई जवाब नहीं देता | नक़ल, खाते पर क़ब्ज़ा |
पहले दो जवाब बैंक से transfer की पटरी के ज़रिए आते हैं। तीसरा तुलना है, जो API (nameMatchScore) कर सकती है और आप दोबारा। चौथे का जवाब penny drop बिल्कुल नहीं देता, और उसके लिए दूसरा कारक चाहिए, जैसे दस्तावेज़, reverse penny drop या ग्राहक के अपने खाते से भुगतान।
इन चारों सवालों को अलग रखने से डिज़ाइन साफ़ हो जाता है। पहले तीन में से किसी पर आप अपने-आप विफल कर सकते हैं, और सिर्फ़ तीसरे को, जब स्कोर बीच का हो, इंसान के पास भेजते हैं।
penny drop कैसे काम करता है और क्या पता चलता है
penny drop जाँचे जाने वाले खाते में बहुत छोटा क्रेडिट भेजता है और नतीजा पढ़ता है। बैंक transfer की भाषा में यह लाभार्थी को सामान्य क्रेडिट है, जो आपके दिए खाता संख्या और IFSC से जाता है। क्रेडिट सफल हो तो खाता मौजूद है, क्रेडिट के लिए खुला है और सही पते पर है। बैंक लाभार्थी का नाम भी वैसे लौटाता है जैसे उसके रिकॉर्ड में है, और transfer के साथ एक संदर्भ चलता है, जो StampMitra के जवाब में utr फ़ील्ड है।
चार सावधानियाँ तय करती हैं कि आप इसे कैसे इस्तेमाल करें।
पहली, रक़म और उसका ख़र्च कौन उठाता है, यह StampMitra के reference में नहीं लिखा। प्रोडक्ट के वर्णन में endpoint को खाते और धारक के नाम की penny-drop पुष्टि कहा गया है, और जवाब में utr है। अपने ग्राहकों को कोई रक़म तब तक मत बताइए जब तक support से पक्का न कर लें। खाताधारकों को यह ज़रूर बताइए कि उनके स्टेटमेंट में बहुत छोटा क्रेडिट दिख सकता है, ताकि कोई चौंके नहीं।
दूसरी, खाते वैध होकर भी क्रेडिट ठुकरा सकते हैं, ऐसी वजहों से जिनका धोखाधड़ी से कोई लेना-देना नहीं: फ़्रीज़ या निष्क्रिय खाता, खाते के प्रकार पर रोक, या बैंक की तरफ़ की अस्थायी विफलता। इसलिए विफल क्रेडिट खाते के बारे में सबूत है, बेईमानी का सबूत नहीं। इसे "कृपया ब्योरा जाँचिए या दूसरा खाता आज़माइए" से सँभालिए, इल्ज़ाम से नहीं।
तीसरी, बैंक जो नाम लौटाता है वह बैंक की अपनी बही का है। वह लंबाई, संक्षेप और क्रम के बैंक के अपने नियमों पर चलता है। वह PAN के नाम से और चेक बुक पर लिखे नाम से अलग हो सकता है।
चौथी, जाँच बैंक की व्यवस्था तक पहुँचने पर निर्भर है। इससे विफलता के ऐसे तरीक़े आते हैं (timeout, upstream उपलब्ध नहीं) जो सिर्फ़ format पर टिकी जाँच में नहीं होते, और इसीलिए retry के बरताव का अपना हिस्सा नीचे है।
StampMitra का bank account endpoint
| बात | मान |
|---|---|
| Path | https://api-b2b.stampmitra.in पर POST /v1/verify/bank-account |
| प्रमाणीकरण | Authorization: Bearer <key> या x-api-key: <key> |
| Scope | verification.bank-account.read |
| ज़रूरी फ़ील्ड | accountNumber (9 से 18 अंक), ifsc (11 अक्षर, जैसे ICIC0001234) |
| वैकल्पिक फ़ील्ड | name (मिलाने वाला लाभार्थी नाम), phone (खाताधारक का 10 अंक का भारतीय मोबाइल नंबर, जब उपलब्ध हो; मिलान का भरोसा बढ़ाता है) |
| बिलिंग | सफल जवाब के बाद bank-account.verify के रूप में गिनी जाती है; bank account verification की pricing पेज पर अपनी दर है |
| Sandbox | sk_test_ से शुरू होने वाली key; सिर्फ़ सैंपल डेटा; आपका wallet कभी नहीं कटता |
curl -X POST "https://api-b2b.stampmitra.in/v1/verify/bank-account" \
-H "Authorization: Bearer $STAMPMITRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"accountNumber":"000123456789","ifsc":"ICIC0001234","name":"Ravi Kumar"}'{
"referenceId": "SMV-20260927-3B71A0",
"valid": true,
"nameAtBank": "RAVI KUMAR",
"bankName": "ICICI Bank",
"utr": "017952100012345",
"city": "Mumbai",
"branch": "Andheri West",
"micr": "400229002",
"nameMatchScore": "100",
"nameMatchResult": "GOOD_MATCH",
"accountStatus": "ACCOUNT_IS_VALID",
"accountStatusCode": "1",
"ifscDetails": {
"bank": "ICICI Bank",
"ifsc": "ICIC0001234",
"micr": "400229002",
"address": "Andheri West, Mumbai",
"city": "Mumbai",
"state": "Maharashtra",
"branch": "Andheri West"
}
}| फ़ील्ड | मतलब | इस्तेमाल |
|---|---|---|
referenceId | इस call की StampMitra पहचान, रूप SMV-YYYYMMDD-XXXXXXX | सहेजिए। यह idempotency key नहीं है |
valid | खाता verify हुआ या नहीं | सबसे पहले इस पर शाखा कीजिए |
nameAtBank | बैंक का लौटाया धारक-नाम | payee से मिलाने वाली स्ट्रिंग |
bankName, branch, city, micr | शाखा का ब्योरा | बैंक और शाखा यूज़र को वापस दिखाइए ताकि वह ग़लत IFSC पहचान सके |
utr | जाँच में इस्तेमाल हुए बैंक transfer का संदर्भ | रिकॉर्ड के साथ रखिए; इसी से बैंक call का पता लगा सकता है |
nameMatchScore | आपके name और बैंक के नाम की तुलना का स्कोर, string के रूप में (नमूने में "100") | तुलना से पहले संख्या में बदलिए |
nameMatchResult | तुलना का लेबल (नमूने में GOOD_MATCH) | एक लेबल; मानों का समूह कोड में मत बैठाइए |
accountStatus, accountStatusCode | खाते की स्थिति (नमूने में ACCOUNT_IS_VALID और "1") | नाम से पहले status पर फ़ैसला कीजिए |
ifscDetails | IFSC से शाखा का ब्योरा | संदर्भ; राज्य या बैंक को यूज़र के दावे से मिलाइए |
PAN endpoint से तुलना कीजिए, जो nameMatchScore string और nameMatchResult भी लौटाता है, पर लेबल के मान अलग हैं। दोनों को सँभालने वाले साझा helper को लेबलों को खुला समूह मानना होगा और हर एक के लिए स्कोर parse करना होगा।
accountStatus, nameMatchResult और nameMatchScore पढ़ना
reference इनमें से हर फ़ील्ड का एक उदाहरण दर्ज करता है। वह दूसरे status या लेबल नहीं गिनाता, और तुलना का तर्क या स्कोर की सीमाएँ प्रकाशित नहीं करता। इसी हिसाब से डिज़ाइन कीजिए।
status के लिए लिखिए "ACCOUNT_IS_VALID पास; बाक़ी सब पास नहीं"। अनजानी स्थिति समीक्षा में जाए या "कृपया दूसरा खाता आज़माइए" में, आपके प्रोडक्ट के हिसाब से, और आप कच्चा मान और referenceId लॉग करें। नाम के लिए nameMatchResult को संकेत और nameMatchScore को संकेतक मानिए, और अपनी सीमा लगाइए, अपने डेटा पर अंशांकित, उस तरीक़े से जो PAN को verify करके नाम कैसे मिलाएँ में है। वहाँ सीमाओं, normalisation, परतों और समीक्षा के बारे में जो कहा गया है वह यहाँ भी लागू है।
एक अंतर ध्यान देने लायक़ है: निशाना। PAN के लिए निशाना व्यक्ति का पंजीकृत नाम है। बैंक खाते के लिए निशाना बैंक की अपनी स्ट्रिंग है, जो औपचारिक नाम से आम तौर पर छोटी और ज़्यादा संक्षिप्त होती है। PAN के नामों पर अंशांकित सीमा बैंक के नामों के लिए अक्सर बहुत सख़्त निकलेगी।
बैंक का नाम आपकी अपेक्षा से अलग क्यों होता है
भुगतान प्रवाहों में झूठी अस्वीकृतियों का सबसे बड़ा स्रोत बैंक के नाम हैं। वे ग़लत नहीं हैं। उन्हें उस व्यवस्था ने आकार दिया है जो उन्हें रखती है।
| पैटर्न | उदाहरण | कारण |
|---|---|---|
| कटा हुआ नाम | "RAVI KUMAR SHARMA ENTERPR" | कुछ पटरियों और बैंकों पर लाभार्थी नाम के फ़ील्ड की अक्षर-सीमा है |
| उपनाम छूटा या इनिशियल | "RAVI K" | बैंक के पास संक्षिप्त नाम है |
| अलग क्रम | "KUMAR RAVI" | बैंक पहले उपनाम रखता है |
| उपाधियाँ | "MR RAVI KUMAR", "SMT PRIYA SHARMA" | नाम फ़ील्ड में सम्मानसूचक शब्द |
| साझा खाते | सिर्फ़ पहला धारक | सिर्फ़ मुख्य धारक का नाम लौटता है |
| कारोबारी खाते | कानूनी नाम की जगह trade name | खाता ब्रांड के नाम से खुला |
| प्रोपराइटरशिप | मालिक का नाम या दुकान का नाम | दोनों में से कोई खाते पर हो सकता है |
| नाबालिग, HUF या दूसरे ख़ास खाते | "RAVI KUMAR HUF" या अभिभावक का नाम | खाता किसी दूसरी हैसियत में है |
| वर्तनी के रूप | "LAXMI" और "LAKSHMI" | खाता खुलते समय नाम हाथ से भरे गए |
| पुराना डेटा | बदलाव के बाद का पुराना नाम | बैंक ने अपना रिकॉर्ड अपडेट नहीं किया |
इससे दो बचाव निकलते हैं। पहला, दोनों स्ट्रिंग normalise कीजिए (केस, विराम चिह्न, उपाधियाँ, "MOHD" और "MOHAMMED" जैसे संक्षेप) और टोकन की तुलना कीजिए, जैसे PAN गाइड में है। दूसरा, पहले से तय कीजिए कि आपका प्रोडक्ट हर तरह के payee के लिए कितना फ़र्क़ सहेगा। हफ़्ते में छोटी रक़म पाने वाला गिग वर्कर ऋण बाँटते ऋणदाता से ज़्यादा फ़र्क़ सह सकता है।
किस नाम से तुलना करें
"payee के नाम से तुलना कीजिए" काफ़ी ख़ास नहीं है। आपके पास आम तौर पर तीन उम्मीदवार नाम होते हैं, और आप कौन-सा चुनते हैं इससे नतीजा बदलता है।
| उम्मीदवार | कहाँ से आता है | कब इस्तेमाल करें |
|---|---|---|
| payee का फ़ॉर्म में टाइप किया नाम | यूज़र | सबसे कमज़ोर। यूज़र ने जो लिखना चुना |
| PAN verification का पंजीकृत नाम | PAN जवाब का registeredName | व्यक्तियों के लिए सबसे मज़बूत: स्वतंत्र रिकॉर्ड, payee का टाइप किया नहीं |
| GSTIN या CIN लुकअप का legal name | legalName या companyName | कारोबारों के लिए सबसे मज़बूत |
व्यक्तियों के लिए बेहतर डिज़ाइन यह है कि पहले PAN verify कीजिए, फिर बैंक के nameAtBank की PAN के registeredName से तुलना कीजिए, और टाइप किया नाम केवल आख़िरी विकल्प रखिए। तब बेमेल का मतलब है कि खाता शायद उस व्यक्ति के नाम पर नहीं जिसका PAN आपने verify किया, और यही संकेत आपको चाहिए। कारोबारों के लिए पंजीकृत legal name से तुलना कीजिए और प्रोपराइटरशिप के लिए trade name मानने को तैयार रहिए, जहाँ खाता दोनों में से किसी के नाम हो सकता है। पहले कौन-सी पहचान verify करें, इसका बड़ा चित्र PAN, GSTIN और CIN में फ़र्क में है।
अपने request में फिर भी name भेजिए। प्लेटफ़ॉर्म की तुलना उसी call का हिस्सा है और कोई अतिरिक्त ख़र्च नहीं लेती। वही नाम भेजिए जिसे आप निशाना बनाएँगे, ताकि जो स्कोर मिले वही स्कोर आप पर काम करे।
एक उदाहरण जिसमें दो उम्मीदवार नाम टकराते हैं। एक फ़्रीलांसर के पास अपने नाम का बचत खाता है और अपनी छोटी कंपनी के नाम का चालू खाता। भुगतान वह चालू खाते में लेना चाहता है। अगर आप बैंक के nameAtBank की तुलना सिर्फ़ उसके टाइप किए नाम से करेंगे, तो दोनों खाते "मिलते" दिख सकते हैं, क्योंकि उसने वही लिखा जो उसके मन में था। जब तुलना उसके PAN के registeredName से होती है, तो बचत खाता मिलता है और चालू खाता नहीं, और तब सही सवाल बनता है: क्या यह भुगतान व्यक्ति को जा रहा है या कंपनी को? अगर कंपनी को, तो तुलना कंपनी के GSTIN या CIN के legal name से होनी चाहिए, और वही पैसा लेने वाली पार्टी का सही रिकॉर्ड बनता है। यानी पहले तय कीजिए कि payee कौन है, फिर उसी का नाम तुलना का निशाना बनाइए।
इसी तरह, जब जाँच valid: false लौटाए, तो पहले यह मत मान लीजिए कि खाता फ़र्ज़ी है। खाता संख्या का एक अंक या IFSC का एक अक्षर ग़लत होना सबसे आम कारण है। यूज़र को वही दो field दोबारा जाँचने का मौक़ा दीजिए, और बार-बार विफल होने पर ही हाथ की समीक्षा या दूसरे खाते की माँग पर जाइए।
जवाब को फ़ैसले में बदलना
फ़ैसला एक ही शुद्ध function में रखिए। नीचे का संस्करण साफ़ मिलान को स्वीकार करता है, आंशिक मिलान और अनजानी स्थितियों को समीक्षा में भेजता है, और सिर्फ़ तब विफल करता है जब lookup कहे कि खाता वैध नहीं।
import re
def decide_bank(res: dict, accept_score: float = 85.0, reject_score: float = 40.0) -> dict:
ref = res.get("referenceId")
if not res.get("valid"):
return {"decision": "FAIL", "reasons": ["ACCOUNT_NOT_VALID"], "ref": ref}
reasons = []
if res.get("accountStatus") != "ACCOUNT_IS_VALID":
reasons.append("STATUS_" + str(res.get("accountStatus") or "EMPTY").upper())
try:
score = float(re.sub(r"[^0-9.]", "", str(res.get("nameMatchScore") or "")))
except ValueError:
score = None
if score is None:
reasons.append("NO_SCORE")
elif score < reject_score:
reasons.append("NAME_FAR")
elif score < accept_score:
reasons.append("NAME_PARTIAL")
if "NAME_FAR" in reasons:
return {"decision": "FAIL", "reasons": reasons, "ref": ref}
return {"decision": "REVIEW" if reasons else "PASS", "reasons": reasons, "ref": ref}दोनों सीमाएँ बनावट दिखाने वाले placeholder हैं, सिफ़ारिशें नहीं। उन्हें अपने नतीजों पर अंशांकित कीजिए। ढाँचा ही उठाने लायक़ है: एक ऊँची सीमा जिसके ऊपर आप पास करें, एक नीची सीमा जिसके नीचे विफल करें, और बीच में समीक्षा की पट्टी। वैध खाते पर बहुत कम स्कोर इस बात का संकेत है कि खाता किसी और का हो सकता है, इसीलिए वह समीक्षा की जगह विफल होता है।
अगर आपका बैकएंड Node है तो वही तर्क JavaScript में लगभग शब्दशः उतरता है। मुख्य बात यह है कि फ़ैसला एक ही जगह रहे और कारणों को कोड में लौटाए।
call पर पैसा ख़र्च करने से पहले इनपुट जाँचिए
ग़लत बनावट वाला मान बैंक तक कुछ भेजे जाने से पहले ही 400 से विफल होता है। दर्ज संदेश है accountNumber must be a 9-18 digit numeric bank account number। उसे पहले ही पकड़ लीजिए।
import re
def check_bank_input(account_number, ifsc):
acct = re.sub(r"\s+", "", str(account_number or ""))
code = re.sub(r"\s+", "", str(ifsc or "")).upper()
if not re.fullmatch(r"[0-9]{9,18}", acct):
return {"ok": False, "field": "accountNumber", "reason": "खाता संख्या 9 से 18 अंक की होनी चाहिए।"}
if not re.fullmatch(r"[A-Z]{4}0[A-Z0-9]{6}", code):
return {"ok": False, "field": "ifsc", "reason": "IFSC में 11 अक्षर होते हैं: चार अक्षर, एक शून्य, फिर छह अक्षर या अंक।"}
return {"ok": True, "accountNumber": acct, "ifsc": code}IFSC की बनावट (चार अक्षर, एक शून्य, छह अक्षर-अंक) मानक format है। पैटर्न की जाँच यह नहीं बता सकती कि शाखा मौजूद है या नहीं, पर वह टाइपिंग की ग़लतियाँ मुफ़्त में हटा देती है। अगर आपका प्रवाह यह झंझट सह सके तो यूज़र से खाता संख्या दो बार टाइप करवाइए, क्योंकि नौ से अठारह अंक की संख्या में एक अंक की ग़लती लंबाई की जाँच पास कर सकती है और वैध IFSC के साथ किसी दूसरे असली खाते की ओर इशारा कर सकती है।
खाता भरने की स्क्रीन कैसी हो
ज़्यादातर विफल verification फ़ॉर्म में ही पैदा होते हैं। कुछ बारीकियाँ उन्हें घटाती हैं।
खाता संख्या दो बार माँगिए, या चार-चार के समूह में वापस दिखाइए। नौ से अठारह अंक की संख्या में एक ग़लत अंक किसी दूसरे असली खाते को पैदा कर सकता है। दो बार माँगना, या संख्या को चार-चार के समूह में दिखाकर यूज़र से जँचवाना, एक सेकंड लेता है और सबसे महँगे टाइपो को रोक देता है।
जहाँ हो सके वहाँ IFSC चुनने की सुविधा दीजिए। बैंक-और-शाखा चुनने वाला selector जो IFSC भर दे, अक्षरों की अदला-बदली से बचाता है। अगर यूज़र को टाइप ही करना पड़े, तो ऊपर दिखाए अनुसार पैटर्न जाँचिए, और सफल call के बाद जवाब का बैंक और शाखा का नाम वापस दिखाइए ताकि यूज़र ग़लत IFSC भाँप सके।
बताइए कि क्या होगा। बटन के नीचे एक पंक्ति: "खाते की पुष्टि के लिए हम इसमें बहुत छोटी रक़म भेजेंगे। आपको कुछ करना नहीं है।" यह वाक्य उन यूज़रों के support संदेशों की बाढ़ रोकता है जो अनपेक्षित क्रेडिट देख लेते हैं। यह पंक्ति छापने से पहले असली बरताव support से पक्का कर लीजिए।
विफलता के संदेश में अगला कदम दीजिए। तुलना कीजिए।
| स्थिति | कमज़ोर संदेश | बेहतर संदेश |
|---|---|---|
valid ग़लत | "Verification विफल" | "हम इस खाते की पुष्टि नहीं कर सके। कृपया खाता संख्या और IFSC जाँचिए, या दूसरा खाता आज़माइए।" |
| नाम payee से दूर | "नाम बेमेल" | "इस खाते का नाम हमारे पास आपके नाम से अलग दिखता है। कृपया अपने नाम का खाता इस्तेमाल कीजिए, या रद्द चेक अपलोड कीजिए।" |
| आंशिक मिलान | "मिलान स्कोर कम" | "हम नाम के एक छोटे फ़र्क़ की जाँच कर रहे हैं। इसमें आम तौर पर एक दिन से कम लगता है।" |
| Timeout | "एरर" | "बैंक ने जवाब नहीं दिया। हम देख रहे हैं कि verification हुआ या नहीं, और आपको बता देंगे।" |
आख़िरी पंक्ति ऊपर के retry नियमों से जुड़ती है: संदेश अस्पष्टता के बारे में सच बताता है और यूज़र को दोबारा भेजने को नहीं कहता।
बैंक का लौटाया नाम किसी ऐसे को कभी मत दिखाइए जिसने payee प्रोफ़ाइल का मालिक होना साबित न किया हो। किसी अजनबी के अंदाज़े के जवाब में "हमें मिला: RAVI KUMAR SHARMA" दिखाना आपके फ़ॉर्म को नाम खोजने की सेवा बना देता है।
retry और दोहराई गई calls: वह एक जगह जहाँ सावधानी चाहिए
PAN, GSTIN और CIN के लिए timeout हुई call दोबारा भेजना आम तौर पर लागत के सिवा बेअसर है। penny drop में call का मतलब बैंक के ज़रिए असली transfer है। आपकी तरफ़ का timeout यह नहीं बताता कि transfer गया या नहीं। आँख मूँदकर retry का मतलब उसी खाते में दो क्रेडिट और आप पर दो शुल्क हो सकता है।
reference कहता है कि verification endpoint idempotent नहीं हैं: referenceId एक call की पहचान है और साफ़ तौर पर idempotency key नहीं है, और उनके लिए कोई idempotency header दर्ज नहीं है। इसलिए खुद को बचाइए।
- अपने job को idempotent बनाइए। call से पहले payee और खाते के सामने "verification माँगी गई" दर्ज कीजिए, और बाद में नतीजा। job फिर शुरू हो तो दूसरी call करने से पहले उसे रिकॉर्ड देखना चाहिए।
- timeout पर अपने-आप retry मत कीजिए। 429 पर backoff के साथ retry कीजिए (request दर के कारण ठुकराया गया, कुछ भेजा नहीं गया)। अनुरोध भेजे जाने के बाद timeout या 502 पर, पहले सबूत ढूँढिए कि पहली call पूरी हुई या नहीं।
- logs देखिए।
GET /v1/logsमेंservice=bank-account.verify, आपकी call से ठीक पहले काfromसमय औरstatusछन्नी दिखाती है कि प्लेटफ़ॉर्म ने कोई call दर्ज की या नहीं। की हो, तो दोबारा call करने की जगह वही नतीजा इस्तेमाल कीजिए। - अस्पष्टता सामने रखिए। पक्का न कर पाएँ तो यूज़र से कहिए "हम अभी इस खाते की जाँच कर रहे हैं", और तंग लूप में फिर कोशिश करने की जगह उसे asynchronously सुलझाइए।
हर status code के व्यापक नियम एरर, retry और idempotency में हैं। वहाँ से यही बात साथ ले जाइए कि bank account verification वह endpoint है जहाँ "बस retry कर दो" सबसे कम सुरक्षित है।
विकल्प, और हर एक कहाँ जमता है
penny drop खाता असली और संभवतः payee का होने की पुष्टि के कई तरीक़ों में से एक है। वे इसमें अलग हैं कि क्या साबित करते हैं, यूज़र को कितनी रगड़ देते हैं, कितने में पड़ते हैं और क्या माँगते हैं।
| तरीक़ा | क्या साबित करता है | रगड़ | टिप्पणी |
|---|---|---|---|
| Penny drop (यह endpoint) | खाता मौजूद है, क्रेडिट लेता है, और बैंक का धारक-नाम | कम: यूज़र खाता संख्या और IFSC टाइप करता है | यूज़र के स्टेटमेंट में छोटा क्रेडिट दिख सकता है |
| Reverse penny drop | खाते पर नियंत्रण रखने वाले किसी ने आपको पैसा भेजा | मध्यम: यूज़र को भुगतान करना पड़ता है | खाते के नियंत्रण पर ज़्यादा मज़बूत; ऐसा collection setup चाहिए जो StampMitra इस endpoint से नहीं देता |
| UPI handle verification | कि handle मौजूद है और नाम लौटाता है | कम | UPI पते को साबित करता है, जो वह settlement खाता न हो जो आप चाहते हैं |
| रद्द चेक या बैंक स्टेटमेंट | कि payee दस्तावेज़ दे सकता है | मध्यम | समीक्षा चाहिए, और दस्तावेज़ बदले जा सकते हैं |
| सहमति-आधारित खाता डेटा साझा करना | ग्राहक का नियंत्रित चैनल से साझा किया खाता ब्योरा | मध्यम | अलग नियंत्रित प्रवाह, इस endpoint का हिस्सा नहीं |
ज़्यादातर भुगतान और वेंडर प्रवाहों के लिए name match के साथ penny drop संतुलित डिफ़ॉल्ट है। जब जोखिम क़ब्ज़े या नक़ल का हो तो और मज़बूत तरीक़ा लीजिए, और जब आपकी नीति या पार्टनर बैंक माँगे तो दस्तावेज़। ये तरीक़े एक-दूसरे के पूरक हैं। रद्द चेक की तस्वीर और मिलता penny drop दोनों अकेले से ज़्यादा बताते हैं।
भुगतान प्रवाह में verification कहाँ बैठे
उस क्षण रखिए जब कोई खाता भुगतान का ठिकाना बनता है, और जब भी वह बदले।
- ऑनबोर्डिंग पर। पहले payee की पहचान verify कीजिए (व्यक्तियों के लिए PAN, कारोबारों के लिए GSTIN और CIN), फिर बैंक खाता verify कीजिए और बैंक का नाम verify किए नाम से मिलाइए।
- खाता बदलने पर। बदला हुआ बैंक खाता वेंडर और भुगतान प्रणालियों में धोखाधड़ी की क्लासिक घटनाओं में से है। इसे नए payee की तरह सँभालिए: दोबारा verify कीजिए, और नए खाते में पहले भुगतान से पहले रोक या दूसरे अनुमोदन पर विचार कीजिए।
- तय समय पर, अगर नीति माँगे। खाते बंद और फ़्रीज़ होते हैं। निष्क्रिय payee की बड़े भुगतान से पहले समय-समय पर दोबारा जाँच ऐसे खातों को पकड़ती है जो अब वैध नहीं।
- बड़े एकबारगी भुगतान से पहले। call की क़ीमत ग़लत जगह गए बड़े भुगतान के सामने छोटी है।
referenceId, utr, फ़ैसला, कारण, स्कोर और समय payee के सामने सहेजिए। क्या रखें और क्या छिपाएँ, यह verification कॉल से क्या लॉग करें में है। बैंक खाता संख्या संवेदनशील है: अपने इंटरफ़ेस में सिर्फ़ आख़िरी चार अंक दिखाइए।
सबूत और विवाद
देर-सबेर कोई payee कहेगा कि आपने ग़लत खाते में भुगतान किया, या कोई पार्टनर बैंक पूछेगा कि आपने उस खाते में भुगतान का फ़ैसला कैसे लिया। verification का रिकॉर्ड आपका जवाब है, और वह तभी काम आता है जब आपने सही टुकड़े रखे हों।
हर verification के लिए रखिए: payee की पहचान, referenceId, utr, call का समय, आख़िरी चार अंकों तक छिपाई खाता संख्या और पूरा IFSC, nameAtBank या उसका hash, स्कोर, status, आपका फ़ैसला और उसके कारण, और हर उस समीक्षक की पहचान जिसने डिफ़ॉल्ट को बदला। referenceId और utr से StampMitra support और बैंक उस ख़ास call का पता लगा सकते हैं। कारणों से आप दिखा सकते हैं कि आंशिक मिलान क्यों मंज़ूर हुआ, और किसने किया।
विवाद आए तो सबूत के तौर पर verification दोबारा चलाने के लालच से बचिए। नई call आज का बैंक डेटा दिखाती है, आपके फ़ैसले के समय का नहीं, और वह दूसरा referenceId जोड़ देती है जो रिकॉर्ड को धुँधला करता है। मूल रिकॉर्ड निकालिए, उसके फ़ील्ड पढ़िए, और अगले कदम का फ़ैसला करने के लिए मौजूदा स्थिति चाहिए तभी दोबारा verify कीजिए। अगर उस समय खाते का ब्योरा ग़लत था, तो आपके रिकॉर्ड में दिखना चाहिए कि जाँच पास क्यों हुई, और इसी से आप समझ पाते हैं कि चूक नीति की थी, डेटा की या धोखाधड़ी की।
यह जाँच किससे बचाती है और किससे नहीं
| जोखिम | क्या जाँच मदद करती है? |
|---|---|
| खाता संख्या या IFSC में टाइपो | हाँ। क्रेडिट विफल होता है या ऐसे नाम पर जाता है जो मेल नहीं खाता |
| ग़लती से ग़लत व्यक्ति को भुगतान | हाँ, अगर आप verify किए नाम से तुलना करें |
| payee किसी और का वैध खाता दे दे | आंशिक रूप से। नाम का बेमेल दिखा देता है, पर किसी रिश्तेदार के उधार लिए खाते पर मिलता नाम नहीं |
| ख़च्चर या ज़रिया खाते | नहीं। ख़च्चर खाता सचमुच वैध और किसी असली व्यक्ति के नाम का हो सकता है |
| वैध payee के खाते पर क़ब्ज़ा | नहीं। ब्योरा वैध है; उसे बदलने वाला व्यक्ति payee नहीं है |
| बंद या फ़्रीज़ खाता | हाँ, ज़्यादातर मामलों में क्रेडिट विफल होता है |
| धोखा देने की नीयत | नहीं |
अपनी जोखिम टीम से यह साफ़-साफ़ कहिए। verification एक श्रेणी की ग़लतियों और कुछ धोखाधड़ियों को संकरा करता है। वह payee को भरोसेमंद नहीं बनाता।
परखना और live जाना
sandbox में दर्ज टेस्ट वैल्यू हैं: वैध खाते के लिए SANDBOX0000000001 और not valid के लिए SANDBOX9999999999। बाक़ी हर इनपुट का नतीजा स्थिर पर मनमाना होता है, मोटे तौर पर तीन में से दो valid, और हर नाम बनावटी है। ध्यान दीजिए कि ये टेस्ट वैल्यू नौ से अठारह अंक के production format का पालन नहीं करतीं। इनके साथ का request आपके खाते पर validation में ठुकरा दिया जाए, तो इसे दर्ज टेस्ट वैल्यू और format जाँच की बेमेल मानिए और उसके आसपास कोड बनाने की जगह support से पूछिए। sandbox कभी किसी बैंक से संपर्क नहीं करता, इसलिए वह दिखा नहीं सकता कि असली बैंक के नाम असली PAN के नामों से कैसे अलग होते हैं। अपने फ़ैसले के function को ऊपर की तालिका के पैटर्न से बने fixtures पर परखिए, और go-live के बाद असली डेटा से सीमाएँ अंशांकित कीजिए।
Bank account verification उन प्रोडक्टों में से है जिन्हें production access फ़ॉर्म ऊँचे जोखिम का चिह्नित करता है, इसलिए आपका आवेदन मंज़ूर होने के बाद वह एक छोटी अतिरिक्त जाँच के बाद खुलता है। समय की योजना बनाइए: उसके लिए बाक़ी प्रोडक्टों के साथ आवेदन कीजिए, launch के बाद नहीं। दस्तावेज़, अस्थायी सीमाओं और wallet समेत पूरा रास्ता sandbox बनाम production: क्या टेस्ट हो सकता है में है।
लागत और क्रम
Bank account verification की अपनी दर है: pay-as-you-go पर ₹4 प्रति call, और प्लान की कीमतें pricing तालिका में। क्योंकि हर call में बैंक transfer शामिल है, विफल या दोहराई गई call वह ख़र्च है जिससे आप बचना चाहते हैं, इसलिए क्रम मायने रखता है। पहले ऑफ़लाइन इनपुट जाँच चलाइए। फिर payee की पहचान verify कीजिए। बैंक endpoint सबसे आख़िर में बुलाइए, और सिर्फ़ उन payee के लिए जो पहले के चरण पास कर चुके हों। पूरे वेंडर प्रवाह में जाँचों का क्रम वेंडर ऑनबोर्डिंग फ़्लो में है।
आम ग़लतियाँ
- penny drop और name match को एक ही जाँच के दो हिस्सों की जगह विकल्प समझ लेना।
- बैंक के नाम की तुलना सिर्फ़ यूज़र के टाइप किए नाम से करना, स्वतंत्र रूप से verify किए नाम से नहीं।
- बैंक के नामों के लिए PAN पर अंशांकित सीमा इस्तेमाल करना, जबकि बैंक के नाम छोटे और ज़्यादा संक्षिप्त होते हैं।
- timeout हुई call को आँख मूँदकर retry करके दो क्रेडिट भेज देना।
- साझा खाते या trade name वाले मामलों को समीक्षा में भेजने की जगह सीधे ठुकरा देना।
- एक नमूने से
accountStatusयाnameMatchResultके मानों का समूह कोड में बैठा देना। - payee का बैंक खाता बदलने पर दोबारा verification छोड़ देना।
- logs और स्क्रीन में पूरी खाता संख्या दिखाना।
- पक्का किए बिना ग्राहकों को कोई रक़म बता देना।
- यह मान लेना कि वैध खाता और मिलता नाम भरोसेमंद payee का मतलब है।
आगे क्या करें
quickstart से sandbox key लीजिए, sandbox वैल्यू के साथ endpoint call कीजिए, और bank account reference तथा प्रोडक्ट पेज पढ़िए। फिर मिलान का वह तरीक़ा पढ़िए जिस पर यह गाइड टिकी है: PAN को verify करके नाम कैसे मिलाएँ। पूरे payee प्रवाह के लिए KYC बनाम KYB और वेंडर प्रवाह की गाइड देखिए। सवाल support को भेजिए।
API reference एक नज़र में
Bank Account
POST /v1/verify/bank-accountRequest parameters
| Field | Type | Description |
|---|---|---|
Authorizationrequired | header | Bearer <api-key> (e.g. sk_test_... in sandbox, sk_live_... in production). The x-api-key header is also accepted. |
accountNumberrequired | string | 9-18 digit numeric bank account number. |
ifscrequired | string | 11-character IFSC code, e.g. ICIC0001234. |
name | string | Beneficiary name to match. |
phone | string | Account holder's 10-digit Indian mobile number, when available; improves match confidence. |
POST /v1/verify/bank-account{
"referenceId": "SMV-20260927-3B71A0",
"valid": true,
"nameAtBank": "RAVI KUMAR",
"bankName": "ICICI Bank",
"utr": "017952100012345",
"city": "Mumbai",
"branch": "Andheri West",
"micr": "400229002",
"nameMatchScore": "100",
"nameMatchResult": "GOOD_MATCH",
"accountStatus": "ACCOUNT_IS_VALID",
"accountStatusCode": "1",
"ifscDetails": {
"bank": "ICICI Bank",
"ifsc": "ICIC0001234",
"micr": "400229002",
"address": "Andheri West, Mumbai",
"city": "Mumbai",
"state": "Maharashtra",
"branch": "Andheri West"
}
}POST /v1/verify/bank-accountBank Account: ₹4 per successful call, pay-as-you-go (lower on Growth and Scale).
अक्सर पूछे जाने वाले सवाल
penny drop और name match में क्या फ़र्क है?
penny drop छोटा क्रेडिट भेजकर पता करता है कि खाता मौजूद है, क्रेडिट लेता है और बैंक के हिसाब से उसका धारक कौन है। name match उस धारक-नाम को उस व्यक्ति या कारोबार से मिलाता है जिसकी आप उम्मीद करते हैं। ये एक ही जाँच के दो हिस्से हैं, विकल्प नहीं।
StampMitra का bank account endpoint क्या लौटाता है?
यह valid, nameAtBank, bankName, utr, city, branch, micr, nameMatchScore, nameMatchResult, accountStatus, accountStatusCode, ifscDetails और referenceId लौटाता है। name भेजिए तो आपके नाम और बैंक के नाम की तुलना मिलती है, और phone वैकल्पिक है जो मिलान का भरोसा बढ़ाता है।
बैंक का नाम PAN के नाम से अलग क्यों होता है?
बैंक नाम अपने नियमों से रखते हैं: कटे हुए नाम, संक्षेप, पहले उपनाम, उपाधियाँ, साझा खाते में सिर्फ़ पहला धारक, कारोबारी खातों में trade name और बदलाव के बाद पुराने नाम। दोनों स्ट्रिंग normalise कीजिए, मिलान का स्कोर लीजिए और आंशिक मिलान को समीक्षा में भेजिए।
बैंक के नाम की तुलना किस नाम से करें?
payee के टाइप किए नाम की जगह स्वतंत्र रूप से verify किया नाम बेहतर है: व्यक्तियों के लिए PAN lookup का पंजीकृत नाम, और कारोबारों के लिए GSTIN या CIN का legal name। तब बेमेल संकेत देता है कि खाता शायद उस व्यक्ति का नहीं जिसे आपने verify किया।
क्या timeout हुए bank account verification को retry करना सुरक्षित है?
आँख मूँदकर नहीं। call में बैंक transfer शामिल है और reference verification endpoint के लिए idempotency दर्ज नहीं करता, इसलिए retry दूसरा क्रेडिट भेज सकता है। हर कोशिश दर्ज कीजिए, पहले request logs में पूरी हुई call देखिए, और सिर्फ़ 429 पर अपने-आप retry कीजिए।
क्या nameMatchScore एक संख्या है?
दर्ज नमूने में वह string है, 100 के रूप में, और nameMatchResult GOOD_MATCH है। तुलना से पहले उसे संख्या में बदलिए और एक उदाहरण से लेबलों का समूह कोड में मत बैठाइए। अपनी स्वीकार और समीक्षा की सीमाएँ असली नतीजों पर अंशांकित कीजिए।
क्या वैध खाता और मिलता नाम payee के भरोसेमंद होने का सबूत है?
नहीं। यह दिखाता है कि खाता असली और संभवतः उनका है। यह ख़च्चर या ज़रिया खातों, वैध payee के खाते पर क़ब्ज़े, या धोखा देने की नीयत को नहीं रोकता, इसलिए बदले हुए खातों पर रोक और दूसरे अनुमोदन जैसे नियंत्रण रखिए।
bank account verification की sandbox वैल्यू क्या हैं?
SANDBOX0000000001 सैंपल धारक के साथ वैध खाता लौटाता है और SANDBOX9999999999 not valid। बाक़ी इनपुट का नतीजा स्थिर पर मनमाना होता है। ये वैल्यू production के नौ से अठारह अंक के format का पालन नहीं करतीं, इसलिए validation ठुकराए तो support से पूछिए।
bank account verification को ऊँचे जोखिम का क्यों चिह्नित किया गया है?
StampMitra के production access फ़ॉर्म में bank account verification और e-Sign ऊँचे जोखिम के चिह्नित हैं और एक छोटी अतिरिक्त जाँच के बाद खुलते हैं, जबकि PAN, GSTIN, CIN, Udyam और e-Stamp कम जोखिम के माने जाते हैं। उसके लिए बाक़ी प्रोडक्टों के साथ आवेदन कीजिए।
bank account verification के बाद क्या सहेजना चाहिए?
referenceId, utr, समय, फ़ुल IFSC के साथ छिपाई खाता संख्या, स्कोर, status, अपना फ़ैसला और कारण, और समीक्षक का कोई बदलाव। अपनी स्क्रीन और logs में खाता संख्या के सिर्फ़ आख़िरी चार अंक दिखाइए।
स्रोत
/v1/verify/bank-accountके लिए StampMitra API reference डेटा: अनुरोध के फ़ील्ड, जवाब के फ़ील्ड, एरर, scopes और बिलिंग, जैसा इस रिपॉज़िटरी में 2026-10-29 को है। reference status और मिलान के फ़ील्ड का एक ही उदाहरण मान दर्ज करता है।- StampMitra की sandbox टेस्ट वैल्यू, sandbox responder से ली गईं, 2026-10-29।
- StampMitra का production access फ़ॉर्म: प्रोडक्ट के जोखिम चिह्न और समीक्षा के चरण, जैसा इस रिपॉज़िटरी में 2026-10-29 को लागू है।
- IMPS और IFSC के प्रचलनों पर भारतीय रिज़र्व बैंक और नेशनल पेमेंट्स कॉरपोरेशन ऑफ़ इंडिया के प्रकाशन: https://www.rbi.org.in और https://www.npci.org.in (सिर्फ़ सामान्य प्रचलन; मौजूदा नियम वहीं देखिए, 2026)।