Skip to main content

การยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC

1 ICต่อการเรียกใช้งาน
v1.0 ใช้งานได้ POST /v3/store/ekyc/face-and-id-card-verification

ทดลองใช้ Demo!

ทดลองใช้ AI Demo

เข้าสู่ระบบหรือสร้างบัญชีฟรีเพื่อใช้งาน AI Demo และสำรวจ API ที่ทรงพลังของเรา

รับ 50 เครดิตฟรี (IC) เมื่อสมัครสมาชิก!

โปรโมชันหมดเขต 31 ธันวาคม 2568

ตัวอย่างรูปเซลฟี่ (คลิกเพื่อลอง)

Example 1

ตัวอย่างรูปบัตรประชาชน (คลิกเพื่อลอง)

Example 1

เริ่มต้นใช้งาน

การยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC เป็นบริการที่ใช้ AI ในการเปรียบเทียบรูปเซลฟี่กับรูปบนบัตรประชาชนเพื่อยืนยันตัวตนสำหรับวัตถุประสงค์ KYC (Know Your Customer)

ตัวอย่าง

บริการนี้รับอินพุตสองอย่าง:

  1. รูปภาพบัตรประชาชน (รูปภาพขนาดใหญ่)
  2. รูปภาพเซลฟี่ของผู้ถือบัตร (รูปภาพขนาดเล็ก)

จากนั้นจะวิเคราะห์และยืนยันว่ารูปภาพทั้งสองแสดงบุคคลเดียวกันหรือไม่

คุณสมบัติและความสามารถ

คุณสมบัติหลัก

  • การจับคู่ใบหน้าระหว่างเซลฟี่กับรูปบนบัตรประชาชน
  • การยืนยันความแม่นยำสูง
  • การประมวลผลที่รวดเร็วภายใน 0.1 วินาที
  • ไม่มีการเก็บข้อมูลหลังการประมวลผล (เป็นไปตามข้อกำหนด GDPR)

เขตข้อมูลที่รองรับ

  • รูปแบบไฟล์รูปภาพ: JPG, JPEG, PNG, GIF
  • ขนาดรูปภาพ: กว้าง 600px x สูง 400px
  • ขนาดไฟล์สูงสุด: 10MB ต่อรูปภาพ

ตัวอย่าง

คำขอสำหรับการยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC

แสดงตัวอย่างรูปภาพ

รูปภาพ 1รูปภาพ 2
    curl --location 'https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification' \
--header 'apikey: {{{YOUR API KEY}}}' \
--form 'file0=@"image1.png"' \
--form 'file1=@"image2.png"'

การตอบกลับสำหรับการยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC

{
"idcard": { "confidence": 66.872, "isSamePerson": "true" },
"selfie": { "confidence": 86.04, "isSamePerson": "true" },
"time_process": 0.824,
"total": { "confidence": 76.456, "isSamePerson": "true" }
}

API Endpoints

EndpointMethodคำอธิบายราคา
POST /v3/internal/ekyc/face-and-id-card-verification/v2
รุ่นเก่า: /api/v2/ekyc
POSTการยืนยันใบหน้า + บัตรประชาชน1 IC ต่อการเรียกใช้งาน
POST /v3/store/ekyc/face-and-id-card-verification
รุ่นเก่า: /face-verify-id2
POSTการยืนยันใบหน้า + บัตรประชาชน1 IC ต่อการเรียกใช้งาน
POST /v3/store/ekyc/face-and-id-card-verification/front
รุ่นเก่า: /thai-national-id-card/v3/front/kyc
POSTการยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC (ด้านหน้า)1 IC ต่อหน้า
POST /v3/store/ekyc/face-and-id-card-verification/back
รุ่นเก่า: /thai-national-id-card/v3/back/kyc
POSTการยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC (ด้านหลัง)1 IC ต่อหน้า

API Reference

Endpoints การยืนยันใบหน้าและบัตรประชาชน

1. การยืนยันใบหน้า + บัตรประชาชน (V2 API)

POST /v3/store/ekyc/face-and-id-card-verification/v2

ยืนยันว่าเซลฟี่ตรงกับรูปบนบัตรประชาชนหรือไม่ โดยใช้ Endpoint API V2


2. การยืนยันใบหน้า + บัตรประชาชน

POST /v3/store/ekyc/face-and-id-card-verification

ยืนยันว่าเซลฟี่ตรงกับรูปบนบัตรประชาชนหรือไม่


3. การยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC (ด้านหน้า)

POST /v3/store/ekyc/face-and-id-card-verification/kyc-front

ประมวลผลด้านหน้าของบัตรประชาชนไทยสำหรับการยืนยัน KYC


4. การยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC (ด้านหลัง)

POST /v3/store/ekyc/face-and-id-card-verification/kyc-back

ประมวลผลด้านหลังของบัตรประชาชนไทยสำหรับการยืนยัน KYC


พารามิเตอร์คำขอ

ชื่อประเภทตำแหน่งจำเป็นคำอธิบาย
apikeyStringheaderใช่คีย์การยืนยันตัวตน API
file0Filebodyใช่ไฟล์รูปภาพบัตรประชาชน
file1Filebodyใช่ไฟล์รูปภาพเซลฟี่

การตอบกลับ

สถานะคำอธิบาย
200การตอบกลับการยืนยันที่สำเร็จ

ข้อความแสดงข้อผิดพลาดของ API

ข้อความแสดงข้อผิดพลาดทั่วไป

รหัสสถานะข้อความสถานะคำอธิบาย
404no route matched with those values.ไม่พบเส้นทางที่ตรงกัน โปรดตรวจสอบ URL อีกครั้ง
405the method is not allowed for the requested URL.เมธอดไม่ได้รับอนุญาตสำหรับ URL ที่ร้องขอ
413file is too large, more than 10 MB.ไฟล์มีขนาดใหญ่เกินไป เกิน 10 MB
415file extension is not allowed.นามสกุลไฟล์ไม่ได้รับอนุญาตสำหรับ URL นี้

ข้อความแสดงข้อผิดพลาดเฉพาะของไคลเอ็นต์

รหัสสถานะข้อความสถานะคำอธิบาย
420parameter not found in request. [file0, file1]ไม่พบพารามิเตอร์ในคำขอ โปรดระบุพารามิเตอร์ในคำขอ
421(face, id card, face on id card) not found in image. [file0, file1]ไม่พบใบหน้า, บัตรประชาชน หรือใบหน้าบนบัตรประชาชนในรูปภาพสำหรับ API
422face on (id card, selfie) not found in image. [file0, file1]ไม่พบใบหน้าบนบัตรประชาชนหรือเซลฟี่ในรูปภาพ
441too many images.มีรูปภาพมากเกินไปในพารามิเตอร์
442image error, unsupported format.รูปภาพมีข้อผิดพลาด รูปแบบไม่รองรับ
461no file attached.ไม่มีไฟล์แนบ

ตัวอย่างโค้ด

Python

import requests

url = "https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification"

payload = {}
files=[
('file0',('{IMAGE FILE 1}',open('{IMAGE FILE PATH 1}','rb'),'image/png')),
('file1',('{IMAGE FILE 2}',open('{IMAGE FILE PATH 2}','rb'),'image/png'))
]
headers = {
'apikey': '{YOUR API KEY}'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

JavaScript

const axios = require("axios")
const FormData = require("form-data")
const fs = require("fs")
let data = new FormData()
data.append("file0", fs.createReadStream("{IMAGE FILE PATH 1}"))
data.append("file1", fs.createReadStream("{IMAGE FILE PATH 2}"))

let config = {
method: "post",
maxBodyLength: Infinity,
url: "https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification",
headers: {
apikey: "{YOUR API KEY}",
...data.getHeaders(),
},
data: data,
}

axios
.request(config)
.then((response) => {
console.log(JSON.stringify(response.data))
})
.catch((error) => {
console.log(error)
})

PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('file0'=> new CURLFILE('{IMAGE FILE PATH 1}'),'file1'=> new CURLFILE('{IMAGE FILE PATH 2}')),
CURLOPT_HTTPHEADER => array(
'apikey: {YOUR API KEY}'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Swift

let parameters = [
[
"key": "file0",
"src": "{IMAGE FILE PATH 1}",
"type": "file"
],
[
"key": "file1",
"src": "{IMAGE FILE PATH 2}",
"type": "file"
]] as [[String: Any]]

let boundary = "Boundary-\(UUID().uuidString)"
var body = Data()
var error: Error? = nil
for param in parameters {
if param["disabled"] != nil { continue }
let paramName = param["key"]!
body += Data("--\(boundary)\r\n".utf8)
body += Data("Content-Disposition:form-data; name=\"\(paramName)\"".utf8)
if param["contentType"] != nil {
body += Data("\r\nContent-Type: \(param["contentType"] as! String)".utf8)
}
let paramType = param["type"] as! String
if paramType == "text" {
let paramValue = param["value"] as! String
body += Data("\r\n\r\n\(paramValue)\r\n".utf8)
} else {
let paramSrc = param["src"] as! String
let fileURL = URL(fileURLWithPath: paramSrc)
if let fileContent = try? Data(contentsOf: fileURL) {
body += Data("; filename=\"\(paramSrc)\"\r\n".utf8)
body += Data("Content-Type: \"content-type header\"\r\n".utf8)
body += Data("\r\n".utf8)
body += fileContent
body += Data("\r\n".utf8)
}
}
}
body += Data("--\(boundary)--\r\n".utf8);
let postData = body


var request = URLRequest(url: URL(string: "https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification")!,timeoutInterval: Double.infinity)
request.addValue("{YOUR API KEY}", forHTTPHeaderField: "apikey")
request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}

task.resume()

Kotlin

val client = OkHttpClient()
val mediaType = "text/plain".toMediaType()
val body = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file0","{IMAGE FILE 1}",
File("{IMAGE FILE PATH 1}").asRequestBody("application/octet-stream".toMediaType()))
.addFormDataPart("file1","{IMAGE FILE 2}",
File("{IMAGE FILE PATH 2}").asRequestBody("application/octet-stream".toMediaType()))
.build()
val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification")
.post(body)
.addHeader("apikey", "{YOUR API KEY}")
.build()
val response = client.newCall(request).execute()

Java

OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file0","{IMAGE FILE 1}",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("{IMAGE FILE PATH 1}")))
.addFormDataPart("file1","{IMAGE FILE 2}",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("{IMAGE FILE PATH 2}")))
.build();
Request request = new Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification")
.method("POST", body)
.addHeader("apikey", "{YOUR API KEY}")
.build();
Response response = client.newCall(request).execute();

Dart

var headers = {
'apikey': '{YOUR API KEY}'
};
var request = http.MultipartRequest('POST', Uri.parse('https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification'));
request.files.add(await http.MultipartFile.fromPath('file0', '{IMAGE FILE PATH 1}'));
request.files.add(await http.MultipartFile.fromPath('file1', '{IMAGE FILE PATH 2}'));
request.headers.addAll(headers);

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}

ความแม่นยำและประสิทธิภาพ

  • อัตราการปฏิเสธโดยไม่ตั้งใจ (FRR < 3%)
  • อัตราการยอมรับโดยไม่ตั้งใจ (FAR < 0.1%)

ตัวอย่างโค้ด

Curl

curl -X POST https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/face.jpg"

Python

import requests

url = "https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification"
files = {"file": ("("/path/to/face.jpg", "rb"))}
headers = {"apikey": "YOUR_API_KEY"}

response = requests.post(url, headers=headers, files=files)
print(response.json())

JavaScript

const axios = require("axios");
const FormData = require("form-data");
const fs = require("fs");

let data = new FormData();
data.append("file", fs.createReadStream("/path/to/face.jpg"));

let config = {
method: "post",
url: "https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification",
headers: {
apikey: "YOUR_API_KEY",
...data.getHeaders(),
},
data: data,
};

axios(config)
.then((response) => console.log(response.data))
.catch((error) => console.log(error));

PHP

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => array(
'file'=> new CURLFILE('/path/to/face.jpg')
),
CURLOPT_HTTPHEADER => array(
'apikey: YOUR_API_KEY'
),
));

$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>

Swift

import Foundation

let url = URL(string: "https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")

let boundary = "Boundary-\(UUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

var body = Data()
body.append("--\(boundary)\r\n".data(using: .utf8)!)
body.append("Content-Disposition: form-data; name=\"file\"; filename=\"file.jpg\"\r\n".data(using: .utf8)!)
body.append("Content-Type: image/jpeg\r\n\r\n".data(using: .utf8)!)

if let fileData = try? Data(contentsOf: URL(fileURLWithPath: "/path/to/face.jpg")) {
body.append(fileData)
}
body.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)

request.httpBody = body

let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
print(String(data: data, encoding: .utf8)!)
}
}
task.resume()

Kotlin

import okhttp3.*
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.asRequestBody
import java.io.File

val client = OkHttpClient()

val file = File("/path/to/face.jpg")
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.name, file.asRequestBody("image/jpeg".toMediaTypeOrNull()))
.build()

val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification")
.addHeader("apikey", "YOUR_API_KEY")
.post(requestBody)
.build()

client.newCall(request).execute().use { response ->
println(response.body?.string())
}

Java

import okhttp3.*;
import java.io.File;

OkHttpClient client = new OkHttpClient();

File file = new File("/path/to/face.jpg");

RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(),
RequestBody.create(MediaType.parse("image/jpeg"), file))
.build();

Request request = new Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification")
.addHeader("apikey", "YOUR_API_KEY")
.post(requestBody)
.build();

try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
}

Dart

import 'package:http/http.dart' as http;

var request = http.MultipartRequest(
'POST',
Uri.parse('https://api.iapp.co.th/v3/store/ekyc/face-and-id-card-verification')
);

request.files.add(await http.MultipartFile.fromPath(
'file',
'/path/to/face.jpg'
));

request.headers.addAll({
'apikey': 'YOUR_API_KEY'
});

var response = await request.send();
var responseBody = await response.stream.bytesToString();
print(responseBody);

ราคา

การดำเนินการProduction PathLegacy Pathค่าใช้จ่าย ICหน่วยOn-Premise
การยืนยันใบหน้า + บัตรประชาชน (V2 API)/v3/store/ekyc/face-and-id-card-verification/v2/api/v2/ekyc1 ICต่อ 1 คำขอติดต่อเรา
การยืนยันใบหน้า + บัตรประชาชน/v3/store/ekyc/face-and-id-card-verification/face-verify-id21 ICต่อ 1 คำขอ
การยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC (ด้านหน้า)/v3/store/ekyc/face-and-id-card-verification/kyc-front/thai-national-id-card/v3/front/kyc1 ICต่อ 1 หน้า
การยืนยันใบหน้าและบัตรประชาชนสำหรับ KYC (ด้านหลัง)/v3/store/ekyc/face-and-id-card-verification/kyc-back/thai-national-id-card/v3/back/kyc1 ICต่อ 1 หน้า