Các API của luồng cập nhật thông tin
-
Tài liệu này mô tả các API của luồng cập nhật thông tin (hay còn gọi là luồng eKYC) của hệ thống FPT AI eKYC. Các API của luồng này bao gồm:
-
Base URL
-
Môi trường Staging: https://api.fpt.ai/vision/ekyc/be-stag
-
Môi trường Production: https://api.fpt.ai/vision/ekyc-be
-
-
Sơ đồ tuần tự gọi các API trong luồng cập nhật thông tin
1. API khởi tạo phiên
1.1. Request Url
POST base_url/session/init
Nếu sử dụng FPT AI eKYC SDK, bạn sử dụng URL sau:
POST base_url/init_session
1.2. Request Headers
| Tham số | Yêu cầu | Giá trị mặc định | Mô tả |
|---|---|---|---|
| api-key | Có | API key để sử dụng hệ thống FPT AI eKYC | |
| client_uuid | Không | UUID sinh ra từ hệ thống của khách hàng để tự quản lý phiên eKYC | |
| device-type | Có | Thiết bị đang sử dụng, các giá trị cho phép bao gồm:
| |
| only-engine | Không | Đặt giá trị bằng 1 khi sử dụng luồng chỉ OCR | |
| sdk-version | Không | String | Phiên bản của FPT AI eKYC SDK. Nên sử dụng tham số này để đảm bảo hiệu quả khi sử dụng SDK |
1.3. Mẫu request
curl --location --request POST 'base_url/init_session' \
--header 'Content-Type: application/json \
--header 'api-key: your-api-key' \
--header 'device-type: android' \
--header 'sdk-version: 3.7.1.22' \
--header 'client_uuid: your-uuid' \
--data-raw '{
"memory": "10.8",
"nfc_support": "true"
}
1.4. Response
1.4.1. Mẫu response
- Thành công: http_code = 200
{
"code": "200",
"message": "success",
"session-id": "7760a743-884b-4195-b781-892e72c7b0b6",
"sdk_config": {...},
"on_device_model_config": {...},
"expires_at": 1727186507.9348412
}
- Thất bại: http_code != 200
1.4.2. Mô tả response
| Tham số | Loại dữ liệu | Mô tả | Ghi chú |
|---|---|---|---|
| code | string | Mã trạng thái trả về của yêu cầu | 200: Thành công |
| message | string | Thông báo lỗi trả về (nếu có) |
|
| session-id | string | Mã ID duy nhất của phiên eKYC được sinh ra bởi eKYC Backend. session-id sau đó phải được gửi kèm trong headers của tất cả các request trong cùng phiên |
2. API OCR
2.1. Request Url
POST base_url/ocr
2.2. Request Headers
| Tham số | Yêu cầu | Loại dữ liệu | Mô tả | Chú ý |
|---|---|---|---|---|
| session-id | Có | String | ID duy nhất của phiên eKYC nhận được từ bước khởi tạo phiên | |
| api-key | Có | String | API key để sử dụng hệ thống FPT AI eKYC | |
| device-type | Có | String | Thiết bị đang sử dụng, các giá trị cho phép bao gồm:
| |
| document-type | Có | String | Loại giấy tờ sử dụng. Có 3 loại được hỗ trợ:
| |
| side-type | Không | String | Tùy chọn này dành cho trường hợp client muốn gửi từng mặt của giấy tờ lên server eKYC để xử lý ngay sau khi chụp, thay vì đợi chụp đủ cả hai mặt. Các giá trị bao gồm:
| |
| lang | Không | String | Ngôn ngữ sử dụng, các giá trị cho phép bao gồm:
| mặc định: en |
| get-detail-response | Không | String | Bao gồm dữ liệu thô của mô hình AI trong kết quả trả về (trong trường detail_response). |
|
| sdk-version | Không | String | Phiên bản của FPT AI eKYC SDK. Nên sử dụng tham số này để đảm bảo hiệu quả khi sử dụng SDK |
2.3. Request Body
FormData chứa các ảnh cho truy vấn. Ảnh mặt trước phải được cung cấp trước ảnh mặt sau.
Nếu document-type là passport hoặc sử dụng side-type trong headers, khách hàng chỉ cung cấp 1 ảnh cho hệ thống trong mỗi request.
| Tham số | Yêu cầu | Giá trị mặc định | Mô tả |
|---|---|---|---|
| files | Có | File ảnh | Ảnh chụp mặt trước của giấy tờ |
| files | Có | File ảnh | Ảnh chụp mặt sau của giấy tờ |
2.4. Mẫu request
curl --location --request POST 'base_url/ocr' \
--header 'api-key: your api-key' \
--header 'session-id: 7760a743-884b-4195-b781-892e72c7b0b6' \
--header 'device-type: android' \
--header 'document-type: idr' \
--header 'lang: vi' \
--form 'files=@"path-to-front.jpg"' \
--form 'files=@"path-to-back.jpg"'
2.5. Response
2.5.1. Mẫu response
- Thành công
{
"errorCode": "0",
"errorMessage": "",
"data": [
{
"key": "ID",
"name": "Số/ No",
"value": "xxxxx",
"score": "98.66",
"locale": "vn"
},
{
"key": "Name",
"name": "Họ và tên",
"value": "your name,
"score": "99.71",
"locale": "vn"
},
{
"key": "Date of birth",
"name": "Ngày sinh",
"value": "dd/mm/yyyy",
"score": "98.41",
"locale": "vn"
},
{
"key": "Sex",
"name": "Giới tính",
"value": "NAM",
"score": "98.30",
"locale": "vn"
},
{
"key": "Nationality",
"name": "Quốc tịch",
"value": "VIỆT NAM",
"score": "99.77",
"locale": "vn"
},
{
"key": "Home",
"name": "Quê quán",
"value": "X, Y NAM ĐỊNH",
"score": "96.54",
"locale": "vn"
},
{
"key": "Address",
"name": "Địa chỉ",
"value": "X, Y NAM ĐỊNH",
"score": "98.27",
"locale": "vn"
},
{
"key": "Expired Date",
"name": "Ngày hết hạn",
"value": "dd/mm/yyyy",
"score": "98.93",
"locale": "vn"
},
{
"key": "Type",
"name": "Loại",
"value": "7",
"score": "N/A",
"locale": "vn"
},
{
"key": "Province",
"name": "Tỉnh/Thành Phố",
"value": "NAM ĐỊNH",
"score": "N/A",
"locale": "vn"
},
{
"key": "District",
"name": "Quận/ Huyện",
"value": "Y,
"score": "N/A",
"locale": "vn"
},
{
"key": "Ward",
"name": "Phường/Xã",
"value": "X",
"score": "N/A",
"locale": "vn"
},
{
"key": "Features",
"name": "Đặc điểm nhận dạng",
"value": "SẸO CHẤM ,
"score": "99.78",
"locale": "vn"
},
{
"key": "Issue Date",
"name": "Ngày cấp",
"value": "dd/mm/yyyy",
"score": "99.31",
"locale": "vn"
},
{
"key": "Issue Location",
"name": "Nơi cấp",
"value": "CỤC TRƯỞNG CỤC CẢNH SÁT QUẢN LÝ HÀNH CHÍNH VỀ TRẬT TỰ XÃ HỘI",
"score": "95.40",
"locale": "vn"
}
],
"total_data": []
}
2.5.2. Mô tả response
| Tham số | Loại dữ liệu | Mô tả | Ghi chú |
|---|---|---|---|
| errorCode | Integer | Mã lỗi trả về từ server. errorCode = 0 nghĩa là yêu cầu thành công. Ngược lại, yêu cầu có lỗi. | Chi tiết có thể tìm thấy trong tài liệu mã lỗi |
| errorMessage | String | Thông báo lỗi của yêu cầu (nếu có). Ngôn ngữ của thông báo được đặt bởi tham số lang trong headers | |
| data | Object | Chứa kết quả OCR |
2.5.3. Mẫu response lỗi
- Phiên làm việc hết hạn: Trả về khi phiên không hợp lệ, ví dụ như: phiên chưa được đăng ký, phiên hết thời gian chờ, không khớp loại thiết bị, ...
{
"errorCode": "403",
"errorMessage": "Phiên làm việc đã hết hạn"
}
- Lỗi OCR
{
"errorCode": "3",
"errorMessage": "Không tìm thấy tài liệu đã chọn trong ảnh"
}
3. API kiểm tra liveness và so khớp khuôn mặt
3.1. Request Url
POST base_url/face/liveness
3.2. Request Headers
| Tham số | Yêu cầu | Loại dữ liệu | Mô tả | Chú ý |
|---|---|---|---|---|
| session-id | Có | String | ID duy nhất của phiên eKYC nhận được từ bước khởi tạo phiên | |
| api-key | Có | String | API key để sử dụng hệ thống FPT AI eKYC | |
| auto | Không | string | Đặt giá trị là True khi gửi từ FPT SDK. Nếu không phải đặt False | |
| device-type | Có | String | Thiết bị đang sử dụng, các giá trị cho phép bao gồm:
| |
| lang | Không | String | Ngôn ngữ sử dụng, các giá trị cho phép bao gồm:
| mặc định: en |
| sdk-version | Không | String | Phiên bản của FPT AI eKYC SDK. Nên sử dụng tham số này để đảm bảo hiệu quả khi sử dụng SDK |
3.3. Request Body
FormData chứa ảnh hoặc video selfie sử dụng để kiểm tra.
| Tham số | Yêu cầu | Loại dữ liệu | Mô tả |
|---|---|---|---|
| selfies | Không. Sử dụng selfies hoặc video | Array | Ảnh selfie được chụp để kiểm tra liveness và thực hiện so khớp khuôn mặt |
| video | Không. Sử dụng selfies hoặc video | File | Video selfie được quay để kiểm tra liveness và thực hiện so khớp khuôn mặt |
3.4. Mẫu request
curl --location --request POST 'base_url/face/liveness' \
--header 'api-key: your-api-key' \
--header 'session-id: 7760a743-884b-4195-b781-892e72c7b0b6'
--header 'device-type: android' \
--header 'lang: vi' \
--form 'selfies=@"path-to-selfie-image"' \
3.5. Response
3.5.1. Mẫu response
- Thành công
{
"code": "200",
"message": "Kiểm tra thực thể sống thành công",
"liveness": {
"code": "200",
"message": "liveness check successful",
"is_live": "true",
"spoof_prob": "N/A",
"need_to_review": "N/A",
"is_deepfake": "N/A",
"deepfake_prob": "N/A",
"warning": "N/A",
},
"face_match": {
"code": "200",
"message": "face matching successful",
"isMatch": "true",
"similarity": "95.84",
"warning": "N/A"
},
"is_complete_session": false
}
3.5.2. Mô tả response
| Tham số | Loại dữ liệu | Mô tả | Ghi chú |
|---|---|---|---|
| code | String | Mã trạng thái trả về của yêu cầu. Mã 200 nghĩa là yêu cầu thành công. | Chi tiết có thể được tìm thấy trong tài liệu mã lỗi |
| message | String | Thông báo lỗi của yêu cầu (nếu có). Ngôn ngữ của thông báo được đặt bởi tham số lang trong headers | |
| liveness | Object | Kết quả kiểm tra liveness trả về | |
| face_match | Object | Kết quả so khớp khuôn mặt trả về | |
| is_complete_session | boolean | Xác định xem phiên đã hoàn thành hay chưa. Nếu False, người dùng có thể thử lại với xác minh khuôn mặt, nếu không, người dùng phải thử với một phiên khác |
3.5.3. Mẫu response lỗi
- Khuôn mặt không khớp với giấy tờ: Trả về khi khuôn mặt trong ảnh selfie không khớp với khuôn mặt trong ảnh giấy tờ.
{
"code": "303",
"message": "Khuôn mặt không khớp với giấy tờ",
"liveness": {
"code": "200",
"message": "liveness check successful",
"is_live": "true",
"spoof_prob": "N/A",
"need_to_review": "N/A",
"is_deepfake": "N/A",
"deepfake_prob": "N/A",
"warning": "N/A",
},
"face_match": {
"code": "303",
"message": "face is not matching with document",
"isMatch": "false",
"similarity": "5.84",
"warning": "N/A"
},
"is_complete_session": false
}
- Có 2 khuôn mặt: Trả về khi hệ thống phát hiện nhiều hơn một khuôn mặt trong ảnh selfie.
{
"code": "407",
"message": "2 faces exist",
"liveness": {
"code": "200",
"message": "liveness check successful",
"is_live": "true",
"spoof_prob": "N/A",
"need_to_review": "N/A",
"is_deepfake": "N/A",
"deepfake_prob": "N/A",
"warning": "N/A",
},
"face_match": {
"code": "407",
"message": "2 faces exist",
"isMatch": "N/A",
"similarity": "N/A",
"warning": "N/A"
},
"is_complete_session": false
}