KYC

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 Qoin Service

Flow KYC API Product


SubjectSubjectTypeSubjectIdentifier
identityproductkyc



📘

Request Body

JSON AttributeTypeRequiredDescription
SubjectStringRequiredDomain Service Name
SubjectTypeStringRequiredType of Service Name
SubjectIdentifierStringRequiredObject Service (e-ktp, sim, passport, etc.)
ActionStringRequiredCommand Process (create, read, delete, etc.)
ResourceTypeStringRequiredData Type this message
ResourceStringRequiredData Name
ResourceIdStringRequiredId data
DataStringRequiredPayload data product


📘

Payload Data

NameData TypeM/ODescription
PhoneStringMThe user's registered mobile phone number used for communication, verification, and account identification purposes.
EmailStringMThe user's active email address, serving as a primary channel for notifications, verification links, and account recovery.
FullnameStringMThe user's complete legal name as stated on their official identification documents.
Dob (Date of Birth)StringMThe user's date of birth used for identity validation and age verification processes.
IdentityNumberStringMThe user's official identification number (e.g., national ID number) obtained from their government-issued document.
UserIpStringMThe IP address from which the user initiates the request, used for security checks, fraud analysis, and geo-location validation.
SelfieImageStringMA live selfie image of the user captured during verification, used for biometric analysis and face matching.
DocsImageStringMThe 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)
StringMA 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}}}