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

Name

Data Type

M/O

Description

Phone

String

M

The user's registered mobile phone number used for communication, verification, and account identification purposes.

Email

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


📘

Example Request & Response

{
  "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


📘

Example Request & Response

{
  "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


📘

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


📘

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


📘

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}
  }
}