
Title
Create new category
Edit page index title
Edit category
Edit link
PAN Verification API
Introduction
The PAN Verification API enables businesses to instantly validate and verify Permanent Account Number (PAN) details using PAN, Name, and Date of Birth (DOB) as inputs. Designed for fintech platforms, KYC workflows, compliance systems, lending platforms, onboarding solutions, and enterprise verification pipelines, this API helps organizations determine the authenticity and operational status of a PAN in real time while reducing fraud risks and manual verification effort.
This API performs multi-layer validation against authoritative data sources and returns a structured response containing PAN activity status, identity match indicators, Aadhaar linkage status, and taxpayer category classification. It helps businesses streamline onboarding, strengthen AML and compliance processes, and improve decision-making through reliable identity intelligence.
Key Capabilities
PAN Status Verification Check whether a PAN is active, inactive, fake, decommissioned, surrendered, liquidated, or otherwise non-operational. This helps prevent onboarding of invalid or high-risk entities.
Name Match Validation Verify whether the provided name matches official government records associated.
Date of Birth (DOB) Match Validate the DOB provided in the request against official records.
Aadhaar Linking Status Retrieve whether the PAN is linked with Aadhaar, helping organizations ensure regulatory compliance and onboarding eligibility where Aadhaar linkage is required.
Taxpayer Category Identification Determine the classification of the PAN holder such as individual, company, firm, LLP, trust, or other taxpayer categories. This is particularly useful for risk scoring, underwriting, and segmentation logic.

In order to ensure continued compliance with the Digital Personal Data Protection Act, 2023 (DPDP Act), we are implementing DPDP V3 (Consent-Driven Processing). Under this framework, clients are required to obtain explicit, informed, and verifiable consent from the data principal prior to accessing, processing, viewing, or storing any personal data through the platform. This regulatory transition may require modifications to existing configurations and workflows. Clients are advised to review and update their implementations to ensure ongoing compliance with applicable data protection obligations. Further information regarding this transition can be enquired here. Learn more about this change here.
API Details
Request
| Type | URL | Version |
|---|---|---|
| POST | https://api.attestr.com/api/{version}/public/checkx/pan/basic | Use "v2" for the latest version |
Request Body Parameters
| Type | Name | Description | Optional (default) | Min Version | Max Version |
|---|---|---|---|---|---|
| String | pan | Input PAN number to be verified. | Required | v2 | |
| String | birthOrIncorporatedDate | Date of birth for individuals and date of incorporation in case of companies | Required | v2 | |
| String | name | Name as registered | Required | v2 |
Request Header Parameters
| Type | Name | Value / Description | Optional | Min Version | Max Version |
|---|---|---|---|---|---|
| String | Content-Type | application/json | Required | v2 | |
| String | Authorization | Basic {authToken} | Required | v2 |
If you do not have the authentication token, please refer to Register App to generate one.
Sample Request Payload
{ "pan": "ABCDE1234E", "birthOrIncorporatedDate": "12-12-2002", "name": "Gitanjali Raheja"}Response
Http Status 200
| Key | Description | Type | Min Version | Max Version |
|---|---|---|---|---|
| valid | True | false depending on if provided PAN number exists and is valid | Boolean | v2 | |
| category | Category of the tax payer. See the table below for possible values. | PANCategoryEnum | v2 | |
| panStatus | Current status of the PAN. Possible values are listed in the PAN status table below. | String | v2 | |
| panStatusCode | PAN status code representing the status of the PAN. Every status is mapped to a corresponding status code. Refer to the table below. | String | v2 | |
| aadhaarLinked | Flag indicating whether PAN is linked to Aadhaar. Possible values are True, False and Null. True if the provided PAN is already linked to Aadhaar. False if not linked, Null if Aadhaar linking is either not applicable, such as for businesses, or if the source was unable to retrieve the Aadhaar linking status. | Boolean | v2 | |
| nameMatches | Where the provided input name matches the name as per PAN database official records. | Boolean | v2 | |
| birthOrIncorporatedDateMatches | Whether the provided input date of birth matches the PAN database official records. | Boolean | v2 |
PAN Category Enum
| Enum Values | Description |
|---|---|
| AOP | Association of persons |
| BOI | Body of individuals |
| BUSINESS | Registered company |
| FIRM | Partnership firms |
| GOVERNMENT | Government entities |
| HUF | Hindu Undivided family |
| LOCAL | Local authority |
| AJP | Artificial juridical persons |
| INDIVIDUAL | Individual tax payer |
| TRUST | Registered trust boards |
| LLP | Limited liability partnership |
PAN Status Codes
| Status | Status Code | Description |
|---|---|---|
| VALID | E | PAN exists and is valid |
| INVALID_NOT_FOUND | N | No matching PAN found |
| INVALID_DEACTIVATED | X | PAN stands deactivated and is invalid. |
| INVALID_FAKE | F | PAN is reported to be fake. |
| INVALID_DELETED | D | PAN has been deleted from the database due to potential duplicate or other related reasons. |
| VALID_AMALGAMATION | EA | Applicable for companies only, company is amalgamated |
| VALID_ACQUISITION | EC | Applicable for companies only, if company has been acquired |
| VALID_DEATH | ED | Where the individual is dead but pan details are valid. |
| VALID_DISSOLUTION | EI | Valid but company stands dissolved |
| VALID_LIQUIDATED | EL | Valid for companies that have been liquidated |
| VALID_MERGER | EM | Valid for companies that are merged into another entity |
| VALID_PARTITION | EP | The PAN record has been logically separated (partitioned) from another entity or structure but remains valid and operational. |
| VALID_LIQUIDATION | EU | Valid for companies that are currently undergoing liquidation |
| VALID_SPLIT | ES | The PAN was part of an entity or dataset that has been split into multiple valid records, and this specific PAN remains active and usable. |
Sample Response
Sample response for valid person PAN number
{ "valid": true, "category": "INDIVIDUAL", "panStatus": "VALID", "panStatusCode": "E", "nameMatches": true, "birthOrIncorporatedDateMatches": true, "aadhaarLinked": true}Sample response for valid business PAN number
{ "valid": true, "category": "BUSINESS", "panStatus": "VALID", "panStatusCode": "E", "nameMatches": true, "birthOrIncorporatedDateMatches": true, "aadhaarLinked": null}Sample response if the provided PAN number is invalid or does not exist
{ "valid": false, "category": null, "panStatus": "INVALID_NOT_FOUND", "panStatusCode": "N", "nameMatches": null, "birthOrIncorporatedDateMatches": null, "aadhaarLinked": null}Sample response for deactivated PAN
{ "valid": false, "category": "INDIVIDUAL", "panStatus": "INVALID_DEACTIVATED", "panStatusCode": "X", "nameMatches": null, "birthOrIncorporatedDateMatches": null, "aadhaarLinked": null}Error Response
| Parameter | Type | Description |
|---|---|---|
| code | Number | Unique error codes for different errors. Always available. |
| message | String | Error message describing the error. Always Available. |
| details | String | Detail error message. Available only for certain types of errors. |
Error Codes
| HTTP Status | Error Code | Error Message |
|---|---|---|
| 400 | 4001 | Malformed data or missing required parameter values |
| 400 | 4005 | Operation could not be performed due to low credits balance |
| 401 | 4016 | Invalid client authorization |
| 403 | 4031 | Unauthorized access |
| 403 | 4035 | Requested service is not provisioned for your account |
| 403 | 4039 | Client's IP address is not whitelisted |
| 403 | 4035 | Requested service is not provisioned for your account |
| 429 | 4291 | Maximum account rate limit exceeded |
| 429 | 4292 | Maximum API rate limit exceeded |
| 429 | 4293 | Maximum account daily limit exceeded |
| 429 | 4294 | Maximum API daily limit exceeded |
| 500 | 5001 | Request could not be processed |
Sample Error Response
{ "code": 4001, "message": "Malformed data or missing required parameter values"}Copyright © Attestr