KYC (Know Your Customer) is essential for verifying the identity of customers, ensuring they are who they claim to be. It’s a critical process for preventing fraud, maintaining regulatory compliance, and building trust in your business. This involves collecting and verifying a customer's personal information, often through documents like a ID card, passport or driver's license, and assessing the risk they may pose.

Flow KYC API Product
| Subject | SubjectType | SubjectIdentifier |
|---|---|---|
| identity | product | kyc |
| JSON Attribute | Type | Required | Description |
|---|---|---|---|
| Subject | String | Required | Domain Service Name |
| SubjectType | String | Required | Type of Service Name |
| SubjectIdentifier | String | Required | Object Service (e-ktp, sim, passport, etc.) |
| Action | String | Required | Command Process (create, read, delete, etc.) |
| ResourceType | String | Required | Data Type this message |
| Resource | String | Required | Data Name |
| ResourceId | String | Required | Id data |
| Data | String | Required | Payload data product |
| Name | Data Type | M/O | Description |
|---|---|---|---|
| Phone | String | M | The user's registered mobile phone number used for communication, verification, and account identification purposes. |
| String | M | The user's active email address, serving as a primary channel for notifications, verification links, and account recovery. | |
| Fullname | String | M | The user's complete legal name as stated on their official identification documents. |
| Dob (Date of Birth) | String | M | The user's date of birth used for identity validation and age verification processes. |
| IdentityNumber | String | M | The user's official identification number (e.g., national ID number) obtained from their government-issued document. |
| UserIp | String | M | The IP address from which the user initiates the request, used for security checks, fraud analysis, and geo-location validation. |
| SelfieImage | String | M | A live selfie image of the user captured during verification, used for biometric analysis and face matching. |
| DocsImage | String | M | The image of the user’s identification document (e.g., ID card or passport) used for OCR extraction and authenticity verification. |
| RequestId (Use for retry partial action) | String | M | A unique identifier represented as a UUID, used to track, correlate, and reference a specific request throughout the verification or processing workflow. |
Action KYC
- KYC Verification
- KYC Re-verification
Action Partial Process :
- KYC Identity Documents
- KYC Photo Liveness
- KYC Face Matching
KYC Verification
KYC Verification refers to the complete end-to-end identity verification process that evaluates the authenticity of a user’s information. The full flow typically includes identity document capture, data extraction, selfie submission, liveness detection, biometric comparison, document validation, and risk scoring.
Example Request & Response
==form data==
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action:verification,
ResourceType:data,
Resource:data,
ResourceId:data,
Data:{"Phone": "628999333222", Email": "[email protected]", "Fullname": "UserGDAA", "Dob": "1980-01-01", "IdentityNumber": "3511000101806300", "UserIp": "172.22.22.22", "SelfieImage": "", "DocsImage": ""}{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "verification",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "verification",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-20 10:10:47",
"created_by": "Erwin Platform test",
"docs_image_url": "https://s3.loyalto.id/saas-product-dev/document/vv5z2sSn1763608247-a7a3acc49f291fa22e2123d212cbf045.jpg",
"photo_image_url": "https://s3.loyalto.id/saas-product-dev/photo/dAvcYAhd1763608249-f5674a579e551432c6a0bc4b2ea4089e.jpg",
"request_id": "060e04bf-d0f1-480d-bcff-897b0f287363",
"risk_score": 0,
"updated_at": "2025-11-20 10:10:54",
"updated_by": "Erwin Platform test",
"verification_data": [
{
"status": "approved",
"type": "document"
},
{
"status": "approved",
"type": "liveness"
},
{
"status": "approved",
"type": "face_matching"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}KYC Identity Docs
KYC Identity Document refers to the collection, extraction, and validation of official identity documents such as national ID cards, passports, or driver’s licenses.
Example Request & Response
==form data==
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action:identity-docs,
ResourceType:data,
Resource:data,
ResourceId:data,
Data:{"Phone": "628999333222", "Email": "[email protected]", "Fullname": "UserGDAA", "Dob": "1980-01-01", "IdentityNumber": "3511000101806300", "UserIp": "172.22.22.22", "DocsImage": {base64 image}}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "identity-docs",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "identity-docs",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-20 10:10:47",
"created_by": "Erwin Platform test",
"docs_image_url": "https://s3.loyalto.id/saas-product-dev/document/vv5z2sSn1763608247-a7a3acc49f291fa22e2123d212cbf045.jpg",
"photo_image_url": "",
"request_id": "060e04bf-d0f1-480d-bcff-897b0f287363",
"risk_score": 0,
"updated_at": "2025-11-20 10:10:54",
"updated_by": "Erwin Platform test",
"verification_data": [
{
"status": "approved",
"type": "document"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}
KYC Photo Liveness
KYC Photo Liveness is the process of determining whether the user providing a selfie is a real, live individual rather than a photograph, screen, video, or digital spoof.
Liveness detection may use:
- active liveness (requiring user actions such as blinking or moving), or
- passive liveness (detecting life signs from a single captured image).
It ensures biometric integrity and prevents identity fraud during selfie capture.
Example Request & Response
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action:photo-liveness,
ResourceType:data,
Resource:data,
ResourceId:data,
Data:{"Phone": "628999333222", "Email": "[email protected]", "Fullname": "UserGDAA", "Dob": "1980-01-01", "IdentityNumber": "3511000101806300", "UserIp": "172.22.22.22", "SelfieImage": {base64 image}
}
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "photo-liveness",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "photo-liveness",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-20 10:10:47",
"created_by": "Erwin Platform test",
"docs_image_url": "",
"photo_image_url": " https://s3.loyalto.id/saas-product-dev/photo/dAvcYAhd1763608249-f5674a579e551432c6a0bc4b2ea4089e.jpg ",
"request_id": "060e04bf-d0f1-480d-bcff-897b0f287363",
"risk_score": 0,
"updated_at": "2025-11-20 10:10:54",
"updated_by": "Erwin Platform test",
"verification_data": [
{
"status": "approved",
"type": "liveness"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}
KYC Face Matching
KYC Face Matching is the biometric comparison process that evaluates the similarity between the user’s selfie and the face image extracted from their identity document or previously stored biometric data.
The system generates a similarity score and determines whether the faces match or do not match.
This step confirms that the person undergoing verification is the rightful owner of the submitted identity document and helps prevent impersonation.
Example Request & Response
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action:face-matching,
ResourceType:data,
Resource:data,
ResourceId:data,
Data: {"Phone": "628999333222", "Email": "[email protected]", "Fullname": "UserGDAA", "Dob": "1980-01-01", "IdentityNumber": "3511000101806300", "UserIp": "172.22.22.22", "SelfieImage": {base64 image}, "DocsImage":{base64 image}}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "face-matching",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "face-matching",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-20 10:10:47",
"created_by": "Erwin Platform test",
"docs_image_url": "",
"photo_image_url": " https://s3.loyalto.id/saas-product-dev/photo/dAvcYAhd1763608249-f5674a579e551432c6a0bc4b2ea4089e.jpg ",
"request_id": "060e04bf-d0f1-480d-bcff-897b0f287363",
"risk_score": 0,
"updated_at": "2025-11-20 10:10:54",
"updated_by": "Erwin Platform test",
"verification_data": [
{
"status": "approved",
"type": "face_matching"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}
KYC Re-Verification
KYC Re-Verification is the process of revalidating a user’s identity after their initial verification has been completed. This is performed when:
- the identity document has expired,
- the user updates their personal information,
- suspicious account activity is detected, or
- periodic re-authentication is required for compliance or security reasons.
Re-verification typically re-runs only the critical verification steps (e.g., new selfie, liveness check, or updated document upload) without executing the full KYC flow from scratch.
Example Request & Response
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action: reverification,
ResourceType:data,
Resource:data,
ResourceId:data,
Data: {"Phone": "6289636021232", "Email": "[email protected]","Fullname": "UserGDAA","Dob": "1980-01-01", "IdentityNumber": "3511000101806300", "UserIp": "172.22.22.22", "SelfieImage": {{selfieSs}}, "DocsImage": {{idCard}}}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "reverification",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}
{
"TicketId": "3139362d31-ca26763d-0ac9-4e4a-ad6c-740ec87b33f0",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "reverification",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-20 10:10:47",
"created_by": "Erwin Platform test",
"docs_image_url": "https://s3.loyalto.id/saas-product-dev/document/vv5z2sSn1763608247-a7a3acc49f291fa22e2123d212cbf045.jpg",
"photo_image_url": "https://s3.loyalto.id/saas-product-dev/photo/dAvcYAhd1763608249-f5674a579e551432c6a0bc4b2ea4089e.jpg",
"request_id": "060e04bf-d0f1-480d-bcff-897b0f287363",
"risk_score": 0,
"updated_at": "2025-11-20 10:10:54",
"updated_by": "Erwin Platform test",
"verification_data": [
{
"status": "approved",
"type": "document"
},
{
"status": "approved",
"type": "liveness"
},
{
"status": "approved",
"type": "face_matching"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}
Process Retry Action Partial
KYC Identity Docs
Example Request & Response
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action:identity-docs,
ResourceType:data,
Resource:data,
ResourceId:data,
Data: {"Phone": "6289993332221", "UserIp": "172.22.22.22", "DocsImage": {{base64Image}}}
{
"TicketId": "3334382d31-ccb029fe-3dd2-49b3-9e1f-c8fb20f32e0e",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "identity-docs",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}{
"TicketId": "3334382d31-ccb029fe-3dd2-49b3-9e1f-c8fb20f32e0e",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}{
"TicketId": "3334382d31-ccb029fe-3dd2-49b3-9e1f-c8fb20f32e0e",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "identity-docs",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-28 14:37:40",
"created_by": "System",
"docs_image_url": "https://s3.loyalto.id/saas-product-dev/document/0cBWRL0Y1764315460-0ed2cbd22b441a411531e936ffe37c31.jpg",
"photo_image_url": "",
"request_id": "89c251ad-1ee0-43cb-9d44-a7d28b773879",
"risk_score": 1,
"updated_at": "2025-11-28 14:37:41",
"updated_by": "System",
"verification_data": [
{
"score": 1,
"status": "approved",
"type": "document"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}KYC Photo Liveness
Example Request & Response
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action:photo-liveness,
ResourceType:data,
Resource:data,
ResourceId:data,
Data: {"Phone": "6289993332221", "SelfieImage": {{base64Image}}}
{
"TicketId": "3334382d31-15253e0b-0fff-4c5e-883f-092cfb6bf8db",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "photo-liveness",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}{
"TicketId": "3334382d31-15253e0b-0fff-4c5e-883f-092cfb6bf8db",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}{
"TicketId": "3334382d31-15253e0b-0fff-4c5e-883f-092cfb6bf8db",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "photo-liveness",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-28 14:49:06",
"created_by": "System",
"docs_image_url": "",
"photo_image_url": "https://s3.loyalto.id/saas-product-dev/photo/46j2wl0i1764316146-93c67e928d9773db79b1f6f599f08640.jpg",
"request_id": "03f8aaec-a7b7-46cc-81b9-5a7d5a495f58",
"risk_score": 0.2194925,
"updated_at": "2025-11-28 14:49:08",
"updated_by": "System",
"verification_data": [
{
"score": 0.2194925,
"status": "approved",
"type": "liveness"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}
KYC Face Matching
Example Request & Response
Subject:identity,
SubjectType:product,
SubjectIdentifier:kyc,
Action:face-matching,
ResourceType:data,
Resource:data,
ResourceId:data,
Data:{"Phone":"6289993332221", "Email": "[email protected]", "Fullname": "UserGDAA", "Dob": "1980-01-01", "IdentityNumber": "3511000101806300", "SelfieImage":{{base64Image}}, "DocsImage":{{base64Image}}}
{
"TicketId": "3334382d31-0596eb08-b932-46db-b1c2-7e5d48c85b3d",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "face-matching",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": null,
"Status": "success",
"Message": "Success request on process",
"StatusCode": 200
}{
"TicketId": "3334382d31-0596eb08-b932-46db-b1c2-7e5d48c85b3d",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc"
}{
"TicketId": "3334382d31-0596eb08-b932-46db-b1c2-7e5d48c85b3d",
"Subject": "identity",
"SubjectType": "product",
"SubjectIdentifier": "kyc",
"Action": "face-matching",
"ResourceType": "data",
"Resource": "data",
"ResourceId": "data",
"Result": {
"created_at": "2025-11-28 14:55:50",
"created_by": "System",
"docs_image_url": "https://s3.loyalto.id/saas-product-dev/document/4FzgofpW1764316550-a2402032ec2e21dc70e293f91340692f.jpg",
"photo_image_url": "https://s3.loyalto.id/saas-product-dev/photo/yzE2NruU1764316550-9bbfe8628002d0e5c28f06d75159927b.jpg",
"request_id": "b9c82321-55f5-43c8-b2eb-c27c69546b4e",
"risk_score": 0.96,
"updated_at": "2025-11-28 14:55:54",
"updated_by": "System",
"verification_data": [
{
"score": 0.96,
"status": "approved",
"type": "face_matching"
}
],
"verification_status": "approved"
},
"Status": "success",
"Message": "Success process data(success identity verification)",
"StatusCode": 200
}Notes : If the retry process for the partial action has been performed more than once, it will use the "Request Id" in the data payload.
Subject:identity,
SubjectType: product,
SubjectIdentifier: kyc,
Action:face-matching,
ResourceType:data,
Resource:data,
ResourceId:data,
Data: {"RequestId": {{uuid}}, "Phone": "628999333222", "Email": "[email protected]", "Fullname": "UserGDAA","Dob": "1980-01-01", "IdentityNumber": "3511000101806300", "UserIp": "172.22.22.22", "SelfieImage": {base64 image}, "DocsImage": {base64 image}}}