ID Document OCR
Documents & BiometricsExtract structured data from Aadhaar, PAN, passport, DL, voter ID and more.
Upload a photo or scan of an Indian ID document and receive its fields as structured data: name, number, date of birth, address and document type. Auto-fill forms, cut manual entry and feed the extracted number straight into source verification.
Endpoint
Request parameters
| Field | Type | Description |
|---|---|---|
document_image_front_and_back_where_applicable
required
|
string | Document image (front, and back where applicable) |
expected_document_type
optional
|
string | Expected document type |
Example request
curl -X POST https://app.emver.io/api/sandbox/v1/id-document-ocr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"document_image_front_and_back_where_applicable": "string",
"expected_document_type": "string"
}'
import requests
response = requests.post(
"https://app.emver.io/api/sandbox/v1/id-document-ocr",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
},
json={
"document_image_front_and_back_where_applicable": "string",
"expected_document_type": "string"
},
timeout=60,
)
response.raise_for_status()
data = response.json()
const response = await fetch("https://app.emver.io/api/sandbox/v1/id-document-ocr", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
},
body: JSON.stringify({
"document_image_front_and_back_where_applicable": "string",
"expected_document_type": "string"
}),
});
const data = await response.json();
$response = Http::withToken('YOUR_API_KEY')
->acceptJson()
->post('https://app.emver.io/api/sandbox/v1/id-document-ocr', {
"document_image_front_and_back_where_applicable": "string",
"expected_document_type": "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": {
"detected_document_type": STRING,
"extracted_fields": STRING,
"image_quality_score": STRING,
"masked_identifiers": STRING
}
}
Example · 200
{
"status": 200,
"message": "string",
"data": {
"detected_document_type": "string",
"extracted_fields": "string",
"image_quality_score": "string",
"masked_identifiers": "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
Manual data entry from ID cards is slow and error-prone. The ID Document OCR API classifies the document, reads its fields and returns them in a clean structure, together with a quality score so blurry or cropped uploads can be rejected up front.
It is designed to sit in front of the verification APIs: extract the PAN or Aadhaar from the image, then validate it at source with a second call on the same key.
Typical uses
- Candidate and customer onboarding. Auto-fill personal details from an uploaded ID.
- Mobile-first KYC. Capture and read documents on the phone camera.
- Back-office digitisation. Extract data from archives of scanned documents.
- Fraud triage. Flag documents whose printed data does not match declared data.
Questions
- Does OCR verify the document is genuine?
- OCR reads it. Genuineness comes from the source-verification APIs, which emver recommends calling with the extracted number.
- Are document images stored?
- Images are processed and then purged under your organisation's retention setting. Masked identifiers are returned.