StampMitraDevelopers

गाइड

PAN, GSTIN और CIN में फ़र्क: हर पहचान से क्या verify होता है

PAN करदाता की पहचान है, GSTIN एक राज्य के एक GST रजिस्ट्रेशन की और CIN पंजीकृत कंपनी की। लुकअप सिर्फ़ इतना बताता है कि रिकॉर्ड मौजूद है और स्रोत में क्या दर्ज है, यह नहीं कि आपका आवेदक उसका मालिक है। GSTIN के अंदर PAN होता है, CIN के अंदर दोनों नहीं, इसलिए मिलान के लिए अलग calls और नाम की तुलना चाहिए।

लेखक: StampMitra Developer Teamअंतिम अपडेट: यह पेज English में पढ़ें

मान लीजिए आपके पास एक नया वेंडर आया है और उसने फ़ॉर्म में तीन नंबर भरे हैं: एक दस अक्षर का, एक पंद्रह अक्षर का और एक इक्कीस अक्षर का। पहला PAN है, दूसरा GSTIN और तीसरा CIN। तीनों "सरकारी नंबर" हैं, इसलिए ज़्यादातर टीमें इन्हें एक ही टोकरी में डाल देती हैं। असल में तीनों अलग-अलग दफ़्तरों से निकलते हैं और तीन अलग सवालों का जवाब देते हैं।

PAN बताता है कि इनकम टैक्स के रिकॉर्ड में कौन करदाता है। GSTIN बताता है कि किसी करदाता का किसी एक राज्य में GST रजिस्ट्रेशन है। CIN बताता है कि कोई कंपनी Registrar of Companies के पास दर्ज है। इस गाइड में हम तीनों को एक-एक करके खोलेंगे: नंबर कैसे बनता है, कौन जारी करता है, StampMitra की API से लुकअप करने पर क्या मिलता है, और सबसे ज़रूरी बात, लुकअप से क्या साबित नहीं होता।

यह गाइड उन डेवलपर्स के लिए है जो ऑनबोर्डिंग में चेक जोड़ रहे हैं, और उन फ़ाइनेंस या compliance साथियों के लिए जिन्हें तय करना है कि किस तरह की पार्टी से कौन-सा नंबर माँगा जाए। जो भी endpoint, फ़ील्ड या एरर यहाँ दिखाया गया है, वह StampMitra के API reference से लिया गया है। जो बात reference में लिखी नहीं है, उसे हमने साफ़ लिख दिया है कि वह लिखी नहीं है।

मुख्य बातें

  • PAN करदाता की पहचान है। इसमें दस अक्षर होते हैं और चौथा अक्षर बताता है कि धारक व्यक्ति है, कंपनी है, फ़र्म है या ट्रस्ट।
  • GSTIN एक GST रजिस्ट्रेशन की पहचान है। पंद्रह अक्षरों में राज्य का कोड, धारक का PAN, एंटिटी नंबर, एक स्थायी Z और आख़िर में चेक कैरेक्टर होता है। इसलिए एक PAN के पीछे कई GSTIN हो सकते हैं।
  • CIN कंपनी की पहचान है। इक्कीस अक्षरों में लिस्टिंग, उद्योग, राज्य, साल और कंपनी का प्रकार छिपा होता है। इसमें PAN नहीं होता।
  • लुकअप सिर्फ़ इतना पक्का करता है कि रिकॉर्ड मौजूद है और स्रोत ने जो आख़िरी बार अपडेट किया, वही दिख रहा है। इससे यह साबित नहीं होता कि आपके सामने बैठा आदमी उस नंबर का मालिक है।
  • एंटिटी के प्रकार के हिसाब से नंबर माँगिए: व्यक्ति से PAN, प्रोपराइटर और फ़र्म से PAN और GSTIN, कंपनी से PAN, GSTIN और CIN।
  • लंबाई, अक्षरों की बनावट, राज्य कोड और GSTIN का चेक कैरेक्टर जैसे ऑफ़लाइन चेक फ़ालतू कॉल बचाते हैं। पर docs का सैंपल GSTIN और sandbox के GSTIN चेक कैरेक्टर पर पास नहीं होते, इसलिए यह चेक sandbox में बंद रखिए।
  • हर लुकअप अलग call है, अलग endpoint और scope के साथ, और हर एक का अपना referenceId है। दो नतीजों को आपस में मिलाना आपके कोड का काम है।

तीन नंबर, तीन सवाल: एक नज़र में तुलना

नीचे की तालिका में तीनों पहचानें साथ-साथ रखी हैं। पहले आख़िरी दो पंक्तियाँ पढ़िए, क्योंकि ऑनबोर्डिंग की ग़लतियाँ वहीं होती हैं।

बिंदुPANGSTINCIN
पूरा नामPermanent Account NumberGoods and Services Tax Identification NumberCorporate Identification Number
कौन जारी करता हैआयकर विभागGST प्राधिकरण, GST पोर्टल के ज़रिएकंपनी मामलों के मंत्रालय के अधीन Registrar of Companies
किसकी पहचानकरदाता (व्यक्ति या संस्था)किसी करदाता का एक राज्य या केंद्र शासित प्रदेश में एक GST रजिस्ट्रेशनएक पंजीकृत कंपनी
बनावट10 अक्षर: 5 अक्षर, 4 अंक, 1 अक्षर15 अक्षर: 2 अंक का राज्य कोड, 10 अक्षर का PAN, एंटिटी नंबर, Z, चेक कैरेक्टर21 अक्षर: लिस्टिंग अक्षर, 5 अंक का उद्योग कोड, 2 अक्षर का राज्य, 4 अंक का साल, 3 अक्षर का कंपनी प्रकार, 6 अंक का क्रमांक
सफल लुकअप से क्या साबित होता हैPAN मौजूद है, उसकी एक स्थिति है और रिकॉर्ड में एक नाम हैरजिस्ट्रेशन मौजूद है, उसका legal name, trade name, राज्य और स्थिति हैकंपनी का रिकॉर्ड मौजूद है, नाम, स्थिति और निदेशकों की सूची के साथ
क्या साबित नहीं होताआपका आवेदक वही व्यक्ति है; कारोबार असल में चल रहा हैरिटर्न भरे जा रहे हैं; PAN का मालिक वही है जो आप मान रहे हैंकंपनी चालू है या सॉल्वेंट है; आपके हस्ताक्षरकर्ता को अधिकार है; कंपनी का टैक्स अनुपालन ठीक है
आम इस्तेमाललोगों और संस्थाओं की पहचानवेंडर ऑनबोर्डिंग, इनवॉइस और input tax credit की जाँचकंपनी KYB, कंपनी को कर्ज़, कॉन्ट्रैक्ट की दूसरी पार्टी की जाँच
StampMitra endpointPOST /v1/verify/panPOST /v1/verify/gstinPOST /v1/verify/cin

दो रिश्ते अभी याद कर लीजिए। हर GSTIN के अंदर PAN सीधे बैठा होता है, राज्य कोड और एंटिटी नंबर के बीच। और CIN अकेला खड़ा है: CIN से PAN या GSTIN निकालने का कोई फ़ॉर्मूला नहीं है। कंपनी और उसकी टैक्स पहचानों का रिश्ता लुकअप और नाम की तुलना से ही जुड़ेगा।

PAN को अक्षर-दर-अक्षर पढ़ना

PAN का ढाँचा AAAAA9999A है: पाँच अक्षर, चार अंक, एक अक्षर। यह ढाँचा सार्वजनिक है और बदलता नहीं। StampMitra का PAN endpoint सबसे पहले यही जाँचता है। ग़लत बनावट पर तुरंत 400 आता है और संदेश होता है pan must match the format ABCDE1234F।

स्थानमतलब
1 से 3अक्षरों की क्रमिक श्रृंखला। इसका कोई पढ़ने लायक मतलब नहीं।
4धारक का प्रकार (नीचे की तालिका)।
5व्यक्ति के लिए सरनेम का पहला अक्षर, बाक़ी के लिए संस्था के नाम का पहला अक्षर।
6 से 9क्रमांक।
10अक्षर वाला चेक कैरेक्टर।

कारोबार के लिहाज़ से सबसे काम का चौथा अक्षर है। इससे आप बिना नेटवर्क कॉल किए एक साफ़ ग़लत नंबर पकड़ लेते हैं।

चौथा अक्षरधारक
Pव्यक्ति
Cकंपनी
Hहिंदू अविभाजित परिवार
Fफ़र्म, LLP समेत
Aव्यक्तियों का संघ
Bव्यक्तियों का निकाय
Tट्रस्ट
Lस्थानीय प्राधिकरण
Jकृत्रिम न्यायिक व्यक्ति
Gसरकार

इसे संगति की जाँच की तरह इस्तेमाल कीजिए। कोई कहे कि वह प्राइवेट लिमिटेड कंपनी है और PAN का चौथा अक्षर P निकले, तो या तो उसने अपना निजी PAN दे दिया है या वह कंपनी है ही नहीं। यह सवाल पूछने की वजह है, सीधे reject करने की नहीं, क्योंकि ग़लतियाँ आम हैं। StampMitra का अपना ऑनबोर्डिंग फ़ॉर्म भी यही तर्क लगाता है: व्यक्ति और प्रोपराइटर के लिए P, पार्टनरशिप और LLP के लिए F, कंपनी के लिए C, और ट्रस्ट या सोसाइटी के लिए T या A की उम्मीद।

PAN के जवाब में type भी आता है, जैसे Individual। यानी आप लौटे हुए प्रकार को चौथे अक्षर से और आवेदक के दावे से मिला सकते हैं।

GSTIN की बनावट

GSTIN पंद्रह अक्षर का होता है और हर हिस्से का एक काम है। नीचे docs के सैंपल 07AAAAA1111A1Z1 पर हिस्से तोड़कर दिखाए हैं।

स्थानमतलबसैंपल में
1 से 2GST का राज्य या केंद्र शासित प्रदेश कोड07 (दिल्ली)
3 से 12पंजीकृत करदाता का PANAAAAA1111A
13एंटिटी नंबर: उस राज्य में इस PAN के कितने रजिस्ट्रेशन हैं, 1 से शुरू, फिर A से Z1
14स्थायी अक्षर ZZ
15चेक कैरेक्टर, पहले चौदह से निकला हुआ1

राज्य कोड डाक पिन कोड नहीं हैं

शुरू के दो अंक GST की अपनी सूची के राज्य कोड हैं। दिल्ली 07, उत्तर प्रदेश 09, महाराष्ट्र 27, कर्नाटक 29, तमिलनाडु 33, तेलंगाना 36। केंद्र शासित प्रदेशों और कुछ विशेष मामलों के अपने कोड हैं। आपके validation कोड में पूरी सूची होनी चाहिए, क्योंकि अनजाना कोड मुफ़्त और तुरंत reject का मौक़ा है।

एक PAN, कई GSTIN क्यों

GST रजिस्ट्रेशन राज्य के हिसाब से होता है। जिस कंपनी के तीन राज्यों में दफ़्तर या गोदाम हैं, उसके पास तीन GSTIN होंगे और तीनों में एक ही PAN होगा। एक राज्य में दो अलग कारोबारी रजिस्ट्रेशन भी हो सकते हैं, और तेरहवाँ अक्षर यही गिनता है। इसलिए "इस PAN का GSTIN क्या है?" ग़लत सवाल है। सही सवाल हैं: "इनवॉइस पर जो GSTIN छपा है, वह मेरे verify किए PAN का है या नहीं?" और "supply की जगह किस राज्य से मेल खाती है?" उलटी दिशा के लिए PAN to GSTIN लुकअप है, जो किसी PAN से जुड़े GSTIN की सूची राज्य और स्थिति के साथ लौटाता है।

चेक कैरेक्टर

पंद्रहवाँ अक्षर पहले चौदह का checksum है। इसमें 0 से 9 और A से Z को base 36 के अंक माना जाता है, बारी-बारी से एक और दो से गुणा किया जाता है, हर गुणनफल को वापस base 36 में तोड़कर जोड़ा जाता है और अंत में 36 के modulo का पूरक लिया जाता है। इससे ज़्यादातर एक-अक्षर की टाइपिंग ग़लतियाँ और कई अक्षर-अदला-बदली पकड़ में आ जाती हैं। चलता हुआ कोड आगे "ऑफ़लाइन चेक" वाले हिस्से में है। एक चेतावनी यहीं ज़रूरी है: StampMitra docs का सैंपल GSTIN और sandbox के जो GSTIN लिखे हैं, उनका चेक कैरेक्टर सही नहीं बैठता। वे टेस्ट वैल्यू हैं। फ़ॉर्म में चेक कैरेक्टर की जाँच जोड़ें तो उसे सिर्फ़ production में चलाइए, वरना sandbox के टेस्ट API तक पहुँचने से पहले ही गिर जाएँगे।

CIN की बनावट

CIN इक्कीस अक्षर का होता है। docs का सैंपल U74999DL2015PTC284009 लेकर देखिए।

अक्षरसैंपलमतलब
1Uशेयर बाज़ार में सूचीबद्ध कंपनी के लिए L, असूचीबद्ध के लिए U
2 से 674999राष्ट्रीय उद्योग वर्गीकरण पर आधारित पाँच अंक का उद्योग कोड
7 से 8DLपंजीकृत कार्यालय का राज्य या केंद्र शासित प्रदेश
9 से 122015निगमन का साल
13 से 15PTCकंपनी का प्रकार। आम मान: PTC (प्राइवेट कंपनी), PLC (पब्लिक कंपनी), GOI (सरकारी कंपनी), NPL (गैर-लाभकारी लाइसेंस वाली कंपनी), FTC (विदेशी कंपनी की सहायक)
16 से 21284009Registrar का दिया क्रमांक

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

LLP और बाक़ी संस्थाएँ

LLP को कंपनी जैसा CIN नहीं मिलता। उसकी पहचान LLPIN है, जो तीन अक्षर, एक हाइफ़न और चार अंक जैसा दिखता है। प्रोपराइटरशिप का कंपनी रजिस्ट्री में कोई अपना पंजीकरण होता ही नहीं: उसकी पहचान मालिक का PAN है, और उसके साथ अगर कारोबार के पास GST या Udyam है तो वह। पंजीकृत पार्टनरशिप फ़र्म का फ़र्म PAN (चौथा अक्षर F) होता है, पर वह कंपनी रजिस्ट्री में नहीं, राज्य के फ़र्म रजिस्ट्रार के पास दर्ज होती है। अगर आपके ऑनबोर्डिंग में LLP आते हैं, तो LLPIN को उसी फ़ील्ड में भेजने से पहले CIN verification reference में देख लीजिए कि आपके खाते पर कौन-से इनपुट चलते हैं।

Udyam चौथी पहचान है, जो सूक्ष्म, लघु और मध्यम उद्योगों के पास मिलती है। उसका अलग लुकअप है और अलग गाइड भी: GSTIN, CIN और Udyam से बिज़नेस वेरिफ़िकेशन।

PAN लुकअप से क्या साबित होता है और क्या खुला रहता है

POST /v1/verify/pan के जवाब में valid, type, registeredName, panStatus और panStatusDescription जैसे फ़ील्ड आते हैं, और अगर आपने name भी भेजा हो तो nameMatchResult और nameMatchScore भी। फ़ील्ड की पूरी तालिका इसी गाइड में आगे है।

इससे यह साबित होता है कि नंबर रिकॉर्ड में है, उसकी पढ़ने लायक स्थिति है, और आपके दिए नाम से रिकॉर्ड का नाम कितना मिलता है, यह नापा जा सकता है।

जो साबित नहीं होता, वह इससे ज़्यादा अहम है। यह साबित नहीं होता कि फ़ॉर्म में नंबर डालने वाला आदमी ही PAN का मालिक है। PAN कोई गुप्त चीज़ नहीं है, लोग उसकी फ़ोटो आम तौर पर भेज देते हैं, और लुकअप सिर्फ़ यह देखता है कि नंबर मौजूद है। अगर आपके जोखिम मॉडल को "यह आदमी इस PAN का मालिक है" चाहिए, तो उसके लिए अलग स्वामित्व वाला कदम चाहिए, और StampMitra Aadhaar आधारित verification नहीं देता। पता भी साबित नहीं होता, क्योंकि PAN पते का दस्तावेज़ नहीं है। कारोबार असल में चल रहा है या सॉल्वेंट है, यह भी नहीं। और जवाब स्रोत की आख़िरी ताज़गी को दिखाता है, जिसे API और सरकारी पोर्टल के नतीजों में फ़र्क वाली गाइड विस्तार से समझाती है।

PAN endpoint की गहरी जानकारी के लिए PAN verification API गाइड पढ़िए।

GSTIN लुकअप से क्या साबित होता है और क्या खुला रहता है

POST /v1/verify/gstin में gstin और वैकल्पिक businessName जाता है, और जवाब में valid, legalName, tradeName, registrationStatus, principalPlaceOfBusiness और message लौटते हैं। जाँचे गए नंबर की गूँज GSTIN फ़ील्ड में आती है।

इससे यह साबित होता है कि उस नंबर का रजिस्ट्रेशन मौजूद है, वह एक legal name और trade name पर दर्ज है और उसकी एक स्थिति है। वेंडर ऑनबोर्डिंग में सबसे अहम फ़ील्ड registrationStatus है। docs के सैंपल में Active दिखता है। स्रोत पर दूसरी स्थितियाँ भी होती हैं, जैसे रद्द या निलंबित रजिस्ट्रेशन, और reference उनकी पूरी सूची नहीं देता। इसलिए अपना नियम ऐसा रखिए: "Active हो तो पास, बाक़ी सब समीक्षा में", और कच्चा मान लॉग कर लीजिए।

जो साबित नहीं होता: रिटर्न भरे जा रहे हैं या नहीं, टैक्स चुकाया जा रहा है या नहीं, और जिस संस्था के नाम रजिस्ट्रेशन है वही आपकी कॉन्ट्रैक्ट वाली पार्टी है या नहीं। कोई वेंडर आपको असली और चालू GSTIN थमा सकता है जो असल में किसी और का है। बचाव है नाम की तुलना, इसीलिए endpoint businessName लेता है, और PAN की तुलना, यानी GSTIN के अक्षर 3 से 12 को वेंडर के verify किए PAN से मिलाइए। principal place of business संदर्भ के लिए काम की है, इस बात का सबूत नहीं कि माल कहाँ से जाता है।

स्थितियों और इनपुट नियमों की विस्तृत चर्चा GSTIN को प्रोग्राम से कैसे verify करें में है।

CIN लुकअप से क्या साबित होता है और क्या खुला रहता है

POST /v1/verify/cin में cin जाता है और जवाब में valid, companyName, incorporationDate, cinStatus, companyStatus, directors की सूची (हर एक में din, name, designation), directorDetails की सूची जो हर director में dob और address जोड़ती है, email, registrationNumber और incorporationCountry आते हैं।

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

जो साबित नहीं होता: आवेदक इन निदेशकों में से है या उनका अधिकृत प्रतिनिधि है (इसके लिए बोर्ड प्रस्ताव या authorisation letter चाहिए, और StampMitra का production access फ़ॉर्म ठीक इन्हीं दस्तावेज़ों को माँगता है), कंपनी का कारोबार चल रहा है, और उसके टैक्स रजिस्ट्रेशन ठीक हैं। कंपनी रजिस्टर में हो सकती है और उसके पास वैध GST रजिस्ट्रेशन न हो, और नाम बदलने के बाद GSTIN पुराने नाम से भी दिख सकता है।

तीनों आपस में कहाँ जुड़ते हैं और कहाँ कभी नहीं

रिश्ते सिर्फ़ एक दिशा में चलते हैं।

  • GSTIN के अंदर PAN है। अक्षर 3 से 12 निकालकर किसी भी verify किए PAN से मिलाइए।
  • PAN के अंदर GSTIN नहीं है। इसके लिए PAN to GSTIN लुकअप चाहिए, या वेंडर खुद बताए।
  • CIN के अंदर दोनों में से कुछ नहीं। कंपनी का CIN उसके PAN से जोड़ने के लिए कंपनी से PAN माँगिए, उसे verify कीजिए और PAN से लौटे नाम को CIN से लौटे कंपनी नाम से मिलाइए।
  • PAN का चौथा अक्षर एंटिटी के प्रकार से मेल खाना चाहिए: कंपनी के लिए C, फ़र्म या LLP के लिए F, व्यक्ति या प्रोपराइटर के लिए P।

इससे पाँच सस्ती संगति-जाँचें बनती हैं, जिनमें उन calls के अलावा कुछ अतिरिक्त ख़र्च नहीं जो आप वैसे भी कर रहे थे।

  1. PAN का चौथा अक्षर दावा किए गए प्रकार से मेल खाता है।
  2. GSTIN के अक्षर 3 से 12 verify किए PAN के बराबर हैं।
  3. GSTIN का राज्य कोड वेंडर के बताए पते के हिसाब से समझ में आता है। पुणे के वेंडर का कर्नाटक रजिस्ट्रेशन हो सकता है, पर आपको कारण पता होना चाहिए।
  4. GSTIN, PAN और CIN से आए नाम सामान्य रूप में एक जैसे हैं, यानी अक्षरों का केस, विराम चिह्न और "Private Limited" बनाम "Pvt Ltd" को एक करने के बाद।
  5. कंपनी के मामले में आवेदन करने वाला व्यक्ति CIN के directors में है या उसके पास authorisation दस्तावेज़ है।

किस तरह की पार्टी से कौन-सा नंबर माँगें

सबसे सब कुछ माँगने से यूज़र बीच में छोड़ जाते हैं और पैसा बेवजह लगता है। वही माँगिए जो वह एंटिटी रख सकती है।

पार्टीक्या माँगेंक्योंवैकल्पिक
व्यक्ति (ग्राहक, फ़्रीलांसर, किरायेदार)PANव्यक्ति के पास यही एकमात्र टैक्स पहचान हैभुगतान के लिए बैंक खाता
प्रोपराइटरमालिक का PAN, और कारोबार GST लेता हो तो GSTINकारोबार और व्यक्ति एक ही हैंUdyam नंबर, बैंक खाता
पार्टनरशिप फ़र्मफ़र्म का PAN, रजिस्टर्ड हो तो GSTINफ़र्म PAN का चौथा अक्षर F होता हैपार्टनरशिप डीड, authorisation letter
LLPफ़र्म PAN, LLPIN, रजिस्टर्ड हो तो GSTINअपने रजिस्ट्री नंबर वाली संस्थाauthorisation letter
प्राइवेट या पब्लिक कंपनीकंपनी PAN, GSTIN, CINतीन स्वतंत्र रिकॉर्ड जिन्हें आपस में मिलाया जा सकता हैबोर्ड प्रस्ताव, निदेशक का PAN
ट्रस्ट या सोसाइटीट्रस्ट PAN, रजिस्टर्ड हो तो GSTINचौथा अक्षर T या Aट्रस्ट डीड, authorisation letter

वेंडर पर किस क्रम में कौन-से चेक चलाएँ, इसका पूरा ढाँचा वेंडर ऑनबोर्डिंग फ़्लो में है। व्यक्तिगत और कारोबारी कर्ज़दारों के लिए KYC बनाम KYB देखिए।

कॉल करने से पहले ऑफ़लाइन चेक

फ़ॉर्मेट की जाँच मुफ़्त है, तुरंत होती है और सबसे आम इनपुट ग़लतियाँ पकड़ लेती है। इससे 400 वाला रास्ता उन मामलों के लिए बचा रहता है जिनकी आपने कल्पना नहीं की थी। तीनों के लिए नीचे छोटा JavaScript संस्करण है।

JavaScript
// identifiers.mjs
const PAN_RE = /^[A-Z]{5}[0-9]{4}[A-Z]$/;
const GSTIN_RE = /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][1-9A-Z]Z[0-9A-Z]$/;
const CIN_RE = /^[LU][0-9]{5}[A-Z]{2}[0-9]{4}[A-Z]{3}[0-9]{6}$/;

const PAN_TYPES = { P: "Individual", C: "Company", H: "HUF", F: "Firm or LLP", A: "AOP", B: "BOI", T: "Trust", L: "Local authority", J: "Artificial juridical person", G: "Government" };

export function checkPan(raw) {
  const pan = String(raw ?? "").trim().toUpperCase();
  if (!PAN_RE.test(pan)) return { ok: false, reason: "FORMAT" };
  const holder = PAN_TYPES[pan[3]];
  if (!holder) return { ok: false, reason: "HOLDER_TYPE" };
  return { ok: true, pan, holder };
}

const CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
function gstinCheckChar(first14) {
  let sum = 0;
  for (let i = 0; i < 14; i++) {
    const product = CHARSET.indexOf(first14[i]) * (i % 2 === 0 ? 1 : 2);
    sum += Math.floor(product / 36) + (product % 36);
  }
  return CHARSET[(36 - (sum % 36)) % 36];
}

export function checkGstin(raw, { checkDigit = true } = {}) {
  const gstin = String(raw ?? "").trim().toUpperCase();
  if (!GSTIN_RE.test(gstin)) return { ok: false, reason: "FORMAT" };
  if (checkDigit && gstinCheckChar(gstin.slice(0, 14)) !== gstin[14]) return { ok: false, reason: "CHECKSUM" };
  return { ok: true, gstin, stateCode: gstin.slice(0, 2), embeddedPan: gstin.slice(2, 12) };
}

जिस key का prefix sk_test_ हो, वहाँ checkDigit को false कर दीजिए। docs का सैंपल 07AAAAA1111A1Z1 और sandbox के GSTIN चेक कैरेक्टर पर फ़ेल होते हैं, और placeholder के लिए यही अपेक्षित है। CIN का पैटर्न यहाँ जान-बूझकर छोड़ा है: असली CIN में, ख़ासकर पुराने रिकॉर्ड में, कंपनी-प्रकार वाले हिस्से में बदलाव दिखे हैं, इसलिए क्लाइंट पर ढीला रहिए और अंतिम फ़ैसला API पर छोड़िए। झूठा reject आपका ग्राहक खोता है, झूठा accept सिर्फ़ एक call ख़र्च कराता है।

वही जाँच Python में

Python
import re

PAN_RE = re.compile(r"^[A-Z]{5}[0-9]{4}[A-Z]$")
GSTIN_RE = re.compile(r"^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][1-9A-Z]Z[0-9A-Z]$")
CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

def gstin_check_char(first14: str) -> str:
    total = 0
    for i, ch in enumerate(first14):
        product = CHARSET.index(ch) * (1 if i % 2 == 0 else 2)
        total += product // 36 + product % 36
    return CHARSET[(36 - total % 36) % 36]

def split_gstin(raw: str, check_digit: bool = True) -> dict:
    gstin = (raw or "").strip().upper()
    if not GSTIN_RE.match(gstin):
        return {"ok": False, "reason": "FORMAT"}
    if check_digit and gstin_check_char(gstin[:14]) != gstin[14]:
        return {"ok": False, "reason": "CHECKSUM"}
    return {"ok": True, "gstin": gstin, "state_code": gstin[:2], "embedded_pan": gstin[2:12]}

तीनों endpoint को कॉल करना

तीनों /v1/verify/ के नीचे POST endpoint हैं। प्रमाणीकरण Authorization: Bearer <key> से होता है (x-api-key header भी चलता है) और हर एक के लिए key पर अपना scope चाहिए: verification.pan.read, verification.gstin.read और verification.cin.read। scope न हो तो 403 आता है, code FORBIDDEN के साथ। नीचे docs की सैंपल वैल्यू से तीनों calls हैं।

cURL
curl -X POST "https://api-b2b.stampmitra.in/v1/verify/pan" \
  -H "Authorization: Bearer $STAMPMITRA_API_KEY" -H "Content-Type: application/json" \
  -d '{"pan":"ABCDE1234F","name":"Rahul Kumar"}'

curl -X POST "https://api-b2b.stampmitra.in/v1/verify/gstin" \
  -H "Authorization: Bearer $STAMPMITRA_API_KEY" -H "Content-Type: application/json" \
  -d '{"gstin":"07AAAAA1111A1Z1","businessName":"Jane Doe Enterprises"}'

curl -X POST "https://api-b2b.stampmitra.in/v1/verify/cin" \
  -H "Authorization: Bearer $STAMPMITRA_API_KEY" -H "Content-Type: application/json" \
  -d '{"cin":"U74999DL2015PTC284009"}'

Python में तीनों नतीजे एक छोटे helper से:

Python
import os, requests

BASE = "https://api-b2b.stampmitra.in/v1/verify"
HEADERS = {"Authorization": f"Bearer {os.environ['STAMPMITRA_API_KEY']}", "Content-Type": "application/json"}

def call(path: str, body: dict) -> dict:
    r = requests.post(f"{BASE}/{path}", json=body, headers=HEADERS, timeout=10)
    data = r.json()
    if not r.ok:
        raise RuntimeError(f"{r.status_code} {data['error']['code']} request={data['error']['requestId']}")
    return data

pan = call("pan", {"pan": "ABCDE1234F", "name": "Jane Doe Enterprises Private Limited"})
gstin = call("gstin", {"gstin": "07AAAAA1111A1Z1", "businessName": "Jane Doe Enterprises"})
cin = call("cin", {"cin": "U74999DL2015PTC284009"})
print(pan["referenceId"], gstin["registrationStatus"], [d["din"] for d in cin["directors"]])

हर लुकअप में किन फ़ील्ड पर ध्यान दें

Endpointइन पर फ़ैसला लेंइन्हें सहेजेंइन्हें निजी डेटा मानें
PANvalid, panStatus, type, nameMatchResultreferenceId, pan (लॉग में मास्क करके), nameMatchScore, lastUpdatedAtregisteredName, fatherName
GSTINvalid, registrationStatusreferenceId, GSTIN, legalName, tradeNamelegalName में प्रोपराइटर का नाम
CINvalid, cinStatus, companyStatusreferenceId, registrationNumber, incorporationDatedirectors[].name, directors[].din, email

हर सफल जवाब में referenceId आता है, जिसका रूप SMV-YYYYMMDD-XXXXXXX है। नकारात्मक नतीजे में भी वह आता है, क्योंकि नकारात्मक फ़ैसला भी पूरा हुआ लुकअप है और उसका बिल बनता है। वह call की पहचान है, दोबारा भेजी गई कॉल की डुप्लीकेट पहचान नहीं।

तीनों को एक साथ कैसे सहेजें

ज़्यादातर टीमें वेंडर की पंक्ति में तीन टेक्स्ट कॉलम से शुरू करती हैं और बाद में पछताती हैं। तीनों पहचानों की उम्र और रिश्ते अलग हैं, इसलिए डेटा भी वैसे ही रखिए: एक एंटिटी का रिकॉर्ड, हर टैक्स रजिस्ट्रेशन की एक पंक्ति, और हर verification घटना की एक पंक्ति।

JSON
{
  "entity": { "id": "ent_1042", "claimedType": "PRIVATE_LTD", "pan": "ABCDE1234F", "cin": "U74999DL2015PTC284009" },
  "registrations": [
    { "gstin": "07AAAAA1111A1Z1", "stateCode": "07", "lastStatus": "Active", "lastCheckedAt": "2026-10-29" }
  ],
  "verifications": [
    { "referenceId": "SMV-20260927-8F42K7", "kind": "pan", "checkedAt": "2026-10-29", "outcome": "valid" }
  ]
}

PAN एंटिटी का होता है और कम बदलता है, जबकि GSTIN कारोबार के राज्य-रजिस्ट्रेशन खुलने-बंद होने के साथ आते-जाते हैं, इसलिए उनकी अलग पंक्तियाँ बनती हैं। स्थिति एक पल का तथ्य है, इसलिए उसके साथ lastCheckedAt रखिए और उसे समय-समय पर ताज़ा कीजिए। और referenceId से जुड़ी verification पंक्ति आपको पूरा जवाब अपने मुख्य डेटाबेस में रखे बिना ऑडिट की कड़ी दे देती है। रिटेंशन और मास्किंग पर verification कॉल से क्या लॉग करें में बात है।

एक पूरा उदाहरण: प्राइवेट लिमिटेड वेंडर जोड़ना

एक काल्पनिक ट्रेडिंग कंपनी, Jane Doe Enterprises Private Limited, वेंडर बनने के लिए आवेदन करती है। आवेदक आपको तीन नंबर और एक व्यक्ति का नाम देता है।

  1. ऑफ़लाइन: PAN का चौथा अक्षर C है, जो "प्राइवेट लिमिटेड कंपनी" से मेल खाता है। GSTIN में वही PAN बैठा है। CIN में PTC कोड है। एक भी call ख़र्च नहीं हुई और तीन संगति-जाँचें पास हो गईं।
  2. PAN call: valid सही है, type कंपनी दिखाता है और registeredName है JANE DOE ENTERPRISES PRIVATE LIMITED।
  3. GSTIN call: registrationStatus Active है, legalName PAN के नाम से मिलता है, principalPlaceOfBusiness बेंगलुरु की है और राज्य कोड 29 यानी कर्नाटक है। वेंडर के इनवॉइस का पता भी बेंगलुरु का है, इसलिए समझाने को कुछ नहीं।
  4. CIN call: cinStatus और companyStatus चालू हैं, incorporationDate 2015-03-12 है और directors में Rahul Kumar नाम का एक निदेशक है।
  5. आवेदन करने वाला व्यक्ति Rahul Kumar है। उसका अधिकार संभावित है पर लुकअप से साबित नहीं, इसलिए आप बोर्ड प्रस्ताव या authorisation letter माँगते हैं, जैसा StampMitra खुद कंपनियों से माँगता है।

कुल ख़र्च तीन calls। अगर GSTIN की स्थिति Active के अलावा कुछ होती, या उसका legal name PAN के नाम से विराम चिह्नों से ज़्यादा अलग होता, या कोई निदेशक आवेदक से न मिलता, तो फ़ैसला अलग होता। हर ऐसे मामले में सही कदम स्वचालित reject नहीं, तीनों referenceId के साथ हाथ से समीक्षा है।

ऐसे किनारे के मामले जो सीधी जाँच को तोड़ देते हैं

लुकअप सीधे हैं। जिन संस्थाओं का वे वर्णन करते हैं, वे हमेशा सीधी नहीं होतीं। पहला अजीब वेंडर आने से पहले इनकी तैयारी कर लीजिए।

प्रोपराइटर के दो नाम होते हैं। PAN में व्यक्ति का नाम होता है, जबकि GST रजिस्ट्रेशन में वही व्यक्ति legal name है और दुकान का ब्रांड trade name। PAN के नाम की tradeName से तुलना फ़ेल होगी और legalName से पास। सही फ़ील्ड से तुलना कीजिए।

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

कंपनियाँ बदलती और नाम बदलती हैं। प्राइवेट से पब्लिक बनी कंपनी, या पंजीकृत कार्यालय दूसरे राज्य ले जाने वाली कंपनी, अपनी पुरानी लेटरहेड वाले CIN से अलग CIN पर पहुँच सकती है। नाम बदली कंपनी के पास ऐसा GSTIN भी हो सकता है जिसका legal name अभी पुराना है। जब वेंडर की कसम खाई हुई CIN पर लुकअप "नहीं मिला" कहे, तो धोखे का अनुमान लगाने से पहले ताज़ा incorporation प्रमाणपत्र माँगिए।

एक वेंडर, कई GSTIN। राष्ट्रीय वेंडर जिस दफ़्तर से माल जाए उसका रजिस्ट्रेशन दे सकता है। सबमें एक ही PAN होना चाहिए। अगर आप हर वेंडर के लिए सिर्फ़ एक GSTIN स्वीकार करते हैं, तो आपकी इनवॉइसिंग कभी न कभी असली दस्तावेज़ ठुकरा देगी।

हर किसी के पास GSTIN नहीं होता। रजिस्ट्रेशन की सीमा से नीचे के छोटे कारोबार, कुछ छूट वाले आपूर्तिकर्ता और कई सेवा देने वाले वैध रूप से बिना GSTIN के होते हैं। बिना रजिस्ट्रेशन वाले आपूर्तिकर्ता से ख़रीदना ठीक है या नहीं, यह टैक्स और नीति का सवाल है जो आपकी फ़ाइनेंस टीम तय करेगी। verification API इसका जवाब नहीं दे सकती।

विदेशी पार्टियाँ। विदेशी वेंडर के पास तीनों में से कोई नहीं होता। PAN फ़ील्ड में नक़ली placeholder भरवाने की कोशिश मत कीजिए। अनिवासी पार्टियों को दूसरी प्रक्रिया में भेजिए।

सरकारी और सार्वजनिक संस्थाएँ। उनके PAN का चौथा अक्षर G या L होता है और हो सकता है उनके पास CIN हो ही नहीं। "हर गैर-व्यक्ति को CIN देना ज़रूरी" वाला नियम उन्हें रोक देगा।

LLP के पास CIN नहीं, LLPIN होता है। सीमित दायित्व साझेदारी का PAN चौथे अक्षर F के साथ फ़र्म जैसा दिखता है, पर कंपनी-रजिस्ट्री वाला CIN उसके पास नहीं होता। अगर आपके नियम में "फ़र्म हो तो GSTIN, कंपनी हो तो CIN" लिखा है, तो LLP को किस खाने में रखना है, यह पहले से लिख लीजिए। इस गाइड के endpoint CIN तक सीमित हैं, इसलिए LLP के लिए PAN, GSTIN और दस्तावेज़ों पर टिकिए।

ट्रस्ट, सोसाइटी और संयुक्त हिंदू परिवार। इनके PAN के चौथे अक्षर अलग होते हैं (जैसे ट्रस्ट के लिए T, परिवार के लिए H), और इनका GSTIN हो भी सकता है और नहीं भी। जो फ़ॉर्म हर गैर-व्यक्ति से CIN माँगता है, वह इन्हें वहीं रोक देगा। फ़ॉर्म में "संस्था का प्रकार" पहले पूछिए और उसी के हिसाब से अगले खाने दिखाइए।

कॉपी-पेस्ट से बिगड़े नंबर। वेंडर अक्सर नंबर किसी PDF या ईमेल से चिपकाते हैं और साथ में खाली जगह, लाइन टूटने का निशान या छोटे अक्षर आ जाते हैं। इन्हें अपनी तरफ़ साफ़ कर दीजिए (खाली जगह हटाइए, बड़े अक्षर कीजिए) और फिर ऑफ़लाइन जाँच चलाइए। इससे वह विफलता call तक पहुँचती ही नहीं जो असल में सिर्फ़ चिपकाने की ग़लती थी।

GSTIN का राज्य और पता मेल न खाएँ। राज्य कोड रजिस्ट्रेशन के राज्य को बताता है, वेंडर के इनवॉइस पते को नहीं। जो वेंडर एक राज्य में रजिस्टर्ड है और दूसरे राज्य के पते से इनवॉइस भेजता है, उसकी ग़लती नहीं भी हो सकती। इसे समीक्षा का सवाल बनाइए, अस्वीकार का कारण नहीं, और अपने कर सलाहकार से पूछ लीजिए कि ऐसे वेंडर से किस राज्य का GSTIN माँगना है।

रनबुक में चिपकाने लायक फ़ैसले का क्रम

सीधे-सादे चरणों में, ताकि compliance समीक्षक और इंजीनियर दोनों पढ़ सकें।

  1. एंटिटी का प्रकार जो पहचानें रख सकता है, वही माँगिए (ऊपर की तालिका)। जो पहचान प्रकार के पास होनी चाहिए वह आवेदक न दे सके तो रुककर कारण पूछिए।
  2. ऑफ़लाइन फ़ॉर्मेट जाँच चलाइए। यहाँ विफलता टाइपिंग की ग़लती है, verification का नतीजा नहीं। यूज़र को सुधार का संदेश दिखाइए, call ख़र्च मत कीजिए।
  3. PAN का चौथा अक्षर दावा किए गए प्रकार से मिलाइए। बेमेल पर स्पष्टीकरण का सवाल पूछिए, reject मत कीजिए।
  4. PAN verify कीजिए। valid ग़लत हो तो रुकिए। स्थिति सामान्य वैध स्थिति से अलग हो तो समीक्षा में भेजिए।
  5. GSTIN दिया हो तो उसे verify कीजिए। registrationStatus Active और GSTIN में बैठा PAN verify किए PAN के बराबर होना चाहिए।
  6. एंटिटी कंपनी हो तो CIN verify कीजिए। कंपनी का नाम मिलाइए और निदेशकों में आवेदक को खोजिए।
  7. तीनों नाम सामान्य रूप में आने के बाद मिलाइए। सीमा से नीचे वाला हर मामला सभी referenceId के साथ समीक्षा में जाए।
  8. नतीजा, तारीख़ और पहचानें दर्ज कीजिए। रजिस्ट्रेशन की दोबारा जाँच की समय-सारणी बनाइए, क्योंकि ऑनबोर्डिंग के समय चालू GSTIN बाद में रद्द हो सकता है।

बेमेल के आम पैटर्न और उनका मतलब

क्या दिखाआम निर्दोष वजहआम जोखिम भरी वजहक्या करें
PAN का नाम GSTIN के legal name से अलगनाम बदला, विराम चिह्न, "Pvt" बनाम "Private"रजिस्ट्रेशन किसी और संस्था का हैसामान्य रूप में लाइए, फिर निगमन या नाम-बदलाव का प्रमाणपत्र माँगिए
GSTIN में दिए PAN से अलग PAN बैठा हैआवेदक ने निदेशक या प्रोपराइटर का PAN दे दियाआवेदक उधार का GSTIN इस्तेमाल कर रहा हैपूछिए कि रजिस्ट्रेशन किस PAN पर हुआ
CIN का कंपनी नाम GSTIN के legal name से अलगGSTIN पर trade name है, या नाम-बदलाव अभी आगे नहीं पहुँचाअसंबंधित संस्थाएँincorporation प्रमाणपत्र से मिलाइए
PAN वैध पर GSTIN चालू नहींरजिस्ट्रेशन लैप्स या रद्द हुआ और बहाल नहीं हुआवैध रजिस्ट्रेशन के बिना कारोबारसमाधान तक GST इनवॉइसिंग के लिए ऑनबोर्ड मत कीजिए
आवेदक निदेशकों में नहींस्रोत की निदेशक सूची हाल की नियुक्ति से पीछे हैआवेदक के पास अधिकार नहींauthorisation letter और बोर्ड प्रस्ताव माँगिए

Sandbox की वैल्यू और sandbox कॉल से क्या पता चलता है

Sandbox में API सैंपल डेटा लौटाती है और किसी असली रिकॉर्ड को कभी verify नहीं करती। दर्ज टेस्ट इनपुट का नतीजा पहले से तय है: PAN SNDBX0000A वैध है और SNDBX9999F अवैध। GSTIN 09SNDBX0000A1Z5 वैध और सक्रिय है, और 09SNDBX9999F1Z5 अवैध है तथा रद्द दिखता है। CIN के लिए U00000SB0000SANDBOX000001 वैध है और U00000SB0000SANDBOX999999 अवैध। इनके अलावा किसी भी इनपुट का नतीजा स्थिर पर मनमाना होता है: एक ही इनपुट पर हमेशा एक ही जवाब आता है, और मोटे तौर पर तीन में से दो बार वैध निकलता है। लौटे सारे नाम बनावटी हैं।

दो सावधानियाँ। CIN की टेस्ट वैल्यू इक्कीस अक्षर की नहीं हैं, इसलिए आपके फ़ॉर्म का CIN पैटर्न उन्हें ठुकराए तो sandbox में ढीले पैटर्न से API को आज़माइए। और sandbox के "valid" को किसी असली कंपनी का सबूत कभी मत मानिए। डेमो में sandbox नतीजों पर भरोसा करने से पहले sandbox में क्या टेस्ट हो सकता है और क्या नहीं पढ़ लीजिए।

कॉल का हिसाब और ख़र्च

production में हर लुकअप अलग बिल होने वाली call है, इसलिए calls का क्रम ख़र्च का फ़ैसला भी है। standard pay-as-you-go दर पर PAN की call ₹5, GSTIN की ₹5 और CIN की ₹5 है। प्लान में ये दरें घटती हैं, और मौजूदा तालिका pricing पेज पर है। sandbox की calls आपके wallet से कभी नहीं कटतीं। व्यावहारिक क्रम: पहले मुफ़्त ऑफ़लाइन चेक, फिर PAN, फिर GSTIN सिर्फ़ तब जब PAN पास हो, और CIN सिर्फ़ कंपनियों के लिए। जिस व्यक्ति के पास रजिस्ट्रेशन नहीं, उसके लिए GSTIN की call मत कीजिए, और प्रोपराइटर के लिए CIN की call मत कीजिए।

आम ग़लतियाँ

  • GSTIN को निगमन का सबूत मान लेना। प्रोपराइटर के पास GSTIN हो सकता है और कोई कंपनी बिल्कुल नहीं।
  • नामों को बिल्कुल बराबर वाली स्ट्रिंग तुलना से मिलाना। पहले केस, विराम चिह्न और आम प्रत्यय एक कीजिए, फिर जहाँ API स्कोर देती है वह स्कोर इस्तेमाल कीजिए।
  • सिर्फ़ valid: true सहेजना। referenceId, तारीख़ और जिन फ़ील्ड पर फ़ैसला लिया उन्हें सहेजिए, वरना बाद में फ़ैसले की सफ़ाई नहीं दे पाएँगे।
  • sandbox में GSTIN का चेक कैरेक्टर चलाना। वह हर दर्ज सैंपल को ठुकरा देता है।
  • यह भूल जाना कि एक PAN के कई GSTIN होते हैं, और वेंडर के पहले बताए GSTIN को ही verify करके रुक जाना।
  • पुराने दस्तावेज़ से लिया CIN बिना यह देखे इस्तेमाल करना कि उसके अंदर का राज्य या लिस्टिंग की स्थिति बदल चुकी हो सकती है।
  • endpoint को ब्राउज़र से कॉल करना। key आपके सर्वर पर रहनी चाहिए, देखिए authentication।

शब्दावली

शब्दमतलब
PANPermanent Account Number, दस अक्षर की आयकर पहचान
GSTINपंद्रह अक्षर का GST रजिस्ट्रेशन नंबर
CINRegistrar of Companies का इक्कीस अक्षर का कंपनी पहचान नंबर
LLPINसीमित देयता भागीदारी की पहचान संख्या
DINनिदेशक पहचान संख्या
RoCकंपनियों का रजिस्ट्रार
Udyamसूक्ष्म, लघु और मध्यम उद्योगों का पंजीकरण
referenceIdएक verification call की StampMitra की अपनी पहचान

आगे क्या करें

चेक बना रहे हैं तो quickstart से sandbox key लीजिए और फिर PAN, GSTIN और CIN के endpoint reference पढ़िए। विफलताओं को सँभालने के लिए एरर, retry और idempotency देखिए। हर call के बाद क्या रखना है, यह verification कॉल से क्या लॉग करें में है। यहाँ जिन इनपुट की बात नहीं हुई, उनके सवाल support को भेजिए।

API reference एक नज़र में

PAN

PAN: paramsPOST /v1/verify/pan

Request parameters

Request parameters
FieldTypeDescription
AuthorizationrequiredheaderBearer <api-key> (e.g. sk_test_... in sandbox, sk_live_... in production). The x-api-key header is also accepted.
panrequiredstringPAN, format ABCDE1234F.
namestringName to match against records (max 256 chars).
PAN: responsePOST /v1/verify/pan
{
  "referenceId": "SMV-20260927-8F42K7",
  "pan": "ABCDE1234F",
  "type": "Individual",
  "valid": true,
  "registeredName": "RAHUL KUMAR",
  "fatherName": "SURESH KUMAR",
  "panStatus": "VALID",
  "panStatusCode": "E",
  "panStatusDescription": "Existing and valid PAN",
  "nameMatchResult": "MATCH",
  "nameMatchScore": "100",
  "aadhaarSeedingStatus": "y",
  "aadhaarSeedingStatusDescription": "Aadhaar linked",
  "lastUpdatedAt": "2023-04-01",
  "message": "PAN is Valid"
}
PAN: pricePOST /v1/verify/pan

PAN: ₹5 per successful call, pay-as-you-go (lower on Growth and Scale).

GSTIN

GSTIN: paramsPOST /v1/verify/gstin

Request parameters

Request parameters
FieldTypeDescription
AuthorizationrequiredheaderBearer <api-key> (e.g. sk_test_... in sandbox, sk_live_... in production). The x-api-key header is also accepted.
gstinrequiredstring15-character GSTIN, format 07AAAAA1111A1Z1.
businessNamestringBusiness (legal or trade) name to cross-check against the registration.
GSTIN: responsePOST /v1/verify/gstin
{
  "referenceId": "SMV-20260927-9K21P4",
  "verificationId": "VRF-4M8Q2T7XB9KD",
  "gstin": "29AAICP2912R1ZR",
  "GSTIN": "29AAICP2912R1ZR",
  "valid": true,
  "legalNameOfBusiness": "UJJIVAN SMALL FINANCE BANK LIMITED",
  "tradeNameOfBusiness": "UJJIVAN SMALL FINANCE BANK",
  "centerJurisdiction": "I-A RANGE",
  "stateJurisdiction": "GUWAHATI - A - 1",
  "dateOfRegistration": "2017-09-30",
  "constitutionOfBusiness": "Public Limited Company",
  "taxpayerType": "Regular",
  "gstinStatus": "Active",
  "lastUpdateDate": "2022-03-01",
  "natureOfBusinessActivities": [
    "Retail Business",
    "Supplier of Services",
    "Recipient of Goods or Services",
    "Office / Sale Office",
    "Others"
  ],
  "principalPlaceAddress": "First Floor 3512-DISPUR Prithivi Mansion opp. KFC building G.S. Road, Lachit Nagar Assam 781007",
  "principalPlaceSplitAddress": {
    "buildingName": "Prithivi Mansion",
    "street": "G.S. Road",
    "location": "Lachit Nagar",
    "buildingNumber": "3512-DISPUR",
    "district": "Guwahati",
    "state": "Assam",
    "city": "Dispur",
    "flatNumber": "First Floor",
    "latitude": "26.1445",
    "longitude": "91.7362",
    "pincode": "781007"
  },
  "additionalAddresses": [
    {
      "address": "Mirza Santipur NH-37 Dist-Kamrup Rural PS-Palashbari, PO  Mirza Kamrup Assam 781125",
      "splitAddress": {
        "buildingName": "",
        "street": "NH-37",
        "location": "Santipur, Mirza",
        "buildingNumber": "",
        "district": "Kamrup Rural",
        "state": "Assam",
        "city": "Palashbari",
        "flatNumber": "",
        "latitude": "26.0926",
        "longitude": "91.5069",
        "pincode": "781125"
      }
    },
    {
      "address": "N.A.C.C.I. Foundation 3559-Tezpur CHAMBER BHAWAN Binjraj Road, P. o. and P.S. - Tezpur, Dist. Binjraj Road, P. o. and P.S. - Tezpur, Dist. Sonitpur Assam 784154",
      "splitAddress": {
        "buildingName": "CHAMBER BHAWAN",
        "street": "Binjraj Road",
        "location": "Tezpur",
        "buildingNumber": "3559-Tezpur",
        "district": "Sonitpur",
        "state": "Assam",
        "city": "Tezpur",
        "flatNumber": "",
        "latitude": "26.6338",
        "longitude": "92.8006",
        "pincode": "784154"
      }
    }
  ],
  "message": "GSTIN Exists",
  "legalName": "UJJIVAN SMALL FINANCE BANK LIMITED",
  "tradeName": "UJJIVAN SMALL FINANCE BANK",
  "registrationStatus": "Active",
  "principalPlaceOfBusiness": "First Floor 3512-DISPUR Prithivi Mansion opp. KFC building G.S. Road, Lachit Nagar Assam 781007"
}
GSTIN: pricePOST /v1/verify/gstin

GSTIN: ₹5 per successful call, pay-as-you-go (lower on Growth and Scale).

Company CIN

Company CIN: paramsPOST /v1/verify/cin

Request parameters

Request parameters
FieldTypeDescription
AuthorizationrequiredheaderBearer <api-key> (e.g. sk_test_... in sandbox, sk_live_... in production). The x-api-key header is also accepted.
cinrequiredstringCorporate Identification Number (21 characters) or LLPIN, for example U74999DL2015PTC284009.
Company CIN: responsePOST /v1/verify/cin
{
  "referenceId": "SMV-20260927-6R38Y3",
  "verificationId": "VRF-6C2N9V4HQ7ZE",
  "valid": true,
  "status": "VALID",
  "cin": "U72900KA2015PTC082988",
  "companyName": "COMPANY NAME",
  "registrationNumber": 82987,
  "incorporationDate": "2015-09-23",
  "cinStatus": "ACTIVE",
  "email": "[email protected]",
  "incorporationCountry": "INDIA",
  "directorDetails": [
    {
      "din": "07168822",
      "name": "Frank Kelvin",
      "dob": "1997-07-21",
      "designation": "DIRECTOR",
      "address": "ST BED KORAMANGALA, BANGALORE, KARNATAKA, INDIA, 566634"
    },
    {
      "din": "07168826",
      "name": "John Doe",
      "dob": "1997-02-07",
      "designation": "DIRECTOR",
      "address": "GAUTAM NAGAR, NOIDA, UTTAR PRADESH, INDIA, 211361"
    }
  ],
  "companyStatus": "ACTIVE",
  "directors": [
    {
      "din": "07168822",
      "name": "Frank Kelvin",
      "designation": "DIRECTOR"
    },
    {
      "din": "07168826",
      "name": "John Doe",
      "designation": "DIRECTOR"
    }
  ]
}
Company CIN: pricePOST /v1/verify/cin

Company CIN: ₹5 per successful call, pay-as-you-go (lower on Growth and Scale).

अक्सर पूछे जाने वाले सवाल

PAN, GSTIN और CIN में मुख्य फ़र्क क्या है?

PAN करदाता की दस अक्षर की आयकर पहचान है, GSTIN एक GST रजिस्ट्रेशन का पंद्रह अक्षर का नंबर है, और CIN Registrar of Companies में दर्ज कंपनी का इक्कीस अक्षर का नंबर है। तीनों अलग दफ़्तरों से आते हैं और अलग सवालों का जवाब देते हैं।

क्या GSTIN के अंदर PAN होता है?

हाँ। GSTIN के अक्षर 3 से 12 पंजीकृत करदाता का PAN होते हैं। इसीलिए किसी GSTIN को आप पहले से verify किए PAN से बिना दूसरी call के मिला सकते हैं, और इसीलिए एक PAN कई GSTIN के अंदर दिख सकता है।

क्या CIN से कंपनी का PAN निकाला जा सकता है?

नहीं। CIN में लिस्टिंग, उद्योग, राज्य, साल और कंपनी का प्रकार छिपा होता है, PAN नहीं। कंपनी से उसका PAN माँगिए, उसे verify कीजिए और PAN के नाम को CIN लुकअप से आए कंपनी नाम से मिलाइए।

PAN का चौथा अक्षर क्या बताता है?

वह धारक का प्रकार बताता है: P व्यक्ति, C कंपनी, H हिंदू अविभाजित परिवार, F फ़र्म (LLP समेत), A व्यक्तियों का संघ, B व्यक्तियों का निकाय, T ट्रस्ट, L स्थानीय प्राधिकरण, J कृत्रिम न्यायिक व्यक्ति और G सरकार। इसे दावा किए गए प्रकार की संगति जाँच की तरह इस्तेमाल कीजिए।

एक कारोबार के कई GSTIN क्यों हो सकते हैं?

GST रजिस्ट्रेशन राज्य के हिसाब से होता है, इसलिए तीन राज्यों में चलने वाले कारोबार के तीन GSTIN होंगे जिन सबमें एक ही PAN होगा। एक राज्य में भी एक से ज़्यादा रजिस्ट्रेशन हो सकते हैं, जिन्हें GSTIN का तेरहवाँ अक्षर गिनता है।

क्या वैध PAN साबित करता है कि आवेदक ही PAN का मालिक है?

नहीं। PAN लुकअप सिर्फ़ यह पक्का करता है कि नंबर स्थिति और नाम के साथ रिकॉर्ड में है। यह नहीं दिखाता कि नंबर डालने वाला उसका मालिक है। इसके लिए अलग स्वामित्व वाला कदम चाहिए, और StampMitra Aadhaar आधारित verification नहीं देता।

प्राइवेट लिमिटेड कंपनी से कौन-कौन से नंबर माँगने चाहिए?

कंपनी का PAN, GSTIN और CIN माँगिए। ये तीन स्वतंत्र रिकॉर्ड हैं जिन्हें आप आपस में मिला सकते हैं, और CIN लुकअप से निदेशक भी मिलते हैं जिन्हें आप आवेदन करने वाले व्यक्ति से मिलाते हैं।

क्या LLP का भी CIN होता है?

LLP की पहचान कंपनी वाले CIN से नहीं, LLPIN से होती है, जो तीन अक्षर, हाइफ़न और चार अंक जैसा दिखता है। LLPIN को CIN endpoint पर भेजने से पहले CIN reference में देख लीजिए कि आपके खाते पर कौन-से इनपुट चलते हैं।

क्या sandbox में GSTIN का चेक कैरेक्टर जाँचना चाहिए?

नहीं। docs का सैंपल GSTIN और दर्ज sandbox GSTIN placeholder हैं, इसलिए उनका चेक कैरेक्टर सही नहीं बैठता। चेक कैरेक्टर की जाँच सिर्फ़ तब चलाइए जब production key इस्तेमाल हो रही हो।

ये तीनों पहचानें StampMitra के किन endpoint से verify होती हैं?

PAN के लिए POST /v1/verify/pan, GSTIN के लिए POST /v1/verify/gstin और CIN के लिए POST /v1/verify/cin। हर एक के लिए API key पर अलग scope चाहिए, हर एक अपना referenceId लौटाता है और production में हर call अलग बिल होती है।

तीनों जाँचते समय फ़ालतू calls कैसे बचाऊँ?

पहले मुफ़्त ऑफ़लाइन चेक चलाइए (फ़ॉर्मेट, PAN का चौथा अक्षर, GSTIN का राज्य कोड और चेक कैरेक्टर), फिर PAN की call, फिर GSTIN सिर्फ़ तब जब PAN पास हो, और CIN सिर्फ़ कंपनियों के लिए। जो प्रकार GSTIN या CIN रख ही नहीं सकते, उनके लिए ये calls मत कीजिए।

स्रोत

  • आयकर विभाग का e-filing पोर्टल, PAN की बनावट और धारक श्रेणियाँ: https://www.incometax.gov.in (मौजूदा नियम वहीं देखिए; इस रिपॉज़िटरी के API डेटा से 2026-10-29 को मिलान किया गया)।
  • GST पोर्टल, रजिस्ट्रेशन और GSTIN की बनावट: https://www.gst.gov.in (राज्य कोड की मौजूदा सूची और रजिस्ट्रेशन श्रेणियाँ वहीं देखिए, 2026)।
  • कंपनी मामलों का मंत्रालय, कंपनी और LLP रजिस्ट्री की जानकारी: https://www.mca.gov.in (CIN और LLPIN की बनावट, 2026)।
  • PAN, GSTIN और CIN endpoint, फ़ील्ड, एरर और सैंपल वैल्यू के लिए StampMitra API reference डेटा, जैसा इस रिपॉज़िटरी में 2026-10-29 को है।
  • StampMitra sandbox की टेस्ट वैल्यू, sandbox responder से ली गईं, 2026-10-29 तक।