India eKYC verification matches submitted individual data against an Indian government source of truth. See the eKYC API Reference for common response semantics that apply across all sources.
Available sources
| Source | API source string | Description |
|---|---|---|
| India DMV | IN_DMV |
Verifies submitted driver's license details. |
| India PAN | INDIA_PAN_1 |
Verifies submitted name, date of birth, and PAN (Permanent Account Number) against a government-partnered source. |
| India Passport | INDIA_PASSPORT_1 |
Verifies submitted name, date of birth, passport number, file number (PRFN) and issue date against a government-partnered source. |
India DMV
Request parameters
| Parameter | Required | Description |
|---|---|---|
source |
Mandatory | Must be IN_DMV. |
country |
Mandatory | Must be IN. countryCode takes priority over country if both are provided. |
firstName |
Mandatory | First name of the individual. Must not contain digits. |
surName |
Mandatory | Last name of the individual. Must not contain digits. |
middleName |
Optional | Middle name of the individual. Must not contain digits. |
dateOfBirth |
Mandatory | Date of birth. Format: YYYY-MM-DD (for example, 1991-08-02). |
idNumber |
Mandatory | Driving license number (for example, SS-RRRR-YYYY-NNNNNNN). |
street |
Optional | House number and street name of the individual's address. |
city |
Optional | City of the individual's address (for example, Bengaluru). |
state |
Optional | State of the individual's address (for example, Karnataka). |
postalCode |
Optional | PIN code. Must be exactly 6 digits (for example, 560001). |
gender |
Optional | Accepted values are m or f. |
The endpoint can accept an empty body ({}), in which case information is pulled from module configuration and session details.
Sample request
{
"plugins": ["kyc"],
"source": "IN_DMV",
"country": "IN",
"firstName": "Arjun",
"middleName": "Vikram",
"surName": "Mehta",
"dateOfBirth": "1990-03-14",
"idNumber": "KA0120150009999",
"street": "12 Street Sample",
"city": "Bengaluru",
"state": "Karnataka",
"postalCode": "560002",
"gender": "m"
}
Sample response
{
"kyc": [
{ "key": "firstNameMatch", "status": "exact" },
{ "key": "middleNameMatch", "status": "exact" },
{ "key": "lastNameMatch", "status": "exact" },
{ "key": "fullNameMatch", "status": "exact" },
{ "key": "dobMatch", "status": "exact" },
{ "key": "idNumMatch", "status": "exact" },
{ "key": "streetMatch", "status": "exact" },
{ "key": "cityMatch", "status": "exact" },
{ "key": "stateMatch", "status": "exact" },
{ "key": "postalCodeMatch", "status": "exact" },
{ "key": "fullAddressMatch", "status": "exact" },
{ "key": "genderMatch", "status": "nomatch" },
{ "key": "overallLevel", "status": "low" }
]
}
Response fields
| Field | Statuses | Description |
|---|---|---|
firstNameMatch |
exact, fuzzy, nomatch |
Matches first name submitted against the value in the source of truth. |
middleNameMatch |
exact, fuzzy, nomatch, nodata |
Matches middle name submitted against the value in the source of truth. |
lastNameMatch |
exact, fuzzy, nomatch |
Matches last name submitted against the value in the source of truth. |
fullNameMatch |
exact, fuzzy, nomatch |
Matches full name (first, middle, last) submitted against the full name in the source of truth. |
dobMatch |
exact, fuzzy, nomatch, nodata |
Matches date of birth submitted against the value in the source of truth. |
idNumMatch |
exact, fuzzy, nomatch, nodata |
Matches driving license number submitted against the value in the source of truth. |
streetMatch |
exact, fuzzy, nomatch, nodata |
Matches street submitted against the value in the source of truth. |
cityMatch |
exact, fuzzy, nomatch, nodata |
Matches city submitted against the value in the source of truth. |
stateMatch |
exact, fuzzy, nomatch, nodata |
Matches state submitted against the value in the source of truth. |
postalCodeMatch |
exact, fuzzy, nomatch, nodata |
Matches postal code submitted against the value in the source of truth. |
fullAddressMatch |
exact, fuzzy, nomatch, nodata |
Matches full address (street, city, state, postal code) submitted against the full address in the source of truth. |
genderMatch |
exact, fuzzy, nomatch, nodata |
Matches gender submitted against the value in the source of truth. |
overallLevel |
low, medium, high |
Overall risk level based on submitted full name, date of birth, and driving license number. See below for calculation logic. |
overallLevel calculation
overallLevel is calculated based on the submitted full name, date of birth, and driving license number:
lowwhenfullNameMatch,dobMatch, andidNumMatchare allexact.highwhenfullNameMatch,dobMatch, ORidNumMatcharenomatch.mediumfor all other combinations.
Contact your Incode representative to customize the overallLevel calculation for your use case.
Error responses
See the eKYC API Reference for standard HTTP response codes and error handling conventions.
India PAN
India PAN verifies submitted name, date of birth, and PAN (Permanent Account Number) against a government-partnered source of truth. The name is verified as a single concatenated string rather than first/last name separately.
Request parameters
| Parameter | Required | Description |
|---|---|---|
source |
Mandatory | Must be INDIA_PAN_1. |
country |
Mandatory | Must be IN. |
firstName |
Mandatory | First name of the individual. |
surName |
Mandatory | Last name of the individual. |
dateOfBirth |
Mandatory | Date of birth. Format: YYYY-MM-DD (for example, 1987-08-17). |
idNumber |
Mandatory | PAN (Permanent Account Number). Exactly 10 characters: 5 letters, 4 digits, 1 letter (for example, BVZPS1846R). |
Sample request
{
"plugins": ["kyc"],
"source": "INDIA_PAN_1",
"country": "IN",
"firstName": "Priya",
"surName": "Nair",
"dateOfBirth": "1992-11-05",
"idNumber": "ABCDE1234F"
}
Sample response
{
"kyc": [
{ "key": "fullNameMatch", "status": "exact" },
{ "key": "dobMatch", "status": "exact" },
{ "key": "idNumberMatch", "status": "exact" },
{ "key": "overallLevel", "status": "low" }
],
"income": []
}
Response fields
| Field | Statuses | Description |
|---|---|---|
fullNameMatch |
exact, fuzzy, nomatch |
Matches the submitted full name (firstName + surName, concatenated) against the name on record for the PAN. Name is verified as one string — firstNameMatch/lastNameMatch are not returned for this source. |
dobMatch |
exact, nomatch |
Matches date of birth submitted against the value on record for the PAN. |
idNumberMatch |
exact, nomatch |
Matches the submitted PAN number against the government-partnered source. |
overallLevel |
low, medium, high |
Overall risk level based on submitted full name, date of birth, and PAN number. See below for calculation logic. |
overallLevel calculation
overallLevel is calculated based on the submitted full name, date of birth, and PAN number:
lowwhen (fullNameMatchisexactORfullNameMatchisfuzzy) ANDidNumberMatchisexactANDdobMatchisexact.highwhenfullNameMatchisnomatchANDidNumberMatchisnomatchANDdobMatchisnomatch.mediumfor all other combinations.
Error responses
See the eKYC API Reference for standard HTTP response codes and error handling conventions.
India Passport
India Passport verifies submitted name, date of birth, passport number, passport file number (PRFN) and — optionally — passport issue date against a government-partnered source of truth. The name is verified as a single concatenated string rather than first/last name separately.
Request parameters
| Parameter | Required | Description |
|---|---|---|
source |
Mandatory | Must be INDIA_PASSPORT_1. |
country |
Mandatory | Must be IN. |
firstName |
Mandatory | First name of the individual. Must not contain digits. |
surName |
Mandatory | Last name of the individual. Must not contain digits. |
dateOfBirth |
Mandatory | Date of birth, in the past. Format: YYYY-MM-DD (for example, 1987-08-17). |
idNumber |
Mandatory | Passport number. Exactly 8 characters, uppercase: 1 letter followed by 7 digits (for example, S3733862). Values are uppercased before matching, so lowercase input is accepted. |
fileNumber |
Mandatory | Passport file number (PRFN). Exactly 15 characters, uppercase: 2 letters followed by 13 digits (for example, BO3072344560818). Values are uppercased before matching, so lowercase input is accepted. |
dateOfIssue |
Optional | Passport issue date. Format: YYYY-MM-DD (for example, 2018-05-14). |
Sample request
{
"plugins": ["kyc"],
"source": "INDIA_PASSPORT_1",
"country": "IN",
"firstName": "Vikram",
"surName": "Reddy",
"dateOfBirth": "1988-06-23",
"idNumber": "J4567890",
"fileNumber": "DL1234567890123",
"dateOfIssue": "2020-02-10"
}
Sample response
{
"kyc": [
{ "key": "fullNameMatch", "status": "exact" },
{ "key": "dobMatch", "status": "exact" },
{ "key": "idNumberMatch", "status": "exact" },
{ "key": "fileNumberMatch", "status": "exact" },
{ "key": "dateOfIssueMatch", "status": "exact" },
{ "key": "overallLevel", "status": "low" }
],
"income": []
}
Response fields
| Field | Statuses | Description |
|---|---|---|
fullNameMatch |
exact, fuzzy, nomatch |
Matches the submitted full name (firstName + surName, concatenated) against the name on record for the passport. Name is verified as one string — firstNameMatch/lastNameMatch are not returned for this source. |
dobMatch |
exact, nomatch |
Matches date of birth submitted against the value on record for the passport. |
idNumberMatch |
exact, nomatch |
Matches the submitted passport number against the government-partnered source. |
fileNumberMatch |
exact, nomatch |
Matches the submitted passport file number (PRFN) against the government-partnered source. |
dateOfIssueMatch |
exact, nomatch |
Matches the submitted passport issue date against the value on record. Returned only when dateOfIssue was included in the request. |
overallLevel |
low, medium, high |
Overall risk level based on submitted full name, date of birth, and passport number. fileNumberMatch and dateOfIssueMatch do not factor into this calculation. See below for calculation logic. |
overallLevel calculation
overallLevel is calculated based on the submitted full name, date of birth, and passport number only — fileNumberMatch and dateOfIssueMatch are not used in this calculation:
lowwhen (fullNameMatchisexactORfullNameMatchisfuzzy) ANDdobMatchisexactANDidNumberMatchisexact.highwhenfullNameMatchisnomatchANDdobMatchisnomatchANDidNumberMatchisnomatch.mediumfor all other combinations.
Error responses
See the eKYC API Reference for standard HTTP response codes and error handling conventions.