UAN Advanced Verification API
UAN employment history plus recent EPFO PF filings and optional holder bank and relative details.
What it verifies
Same UAN employment history as UAN Verification, plus recent EPFO PF filings for the latest employer and optional holder details (masked Aadhaar, bank, relative) when the UAN holder has shared them with EPFO.
Who uses it
- Lenders that need PF filing confirmation alongside employment history
- Underwriters checking continuity of PF contributions
- Compliance teams verifying employment with establishment-level PF data
Request and response
https://verification.techinnoverz.com/api/v1/employment/uan-advancedVerify UAN employment history with EPFO PF filings and optional additional holder details. This call is billed when it returns a successful result.
Request body
uanstringoptional12-digit Universal Account Number. Send this, or pan, or mobile (at least one).
panstringoptionalIndividual PAN used to look up linked UANs. Send this, or uan, or mobile (at least one).
mobilestringoptional10-digit Indian mobile number linked to the UAN. Send this, or uan, or pan (at least one).
dateOfBirthstringoptionalOptional. Date of birth YYYY-MM-DD, used with name for name-and-DOB lookup.
namestringoptionalOptional. Employee name to match against EPFO records (up to 500 characters).
employerNamestringoptionalOptional. Employer / establishment name to match. Only accepted when name is also sent.
nameMatchMethodstringoptionalOptional. How to compare name: exact or fuzzy (default).
consentstringrequiredMust be "Y". Records that the end customer consented to this check; logged against the transaction.
referenceIdstringoptionalYour own id, echoed back in the response for reconciliation.
Example requests
curl -X POST "https://verification.techinnoverz.com/api/v1/employment/uan-advanced" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"uan": "101911839218",
"pan": "CDCPN6103N",
"mobile": "9876543210",
"dateOfBirth": "2000-10-02",
"name": "Narendrakumar G S",
"employerName": "DIGITAP.AI ENTERPRISE SOLUTIONS PRIVATE LIMITED",
"nameMatchMethod": "fuzzy",
"consent": "Y",
"referenceId": "app_20915"
}'const res = await fetch("https://verification.techinnoverz.com/api/v1/employment/uan-advanced", {
method: "POST",
headers: {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"uan": "101911839218",
"pan": "CDCPN6103N",
"mobile": "9876543210",
"dateOfBirth": "2000-10-02",
"name": "Narendrakumar G S",
"employerName": "DIGITAP.AI ENTERPRISE SOLUTIONS PRIVATE LIMITED",
"nameMatchMethod": "fuzzy",
"consent": "Y",
"referenceId": "app_20915"
}),
});
const result = await res.json();import requests
res = requests.post(
"https://verification.techinnoverz.com/api/v1/employment/uan-advanced",
headers={"x-api-key": "YOUR_API_KEY"},
json={
"uan": "101911839218",
"pan": "CDCPN6103N",
"mobile": "9876543210",
"dateOfBirth": "2000-10-02",
"name": "Narendrakumar G S",
"employerName": "DIGITAP.AI ENTERPRISE SOLUTIONS PRIVATE LIMITED",
"nameMatchMethod": "fuzzy",
"consent": "Y",
"referenceId": "app_20915",
},
timeout=15,
)
result = res.json()200 response — status "found"
{
"status": "found",
"data": {
"uans": [
"101911839218"
],
"matchingUan": "101911839218",
"isEmployed": true,
"employeeNameMatch": null,
"employerNameMatch": null,
"uanCount": 1,
"dateOfExitMarked": false,
"recentEmployer": {
"memberId": "PYKRP24601000000010056",
"establishmentId": "PYKRP2460100000",
"establishmentName": "DIGITAP.AI ENTERPRISE SOLUTIONS PRIVATE LIMITED",
"dateOfJoining": "2023-01-02",
"dateOfExit": null,
"employerConfidenceScore": null,
"epfo": null
},
"records": [
{
"uan": "101911839218",
"name": "Narendrakumar G S",
"gender": "MALE",
"dateOfBirth": "2000-10-02",
"currentEmployment": {
"memberId": "PYKRP24601000000010056",
"establishmentId": "PYKRP2460100000",
"establishmentName": "DIGITAP.AI ENTERPRISE SOLUTIONS PRIVATE LIMITED",
"dateOfJoining": "2023-01-02",
"dateOfExit": null
},
"employmentHistory": [
{
"establishmentName": "DIGITAP.AI ENTERPRISE SOLUTIONS PRIVATE LIMITED",
"establishmentId": "PYKRP2460100000",
"memberId": "PYKRP24601000000010056",
"dateOfJoining": "2023-01-02",
"dateOfExit": null,
"employmentPeriodInMonths": 22
}
]
}
],
"uanSources": [
{
"uan": "101911839218",
"source": "pan"
}
],
"partial": false,
"nameDobFilteringScore": null,
"epfo": {
"matches": [
{
"name": "VIKASH",
"confidence": 1,
"epfHistory": {
"JAN-25": "true",
"DEC-24": "true",
"NOV-24": "true"
}
}
],
"pfFilings": [
{
"totalAmount": 7443858,
"employeesCount": 3803,
"wageMonth": "JAN-25"
}
],
"establishment": {
"establishmentId": "GJAHD0059276000",
"establishmentName": "NAMRA FINANCE LIMITED",
"dateOfSetup": "2013-05-01",
"ownershipType": "Private Limited Company"
}
}
},
"source": "provider",
"dataAsOf": "2026-11-03T09:30:00.000Z",
"referenceId": "app_20915",
"billing": {
"charged": true,
"walletBalance": "12450.00"
},
"txnId": "txn_8c31ba90",
"livemode": true
}Fields returned in data
uansarrayoptionalUANs linked to the lookup.
matchingUanstringoptionalUAN chosen for the summary. null when not held.
isEmployedbooleanoptionalWhether the person appears currently employed per Digitap's rules. null when not scored.
employeeNameMatchbooleanoptionalWhether the name you sent matched. null when you sent no name.
employerNameMatchbooleanoptionalWhether the employer name you sent matched. null when you sent no employer name.
uanCountintegeroptionalHow many UANs were linked.
dateOfExitMarkedbooleanoptionalWhether an exit date is marked on the recent employer.
recentEmployerobjectoptionalMost recent employer summary: memberId, establishmentId, establishmentName, dateOfJoining, dateOfExit, employerConfidenceScore, and for Advanced also epfo flags.
recordsarrayoptionalPer-UAN records with name, gender, dateOfBirth, currentEmployment and employmentHistory. Advanced also includes additionalDetails when the source holds them.
uanSourcesarrayoptionalHow each UAN was found (pan, mobile, pan and mobile, name and dob). null when the input was the UAN itself.
partialbooleanoptionalTrue when only recent employer data was available and a retry may return fuller history.
nameDobFilteringScorenumberoptionalName-and-DOB filtering score when that lookup ran. null otherwise.
epfoobjectoptionalEPFO block when held: matches (name, confidence, epfHistory), pfFilings (totalAmount, employeesCount, wageMonth) and establishment (establishmentId, establishmentName, dateOfSetup, ownershipType). null when not held.
Error codes
Errors return a non-200 HTTP status and the same envelope, so your retry logic and your reconciliation agree.
400 INVALID_INPUTA field is missing or malformed. The details list each problem. Not charged.
401 INVALID_KEYThe key is missing, revoked, or not a key we issued.
402 WALLET_EMPTYYour available balance is below the price of this call. Top up and retry. Not charged.
403 PRODUCTION_NOT_ENABLEDA live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access.
403 TEST_NOT_ENABLEDA test key was used before test (UAT) access was enabled for your account. Ask us to enable it.
403 API_NOT_ENABLEDThis check is switched off for your account, or is not available for live use yet.
403 IP_NOT_ALLOWEDThe key is restricted to certain IP addresses and this call came from another.
403 ACCOUNT_SUSPENDEDThe account is suspended. Contact support.
404 NO_DATAA valid request, but no record was found. Not charged.
404 ROUTE_NOT_FOUNDThere is no endpoint at that path.
405 METHOD_NOT_ALLOWEDUse the method shown in the Allow header.
409 IDEMPOTENCY_IN_PROGRESSA call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.
413 PAYLOAD_TOO_LARGEThe request body is too large. Not charged.
415 UNSUPPORTED_MEDIA_TYPESend the request with Content-Type: application/json.
422 IDEMPOTENCY_KEY_REUSEDThis Idempotency-Key was already used with a different request body. Use a new key for a new request.
429 RATE_LIMITEDToo many requests or too many at once. Wait for the Retry-After delay.
500 INTERNAL_ERRORSomething went wrong on our side. Not charged. Quote the txnId if you contact support.
502 SOURCE_ERRORThe data source returned an error. Not charged.
503 SOURCE_DOWNThe data source is unavailable right now. Not charged. Retry after the delay in Retry-After.
504 SOURCE_TIMEOUTThe data source did not answer in time. Not charged.
{
"status": "error",
"error": {
"code": "NO_DATA",
"message": "No record found for the given input. Not charged."
},
"billing": {
"charged": false
},
"txnId": "txn_8c31ba91",
"livemode": true
}Billing
You are charged only on successful hits. Failed, no-data and error calls are free.
Every response carries billing.charged and your remaining billing.walletBalance. Per-hit pricing is set on your rate card; book a demo to get yours.
Related checks
- UAN Verification API — Look up a UAN from PAN, mobile or UAN and return employment history back to 2012.
All API documentation · OpenAPI specification · Docs as plain text
