PAN Verification
8 endpoints · Core API
This API allows validation of Permanent Account Numbers (PAN) issued by the Income Tax Department of India. It is designed to confirm the identity of individuals or entities by checking their PAN details against authoritative databases. This API plays a vital role in KYC processes, financial onboarding, and fraud prevention.
Benefits
- Identity ValidationConfirms the authenticity of PANs submitted by users or businesses.
- Regulatory ComplianceEnsures compliance with income tax and financial regulations.
- Fraud DetectionHelps detect and prevent use of fake or invalid PANs.
- Seamless IntegrationEasily integrates into onboarding and KYC workflows.
What you can do
You can verify an individual's or entity's PAN number in real-time, retrieve associated details (like name or status), and ensure the PAN is valid and active.
Get Pan Verify details
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalNo description.nullable
- pan_numberstringrequiredRequired. 10-character PAN in the format AAAAA9999A (uppercase letters and digits only).length 10pattern ^[A-Z]{5}[0-9]{4}[A-Z]{1}$default ABCDE1234F
- pan_holder_namestringrequiredRequired. Name of the PAN holder as printed on the PAN card, used for name matching.minLength 1default JOHN DOE
- dobstringoptionalOptional. Date of birth of the PAN holder, for example 15-08-1990. Accepted formats: dd-MM-yyyy, dd/MM/yyyy, dd-MMM-yyyy (15-AUG-1990) and dd/MMM/yyyy. A missing or unrecognised value is not rejected: it is replaced by a default date, so the date of birth is not checked.nullabledefault 15-08-1990
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResponse model for PAN verification containing status and match results.
6 fields
- panstringoptionalGets or sets the PAN number that was verified.nullabledefault IRZPS88XXX
- categorystringoptionalGets or sets the category of the PAN holder (e.g., "individual", "company").nullabledefault individual
- statusstringoptionalGets or sets the validity status of the PAN (e.g., "valid", "invalid").nullabledefault valid
- name_as_per_pan_matchbooleanoptionalGets or sets a value indicating whether the provided name matches the PAN record.nullable
- date_of_birth_matchbooleanoptionalGets or sets a value indicating whether the provided date of birth matches the PAN record.nullable
- aadhaar_seeding_statusstringoptionalGets or sets the Aadhaar seeding status ("y" or "n") indicating Aadhaar-PAN linkage.nullabledefault y
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Get Pan Lite details
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalOptional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.nullable
- customer_pan_numberstringrequiredRequired. 10-character PAN in the format AAAAA9999A (uppercase letters and digits only).length 10pattern ^[A-Z]{5}[0-9]{4}[A-Z]{1}$default ABCDE1234F
- pan_holder_namestringoptionalOptional. Name of the PAN holder as printed on the PAN card, used for name matching.nullabledefault JOHN DOE
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResponse model for PAN Lite verification containing basic PAN details.
5 fields
- pan_numberstringoptionalGets or sets the PAN number.nullabledefault IRZPS88XXX
- pan_statusstringoptionalGets or sets the validity status of the PAN (e.g., "VALID").nullabledefault VALID
- user_full_namestringoptionalGets or sets the full name of the PAN card holder.nullabledefault VAXXXX SAXXXX
- name_match_scorestringoptionalGets or sets the name match score as a percentage string.nullabledefault 28.00
- pan_typestringoptionalGets or sets the type of PAN (e.g., "Person", "Company").nullabledefault Person
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Get Pan Advance details
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalOptional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.nullable
- customer_pan_numberstringrequiredRequired. 10-character PAN in the format AAAAA9999A (uppercase letters and digits only).length 10pattern ^[A-Z]{5}[0-9]{4}[A-Z]{1}$default ABCDE1234F
- pan_holder_namestringrequiredRequired. Name of the PAN holder as printed on the PAN card, used for name matching.minLength 1default JOHN DOE
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResponse model for PAN Advance verification with detailed holder information.
11 fields
- aadhaar_seeding_statusstringoptionalGets or sets the Aadhaar seeding status of the PAN.nullabledefault OPERATIVE PAN
- pan_last_updatedstringoptionalGets or sets the date when the PAN record was last updated.nullabledefault 01/02/2023
- pan_numberstringoptionalGets or sets the PAN number.nullabledefault IRZPS88XXX
- pan_statusstringoptionalGets or sets the validity status of the PAN.nullabledefault VALID
- user_first_namestringoptionalGets or sets the first name of the PAN card holder.nullabledefault VAXXXX
- user_middle_namestringoptionalGets or sets the middle name of the PAN card holder.nullabledefault MAXXXX
- name_on_cardstringoptionalGets or sets the full name as printed on the PAN card.nullabledefault VAXXXX MAXXXX SAXXXX
- user_last_namestringoptionalGets or sets the last name of the PAN card holder.nullabledefault SAXXXX
- user_titlestringoptionalGets or sets the title of the PAN card holder (e.g., "Shri", "Smt").nullabledefault Shri
- name_match_scorestringoptionalGets or sets the name match score as a percentage string.nullabledefault 34.50
- pan_typestringoptionalGets or sets the type of PAN (e.g., "Person", "Company").nullabledefault Person
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Get Pan Pro details
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalOptional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.nullable
- customer_pan_numberstringrequiredRequired. 10-character PAN in the format AAAAA9999A (uppercase letters and digits only).length 10pattern ^[A-Z]{5}[0-9]{4}[A-Z]{1}$default ABCDE1234F
- pan_holder_namestringrequiredRequired. Name of the PAN holder as printed on the PAN card, used for name matching.minLength 1default JOHN DOE
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResponse model for PAN Pro verification with comprehensive holder details including address and contact info.
12 fields
- pan_numberstringoptionalGets or sets the PAN number.nullabledefault IRZPS88XXX
- user_full_namestringoptionalGets or sets the full name of the PAN card holder.nullabledefault XXXXXX XXXXXX XXXXXX
- user_full_name_splitarray<string>optionalGets or sets the full name split into individual name parts.nullabledefault ["XXXXXX","XXXXXX","XXXXXX"]
- masked_aadhaarstringoptionalGets or sets the masked Aadhaar number linked to the PAN.nullabledefault XXXXXXXX7895
- user_addressobjectoptionalRepresents the address of a PAN Pro verification response.
8 fields
- line_1stringoptionalGets or sets the first line of the address.nullabledefault XXXX XXXXXXX XXXXXX
- line_2stringoptionalGets or sets the second line of the address.nullabledefault XXXX XXXXXXX, XXXXXX XXXXXXX XXXXXX
- street_namestringoptionalGets or sets the street name.nullabledefault XXXXXX
- zipstringoptionalGets or sets the postal ZIP code.nullabledefault XXXXXX
- citystringoptionalGets or sets the city name.nullabledefault XXXXXX
- statestringoptionalGets or sets the state name.nullabledefault XXXXXX
- countrystringoptionalGets or sets the country name.nullabledefault XXXXXX
- fullstringoptionalGets or sets the full concatenated address string.nullabledefault XXXXX, XXXXXX XXXXXXX, XXXXXX XXXX
- user_emailstringoptionalGets or sets the masked email address of the PAN card holder.nullabledefault er*********el@gmail.com
- user_phone_numberstringoptionalGets or sets the phone number of the PAN card holder.nullabledefault 94XXXXXX12
- user_genderstringoptionalGets or sets the gender of the PAN card holder (e.g., "M" or "F").nullabledefault M
- user_dobstringoptionalGets or sets the date of birth of the PAN card holder.nullabledefault XX-XX-XXXX
- aadhaar_linked_statusbooleanoptionalGets or sets a value indicating whether the PAN is linked with Aadhaar.nullabledefault true
- name_match_scorestringoptionalGets or sets the name match score as a percentage string.nullabledefault 34.50
- pan_typestringoptionalGets or sets the type of PAN (e.g., "Person", "Company").nullabledefault Person
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Retrieve PAN details using mobile number and name.
This API retrieves Permanent Account Number (PAN) details by matching a mobile number with a person's name. It allows you to verify and fetch PAN information when you have a user's mobile number and name, providing a convenient way to retrieve PAN details without requiring the physical PAN card or number from the user.
Key Benefits:
→ Simplifies KYC processes by retrieving PAN details using just mobile number and name.
→ Reduces manual data entry errors in financial and regulatory compliance workflows.
→ Enables faster customer onboarding with automated PAN verification.
→ Helps prevent identity fraud by cross-verifying user-provided information.
Use Cases:
→ Streamline customer onboarding for banking and financial institutions.
→ Verify customer identity during loan application processing.
→ Automate KYC verification for investment accounts and trading platforms.
Request Body Parameters:
→ name (required): Full name of the person as registered with the PAN.
→ mobile_no (required): Mobile number registered with the PAN: 10 digits starting with 6, 7, 8 or 9.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalOptional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.nullable
- namestringrequiredRequired. Full name of the person as registered with the PAN.minLength 1default JOHN DOE
- mobile_nostringrequiredRequired. 10-digit Indian mobile number starting with 6, 7, 8 or 9, without country code.length 10pattern ^[6-9]\d{9}$default 9876543210
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalData payload returned from a successful Mobile to PAN lookup.
3 fields
- namestringoptionalNo description.nullable
- mobile_nostringoptionalNo description.nullable
- pan_numberstringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Retrieve email addresses and mobile numbers associated with a PAN. Pass `version: "v2"` in the request body to call the V2 version of this API with a broader data set.
Queries official databases to fetch all registered email IDs and mobile numbers linked to a specific PAN card.
API Versions:
This endpoint supports two versions of the lookup, selectable via the version field in the request body.
Key Benefits:
→ Comprehensive Contact Discovery: Retrieve all registered email and mobile numbers in a single API call.
→ Enhanced Customer Profiling: Enrich customer data with verified contact information from official sources.
→ Multi-Channel Communication: Access multiple communication channels for customer outreach.
→ Streamlined Onboarding: Auto-populate contact fields with verified information.
→ Higher Coverage with V2: The V2 version taps into a wider data source — useful when the default version returns empty results.
Use Cases:
→ Customer Reactivation: Retrieve contact details of dormant account holders.
→ Loan Collections: Obtain verified contact information for borrowers.
→ Account Updates: Reach out to customers for KYC updates.
→ Cross-Selling Campaigns: Access accurate contact details for targeted offers.
Request Body Parameters:
→ id_number (required): Valid PAN card number — 5 letters, 4 digits, 1 letter (e.g., ABCDE1234F).
→ version (optional): Pass "v2" to call the V2 version of this API. Omit to use the default V1 version. Accepted value: "v2" (not case-sensitive); any other value is rejected.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalOptional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.nullable
- id_numberstringrequiredRequired. 10-character PAN in the format AAAAA9999A (uppercase letters and digits only).minLength 1default ABCDE1234F
- versionstringoptionalOptional. Pass "v2" (not case-sensitive) to use version 2 of the lookup, which has wider coverage. Omit it to use version 1. Any other value is rejected.nullablepattern ^[vV]2$
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalNo description.
3 fields
- id_numberstringoptionalNo description.nullable
- email_idarray<string>optionalNo description.nullable
- mobile_numberarray<string>optionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
429Too Many Requests
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataanyoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Retrieve all GST registrations linked to a business PAN.
Queries official records to fetch all GST Identification Numbers (GSTINs) associated with a given Business PAN.
Key Benefits:
→ Fetch all GST registrations linked to a single Business PAN in one request.
→ Simplify GST verification and business onboarding processes.
→ Validate business tax registrations across multiple states.
→ Improve compliance and KYC verification workflows.
→ Reduce manual effort in identifying all GST registrations for an organization.
Use Cases:
→ Business KYC: Verify all GST registrations associated with a business entity.
→ Vendor Verification: Validate GST registrations during vendor onboarding.
→ Compliance Checks: Identify GST registrations across different states.
→ Financial Services: Perform tax registration verification for lending and underwriting.
Request Body Parameters:
→ business_pan_number (required): Valid Business PAN number in the format of 5 letters, 4 digits, and 1 letter (e.g., ABCDE1234F).
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalOptional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.nullable
- business_pan_numberstringrequiredRequired. 10-character business PAN in the format AAAAA9999A (uppercase letters and digits only).length 10pattern ^[A-Z]{5}[0-9]{4}[A-Z]{1}$default ABCDE1234F
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalResponse model for PAN to GST lookup — list of GSTINs registered against a business PAN.
2 fields
- gstinListarray<object>optionalNo description.nullable
Each item: 3 fields
- gstinstringoptionalNo description.nullabledefault 04AABFU9404N1Z5
- stateCodestringoptionalNo description.nullabledefault Chandigarh
- currentRegistrationStatusstringoptionalNo description.nullabledefault Active
- businessPanNumberstringoptionalNo description.nullabledefault AABFU9404N
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500
Code samplescurl · Node.js · Python
Retrieve MSME/Udyam details associated with a business PAN.
Queries official databases to retrieve registration and classification history of MSME/Udyam enterprises linked to the business PAN.
Key Benefits:
→ Automated Retrieval: Retrieve all registered MSME details using just the PAN.
→ Multi-dimensional Data: Fetch classification history, NIC codes, units, and certificates in one request.
→ Simplified Compliance: Validate enterprise classification (micro/small/medium) for statutory compliance.
Use Cases:
→ Vendor Verification: Confirm the registration and status of business partners.
→ Onboarding Automation: Extract registered names and addresses from official records.
Request Body Parameters:
→ pan (required): Valid Business PAN number in the format of 5 letters, 4 digits, and 1 letter (e.g., ABCDE1234F).
→ is_pdf_required (optional): Boolean, default false. Set to true to also receive the Udyam certificate as a Base64-encoded PDF in udyam_certificate_base64 when available.
Headers
- X-API-KEYstringrequiredYour secret API key for the environment you are calling (Stage and Live use different keys).
- X-API-APP-IDstringrequiredThe App ID issued together with the key.
- Content-Typestringrequiredapplication/json
Body parameters
application/json- consentstringrequiredRequired. The end user's consent to this verification. Send `Y`.minLength 1default Y
- consent_textstringrequiredRequired. The consent statement shown to the end user. Send the default text from the sample.minLength 1default I hear by declare my consent agreeme…
- request_idstringoptionalOptional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.nullable
- panstringrequiredRequired. 10-character business PAN in the format AAAAA9999A (uppercase letters and digits only).minLength 1pattern ^[A-Z]{5}[0-9]{4}[A-Z]{1}$default ABCDE1234F
- is_pdf_requiredbooleanoptionalOptional. Boolean, default false. Set to true to also receive the Udyam certificate as a Base64-encoded PDF in udyam_certificate_base64 when it is available.default false
Sample request body
Responses
200OK
- successbooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 200
- messagestringoptionalNo description.nullabledefault XXXXX
- dataobjectoptionalNo description.
8 fields
- udyam_numberstringoptionalNo description.nullable
- enterprise_dataobjectoptionalNo description.
17 fields
- document_idstringoptionalNo description.nullable
- major_activitystringoptionalNo description.nullable
- enterprise_typestringoptionalNo description.nullable
- classification_yearstringoptionalNo description.nullable
- classification_datestringoptionalNo description.nullable
- organization_typestringoptionalNo description.nullable
- namestringoptionalNo description.nullable
- mobilestringoptionalNo description.nullable
- emailstringoptionalNo description.nullable
- addressobjectoptionalNo description.
9 fields
- door_nostringoptionalNo description.nullable
- buildingstringoptionalNo description.nullable
- areastringoptionalNo description.nullable
- blockstringoptionalNo description.nullable
- streetstringoptionalNo description.nullable
- citystringoptionalNo description.nullable
- districtstringoptionalNo description.nullable
- statestringoptionalNo description.nullable
- pincodestringoptionalNo description.nullable
- date_of_incorporationstringoptionalNo description.nullable
- date_of_commencementstringoptionalNo description.nullable
- date_of_udyam_registrationstringoptionalNo description.nullable
- dicstringoptionalNo description.nullable
- msme_distringoptionalNo description.nullable
- social_categorystringoptionalNo description.nullable
- genderstringoptionalNo description.nullable
- enterprise_type_dataarray<object>optionalNo description.nullable
Each item: 3 fields
- enterprise_typestringoptionalNo description.nullable
- classification_yearstringoptionalNo description.nullable
- classification_datestringoptionalNo description.nullable
- type_of_enterprisestringoptionalNo description.nullable
- nic_dataobjectoptionalNo description.
3 fields
- nic_2_digitstringoptionalNo description.nullable
- nic_4_digitstringoptionalNo description.nullable
- nic_5_digitstringoptionalNo description.nullable
- nic_data_listarray<object>optionalNo description.nullable
Each item: 5 fields
- nic_2_digitstringoptionalNo description.nullable
- nic_4_digitstringoptionalNo description.nullable
- nic_5_digitstringoptionalNo description.nullable
- activity_typestringoptionalNo description.nullable
- datestringoptionalNo description.nullable
- enterprise_unitsarray<object>optionalNo description.nullable
Each item: 2 fields
- namestringoptionalNo description.nullable
- addressobjectoptionalNo description.
9 fields
- door_nostringoptionalNo description.nullable
- buildingstringoptionalNo description.nullable
- areastringoptionalNo description.nullable
- blockstringoptionalNo description.nullable
- streetstringoptionalNo description.nullable
- citystringoptionalNo description.nullable
- districtstringoptionalNo description.nullable
- statestringoptionalNo description.nullable
- pincodestringoptionalNo description.nullable
- udyam_certificate_base64stringoptionalNo description.nullable
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- isBillablebooleanoptionalWhether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
400Bad Request
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 400
401Unauthorized
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 401
500Internal Server Error
- dataobjectoptionalNo description.
- messagesarray<string>optionalNo description.nullable
- request_idstringoptionalNo description.nullable
- successbooleanoptionalNo description.default false
- messagestringoptionalNo description.nullabledefault XXXXX
- isBillablebooleanoptionalNo description.
- statusCodeinteger (int32)optionalNo description.default 500