PAN-Aadhaar Link Check
Identity & KYCConfirm a PAN is seeded with the given Aadhaar.
Check whether a specific PAN is linked to a specific Aadhaar with the Income Tax Department. A single call that settles a question regulators and payroll teams keep asking.
Endpoint
Request parameters
| Field | Type | Description |
|---|---|---|
p_a_n_number
required
|
string | PAN number |
aadhaar_number
required
|
string | Aadhaar number |
Example request
curl -X POST https://app.emver.io/api/sandbox/v1/pan-aadhaar-link \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"p_a_n_number": "string",
"aadhaar_number": "string"
}'
import requests
response = requests.post(
"https://app.emver.io/api/sandbox/v1/pan-aadhaar-link",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
},
json={
"p_a_n_number": "string",
"aadhaar_number": "string"
},
timeout=60,
)
response.raise_for_status()
data = response.json()
const response = await fetch("https://app.emver.io/api/sandbox/v1/pan-aadhaar-link", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
},
body: JSON.stringify({
"p_a_n_number": "string",
"aadhaar_number": "string"
}),
});
const data = await response.json();
$response = Http::withToken('YOUR_API_KEY')
->acceptJson()
->post('https://app.emver.io/api/sandbox/v1/pan-aadhaar-link', {
"p_a_n_number": "string",
"aadhaar_number": "string"
});
$data = $response->json();
Replace YOUR_API_KEY and the placeholder values. Use the switch above to see production URLs.
Response
Structure · 200
{
"status": INTEGER,
"message": STRING,
"data": {
"link_status": STRING,
"masked_p_a_n": STRING,
"reason_when_not_linked": STRING
}
}
Example · 200
{
"status": 200,
"message": "string",
"data": {
"link_status": "string",
"masked_p_a_n": "string",
"reason_when_not_linked": "string"
}
}
Error · 4xx / 5xx
{
"status": INTEGER,
"message": STRING
}
See Errors & status codes for what each status means and which calls are billed.
About this API
PAN-Aadhaar linkage is mandatory for most individuals, and an unlinked PAN can become inoperative, blocking TDS credits and financial transactions. This API tells you definitively whether the pair you hold is linked, along with the reason when it is not.
Use it as a standalone compliance check or as a follow-up to PAN verification when the seeding status needs to be confirmed against a particular Aadhaar rather than in general.
Typical uses
- Payroll compliance. Verify linkage for every employee before TDS filing season.
- Account opening. Confirm the PAN presented is operative before creating a financial account.
- Periodic re-verification. Sweep existing customer or employee bases for newly inoperative PANs.
- Vendor onboarding. Individual contractors and proprietors need an operative PAN to be paid.
Questions
- How is this different from the seeding status in PAN verification?
- PAN verification tells you whether the PAN is seeded with some Aadhaar. This check confirms linkage with the specific Aadhaar you provide, which is what matters when you hold both identifiers for a person.
- What does the reason field tell me?
- When the pair is not linked, the response explains why, for example the PAN is unlinked entirely or linked to a different Aadhaar, so your team knows what to ask the person to fix.
- Do you store the Aadhaar number?
- No. It is used for the lookup and not persisted in plain form. Responses carry masked identifiers only.