Identity document types perform structured extraction from Indian government-issued documents. All 7 types handle varied layouts, regional languages, laminated cards, and partially visible fields.
Sensitive fields such as aadhaar_number, pan_number, engine_number, and chassis_number are automatically masked in logs and audit output (mask: true).
Identity documents are where the fraud checks earn their keep: run synthetic & tampered document detection on the upload, likeness-match the ID photo against the live selfie, and gate completion with Goal Rules — the format and checksum rules below are enforced deterministically, so a fabricated ID number fails before any human sees the case. Cross-verification then confirms the name, date of birth, and address agree across every document in the case.
kyc_aadhaar — Aadhaar Card
Analysis type: extraction
Fields extracted
| Field | Type | Notes |
|---|
aadhaar_number | string | 12-digit number |
name | string | Name as printed |
date_of_birth | string | YYYY-MM-DD or null |
gender | string | M, F, or O |
address | string | Full address as printed |
pin_code | string | 6-digit PIN code |
father_name | string | null if not printed |
spouse_name | string | null if not printed |
mobile_number | string | May be masked like XXXXXXX1234 |
vid | string | 16-digit Virtual ID if printed |
photo_present | boolean | Whether photo is visible on this side |
qr_code_present | boolean | Whether QR code is visible |
issue_date | string | YYYY-MM-DD or null |
Validation rules
| Field | Rule |
|---|
aadhaar_number | Required · Regex ^[0-9]{12}$ · Masked |
name | Required |
Example
const result = await client.verify.document({
doc_type: "kyc_aadhaar",
file_url: "https://storage.example.com/aadhaar_front.jpg",
});
// result.output.aadhaar_number → "XXXX XXXX 5678" (masked)
// result.output.name → "Priya Sharma"
// result.output.date_of_birth → "1990-04-15"
kyc_pan_card — PAN Card
Analysis type: extraction
Fields extracted
| Field | Type | Notes |
|---|
pan_number | string | 10-character alphanumeric |
name | string | Name as printed |
father_name | string | null if not printed |
date_of_birth | string | YYYY-MM-DD or null |
pan_type | string | Inferred from 4th character: P=Individual, C=Company, H=HUF, T=Trust |
photo_present | boolean | Whether photo is visible |
signature_present | boolean | null if not visible |
Validation rules
| Field | Rule |
|---|
pan_number | Required · Regex ^[A-Z]{5}[0-9]{4}[A-Z]$ · Format: uppercase · Masked |
name | Required |
Example
const result = await client.verify.document({
doc_type: "kyc_pan_card",
file_url: "https://storage.example.com/pan.jpg",
});
// result.output.pan_number → "XXXXX1234X" (masked)
// result.output.pan_type → "P" (Individual)
passport — Passport
Analysis type: extraction
Fields extracted
| Field | Type | Notes |
|---|
passport_number | string | Passport number |
surname | string | Surname |
given_names | string | Given names |
full_name | string | Full name as printed (e.g. RATHORE DINESH) |
date_of_birth | string | YYYY-MM-DD |
date_of_issue | string | YYYY-MM-DD |
date_of_expiry | string | YYYY-MM-DD |
sex | string | M or F |
nationality | string | e.g. INDIAN, BRITISH |
place_of_birth | string | null if not printed |
place_of_issue | string | null if not printed |
issuing_country | string | null if not printed |
father_name | string | null if not printed |
mother_name | string | null if not printed |
spouse_name | string | null if not printed |
address | string | Address page contents, null if not visible |
pin_code | string | null if not printed |
file_number | string | Passport file number, null if not printed |
old_passport_number | string | Previous passport number if mentioned |
emergency_contact | string | Name and phone if printed |
mrz_line1 | string | First MRZ line if visible |
mrz_line2 | string | Second MRZ line if visible |
photo_present | boolean | Whether photo is visible |
Validation rules
| Field | Rule |
|---|
full_name | Required |
passport_number | Required · Format: uppercase |
nationality | Required |
date_of_birth | Required · Format: date_iso |
date_of_expiry | Required · Format: date_iso |
Example
const result = await client.verify.document({
doc_type: "passport",
file_url: "https://storage.example.com/passport_bio_page.jpg",
});
// result.output.passport_number → "N1234567"
// result.output.date_of_expiry → "2030-08-15"
// result.output.mrz_line1 → "P<INDMEHTA<<ROHIT<KUMAR<<<<<<<<<<<<<<<<<<"
kyc_driving_license — Driving License
Analysis type: extraction
Fields extracted
| Field | Type | Notes |
|---|
license_number | string | Driving license number |
name | string | Name as printed |
date_of_birth | string | YYYY-MM-DD or null |
date_of_issue | string | YYYY-MM-DD or null |
expiry_date | string | YYYY-MM-DD |
address | string | Full address or null |
pin_code | string | null if not printed |
state | string | Issuing state |
issuing_authority | string | RTO name and code |
vehicle_classes | string[] | e.g. LMV, MCWG, HMV, LMV-NT |
blood_group | string | e.g. O+, A-, B+ |
organ_donor | boolean | null if not printed |
father_or_spouse | string | Father/husband name or null |
emergency_contact | string | Phone number on back |
photo_present | boolean | Whether photo is visible |
Validation rules
| Field | Rule |
|---|
license_number | Required |
name | Required |
expiry_date | Required · Format: date_iso |
Example
const result = await client.verify.document({
doc_type: "kyc_driving_license",
file_url: "https://storage.example.com/dl_front.jpg",
});
// result.output.license_number → "MH0120220012345"
// result.output.vehicle_classes → ["LMV", "MCWG"]
// result.output.expiry_date → "2040-06-30"
voter_id — Voter ID
Analysis type: extraction
Fields extracted
| Field | Type | Notes |
|---|
epic_number | string | 10-character alphanumeric EPIC number |
name | string | Name as printed |
date_of_birth | string | YYYY-MM-DD or null |
age | integer | If DOB not printed, age may be shown |
gender | string | M, F, or O |
address | string | null if not printed |
father_or_husband_name | string | null if not printed |
relation_type | string | Father, Husband, Mother |
constituency | string | Parliamentary or assembly constituency |
part_number | string | null if not printed |
serial_number | string | null if not printed |
photo_present | boolean | Whether photo is visible |
Validation rules
| Field | Rule |
|---|
epic_number | Required · Regex ^[A-Z]{3}[0-9]{7}$ · Format: uppercase |
name | Required |
Example
const result = await client.verify.document({
doc_type: "voter_id",
file_url: "https://storage.example.com/voter_id.jpg",
});
// result.output.epic_number → "ABC1234567"
// result.output.constituency → "Bangalore Central"
ration_card — Ration Card
Analysis type: extraction
Fields extracted
| Field | Type | Notes |
|---|
card_number | string | Ration card number |
head_of_family | string | Primary card holder name |
address | string | null if not printed |
state | string | null if not printed |
district | string | null if not printed |
card_type | string | APL, BPL, AAY, PHH, NPHH, Antyodaya |
issue_date | string | YYYY-MM-DD or null |
fps_name | string | Fair Price Shop name or number |
members | object[] | List of family members: name, age, relation, aadhaar_number (may be masked) |
Validation rules
| Field | Rule |
|---|
card_number | Required |
head_of_family | Required |
Example
const result = await client.verify.document({
doc_type: "ration_card",
file_url: "https://storage.example.com/ration_card.jpg",
});
// result.output.card_type → "BPL"
// result.output.members → [
// { name: "Ramu Das", age: 45, relation: "self", aadhaar_number: null },
// { name: "Sunita Das", age: 40, relation: "wife", aadhaar_number: "XXXX XXXX 9012" }
// ]
vehicle_rc — Vehicle Registration Certificate (RC)
Analysis type: extraction
Fields extracted
| Field | Type | Notes |
|---|
registration_number | string | e.g. MH01AB1234 |
owner_name | string | Registered owner name |
make_model | string | Manufacturer and model (e.g. Maruti Swift) |
vehicle_class | string | e.g. LMV, M-Cycle, HGV |
fuel_type | string | petrol, diesel, CNG, electric, hybrid |
engine_number | string | Engine number |
chassis_number | string | Chassis number |
color | string | null if not printed |
body_type | string | sedan, hatchback, SUV etc. |
manufacturing_year | string | YYYY or null |
registration_date | string | YYYY-MM-DD or null |
registration_valid_until | string | YYYY-MM-DD or null |
fitness_valid_until | string | YYYY-MM-DD or null |
pucc_valid_until | string | YYYY-MM-DD or null |
insurance_valid_until | string | YYYY-MM-DD or null |
seating_capacity | integer | null if not printed |
cubic_capacity | string | CC or null |
hypothecation | string | Financier name if under loan |
rto_name | string | Issuing RTO |
father_or_spouse_name | string | null if not printed |
address | string | null if not printed |
Validation rules
| Field | Rule |
|---|
registration_number | Required · Regex ^[A-Z]{2}[0-9]{1,2}[A-Z]{0,3}[0-9]{1,4}$ · Format: uppercase |
owner_name | Required |
engine_number | Required · Masked |
chassis_number | Required · Masked |
Example
const result = await client.verify.document({
doc_type: "vehicle_rc",
file_url: "https://storage.example.com/rc.jpg",
});
// result.output.registration_number → "MH01AB1234"
// result.output.fuel_type → "petrol"
// result.output.insurance_valid_until → "2026-12-31"
// result.output.engine_number → "XXXXXXX7890" (masked)