Skip to main content

Photographed Thai National ID Card With Signature Detection

Mobile & Web SDK available

Skip the camera work — our free open-source eKYC SDK (Web, Flutter, iOS, Android & React Native) auto-captures documents and faces and calls this API for you. View on GitHub.

The Photographed Thai National ID Card With Signature Detection API extracts structured data from photographed copies of Thai National ID cards — color or black and white — and detects whether the copy has been signed. It locates the card in the image automatically and returns the ID number, names, date of birth, address, and expiry date as JSON with per-field confidence scores. The production service processes a card in 0.7 seconds (median) and sustains more than 10,500 cards per hour. Measured field-level accuracy is 97.1 percent against human-verified ground truth, with the 13-digit national ID number at 100 percent; see Accuracy.

Live Demo

Upload a photographed copy of a Thai national ID card, or select an example below. The examples are synthetic specimen cards, not real documents.

Try Our AI Demo

Login or create a free account to use this AI service demo and explore our powerful APIs.

Get 100 Free Credits (IC) when you sign up!

Offer ends December 31, 2025

Example Images (Click to try)

Example 1
Try Demo
Example 2
Try Demo

Try the SDK (Live Camera)

Prefer not to upload a file? The free open-source iApp eKYC Web SDK captures the photographed ID card copy automatically from your camera — it detects the card boundary, waits for a sharp stable frame, perspective-corrects the image, and submits it to this API. See more flows on the full SDK live demo page.

Loading live demo…

Quick Start

You need an API key from the API Key Management page. Send the image as multipart/form-data:

curl -X POST https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature \
-H "apikey: YOUR_API_KEY" \
-F "file=@idcard.jpg"
{
"national_id": "3411700830334",
"fullname_th": "นาง บุญยัง โลเปช",
"fullname_en": "Mrs. Bunyang Lopez",
"date_of_birth": "22 มี.ค. 2500",
"address_full": "33/349 หมู่ที่ 7 ต.หนองปรือ อ.บางละมุง จ.ชลบุรี",
"reason_code_id_card_signature": 1,
"process_time": 0.7
}

The full response schema is in the Technical Reference.

Endpoints and Pricing

EndpointOutputPrice
POST /v3/store/ekyc/thai-national-id-card-with-signatureJSON with extracted fields, signature detection, and confidence scores1.25 IC per page

The legacy paths /thai-national-id-card-with-signature/front and /thai-national-id-card/copy remain supported at the same price. This API is optimized for photographed copies; for OCR directly from physical ID cards, use Thai National ID Card OCR. For on-premise deployment, see Data Security.

Performance

Measured on the production service, August 2026.

MetricValue
Median processing time0.7 s per card
Sustained throughput2.9 cards per second (10,500 cards per hour)
Maximum file size2 MB
Supported input formatsJPEG, JPG, PNG, HEIC, HEIF
Minimum card size in image600 × 400 px

Accuracy

Accuracy is measured against human-verified ground truth: 33 labeled Thai national ID cards, 594 individual field observations. The ground-truth dataset contains real ID cards and is kept private for privacy reasons; the methodology is fully specified in the whitepaper below.

FieldExact match
National ID number (13 digits)100%
Address: house number97.0%
Address (full)93.9%
All fields (overall)97.1%
Signature detection96.5%

The v1.1.1 recognition engine improved overall field-level accuracy from 96.3% to 97.1% compared with the previous engine, with the largest gains on house numbers and addresses. Full methodology, per-field results, and comparison against a leading global cloud OCR service are published in the benchmark whitepaper:

Download the benchmark whitepaper (PDF)

Data Security and Compliance

  • The service is GDPR and PDPA compliant.
  • Uploaded images are processed in memory and are not retained after the response is returned.
  • A fully self-contained on-premise deployment is available, in which no card data leaves your infrastructure. Contact us for details.

Technical Reference

Request

POST with multipart/form-data and the apikey header.

ParameterRequiredDescription
fileYesPhotographed copy of a Thai national ID card (front side)

Response

{
"national_id": "3411700830334",
"init_th": "นาง",
"init_en": "Mrs.",
"name_th": "บุญยัง",
"name_en": "Bunyang",
"surname_th": "โลเปช",
"surname_en": "Lopez",
"fullname_th": "นาง บุญยัง โลเปช",
"fullname_en": "Mrs. Bunyang Lopez",
"date_of_birth": "22 มี.ค. 2500",
"date_of_expire": "21 มี.ค. 2568",
"address_full": "33/349 หมู่ที่ 7 ต.หนองปรือ อ.บางละมุง จ.ชลบุรี",
"address_number": "33/349 หมู่ที่ 7",
"address_subdistrict": "ต.หนองปรือ",
"address_district": "บางละมุง",
"address_province": "ชลบุรี",
"address_postal_code": "20150",
"file_name_id_card": "idcard.jpg",
"process_time": 0.7,
"reason_code_api": 200,
"reason_code_id_card": 1,
"reason_code_id_card_national_id": 1,
"reason_code_id_card_signature": 1,
"request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"confidence": {
"national_id": 0.95,
"fullname_th": 0.95,
"date_of_birth": 0.9,
"address_full": 0.95
}
}

Response Fields

FieldTypeDescription
national_idString13-digit national ID number
init_th / init_enStringName title (Thai / English)
name_th / name_enStringGiven name (Thai / English)
surname_th / surname_enStringSurname (Thai / English)
fullname_th / fullname_enStringFull name (Thai / English)
date_of_birthStringDate of birth, Thai format
date_of_expireStringCard expiry date, Thai format
address_fullStringFull address as printed
address_numberStringHouse number and moo
address_subdistrict / address_district / address_provinceStringAddress components
address_postal_codeStringPostal code (derived)
file_name_id_cardStringUploaded file name
process_timeFloatProcessing time in seconds
reason_code_apiIntegerResponse status code (see below)
reason_code_id_cardInteger1 if an ID card was found in the image, 0 otherwise
reason_code_id_card_national_idInteger1 if the national ID number was found, 0 otherwise
reason_code_id_card_signatureInteger1 if a signature was found on the paper, 0 otherwise
request_idStringRequest ID from the API gateway
confidenceObjectConfidence score (0–1) per extracted field

Response Codes

Status CodeStatus MessageDescription
200SUCCESSRequest successful
404REQUESTED_URL_NOT_FOUNDAPI route not found
405METHOD_NOT_ALLOWEDIncorrect HTTP method
413IMAGE_FILE_IS_TOO_LARGEFile exceeds the 2 MB limit
414NO_FILE_ATTACHEDNo file in the request
415INVALID_IMAGE_SIZEImage dimensions invalid
420NO_ID_CARD_FOUNDID card not detected in the image
421IMAGE_ERROR_UNSUPPORTED_FORMATUnsupported or corrupted image format
422INVALID_IMAGE_SIZEImage size requirements not met
427LONG_TIME_TO_PROCESSServer processing timeout
428LONG_TIME_TO_REQUESTQueue timeout
560SERVER_IS_BUSYServer overloaded, retry
563ID_CARD_API_NOT_SUPPORT_THIS_IMAGEProcessing error

Code Examples

curl -X POST https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature \
-H "apikey: YOUR_API_KEY" \
-F "file=@idcard.jpg"

Limitations

  • Optimized for photographed copies of ID cards; for physical cards use Thai National ID Card OCR.
  • The card must be at least 600 × 400 px in the image; scans at 300 dpi or higher give the best results.
  • Files larger than 2 MB are rejected.
  • Very low-resolution field crops reduce recognition quality; ensure the card is in focus and fills a reasonable portion of the frame.

Changelog

VersionDateChanges
v1.1.1-2026082222 Aug 2026Upgraded recognition engine: field-level accuracy improved from 96.3% to 97.1% against human-verified ground truth, with the national ID number at 100%. Median processing time 0.7 s per card. Fully self-contained on-premise deployment available.
v1.02023Initial release with signature detection.