跳到主要内容

👤🪪 面部和身份证件验证,用于 KYC

1 IC每次请求
✅ 活跃🪪 eKYC
试用演示

访问我们的 API 门户,使用您自己的图片测试面部和身份证件验证 KYC API。

试用演示!

自拍照示例图片 (点击尝试)

Example 1

身份证件示例图片 (点击尝试)

Example 1

入门

面部和身份证件验证 KYC 是一项由 AI 驱动的服务,它将自拍照与身份证照片进行比较,以验证 KYC(了解您的客户)目的的身份。

示例

该服务需要两个输入:

  1. 身份证照片(大图)
  2. 身份证件持有者的自拍照(小图)

然后,它会分析并确认两张照片是否显示的是同一个人。

功能和能力

核心功能

  • 自拍照与身份证照片之间的面部匹配
  • 高精度验证
  • 0.1 秒内快速处理
  • 处理后不保留数据(符合 GDPR)

支持的字段

  • 图片格式:JPG、JPEG、PNG、GIF
  • 图片尺寸:600 像素宽 x 400 像素高
  • 最大文件大小:每个图片 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 端点

端点方法描述费用
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 参考

面部和身份证件验证端点

1. 面部 + 身份证件验证 (V2 API)

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

使用 V2 API 端点验证自拍照是否与身份证照片匹配。


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 验证。


请求参数

名称类型位置是否必填描述
apikeyStringheaderAPI 认证密钥
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.文件过大,超过 10MB。
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]在此图片中未找到身份证件或面部。
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);

定价

操作生产路径旧版路径IC 费用单位本地部署
面部 + 身份证件验证 (V2 API)/v3/store/ekyc/face-and-id-card-verification/v2/api/v2/ekyc1 IC每次请求联系我们
面部 + 身份证件验证/v3/store/ekyc/face-and-id-card-verification/face-verify-id21 IC每次请求
面部和身份证件验证 KYC(正面)/v3/store/ekyc/face-and-id-card-verification/kyc-front/thai-national-id-card/v3/front/kyc1 IC每页
面部和身份证件验证 KYC(背面)/v3/store/ekyc/face-and-id-card-verification/kyc-back/thai-national-id-card/v3/back/kyc1 IC每页