Skip to content

Know Your Customer (KYC) Verification

Overview

KYC (Know Your Customer) verification is a regulatory requirement that ensures users are who they claim to be. The Agio platform integrates with Sumsub to provide identity verification services including document verification, facial recognition, and liveness detection.

Verification Flow

  1. User Initiates - User starts the verification process through the SDK or Direct Widget
  2. Document Upload - User uploads identity documents (passport, ID card, driver's license)
  3. Facial Verification - User completes a selfie or liveness check
  4. Review Process - Documents are automatically analyzed and reviewed
  5. Result - Verification is approved, rejected, or requires retry

Verification Statuses

The reviewStatus field indicates the current state of a user's verification:

StatusDescription
initInitial registration started. User is still filling out their profile and uploading documents.
pendingApplicant profile is complete and ready to be processed.
queuedVerification is in the queue and will be processed soon.
precheckedVerification is partially complete (intermediate state).
completedVerification process is finished. Check reviewResult for the outcome.
onHoldAwaiting manual review by a compliance officer, or waiting for all beneficiaries to complete KYC (for KYB).
awaitingServiceWaiting for an external service response.
awaitingUserWaiting for additional information from the user.

Review Results

When reviewStatus is completed, the reviewResult object contains the verification outcome:

reviewAnswer

ValueDescription
GREENVerification approved. User has passed all checks.
REDVerification rejected. See rejectLabels for reasons.

reviewRejectType

When reviewAnswer is RED, this field indicates if the user can retry:

ValueDescription
FINALPermanent rejection. User cannot resubmit.
RETRYTemporary rejection. User can correct issues and resubmit.

Common Rejection Labels

The rejectLabels array contains reasons for rejection:

LabelDescription
FORGERYDocument appears to be forged or tampered with
DOCUMENT_TEMPLATEDocument is a template or sample
LOW_QUALITYImage quality is too low to verify
SPAMSubmission appears to be spam or fraudulent
NOT_DOCUMENTUploaded file is not a valid identity document
SELFIE_MISMATCHFace in selfie does not match document photo
ID_INVALIDDocument is expired, damaged, or invalid
FOREIGNERDocument is from an unsupported country
DUPLICATEUser has already been verified under different details
BAD_SELFIESelfie quality issues (blur, lighting, obstruction)
BAD_VIDEO_SELFIELiveness check video has issues
BAD_FACE_MATCHINGFace matching confidence is too low
BAD_PROOF_OF_RESIDENCEProof of address document is invalid
SCREENSHOTSScreenshots are not accepted
BLACK_AND_WHITEDocument must be in color
INCOMPATIBLE_TASK_REQDocument doesn't meet requirements
GRAPHIC_EDITORDocument appears to be digitally edited
UNSATISFACTORY_PHOTOSPhotos do not meet quality requirements
AGE_REQUIREMENT_MISMATCHUser does not meet age requirements

Know Your Business (KYB)

For business verification, set kyb: true in the SDK configuration or use the kyb query parameter in the Direct Widget. KYB verification includes:

  • Company registration documents
  • Beneficial ownership information
  • Director/officer identification
  • Proof of business address

KYB verification may require multiple individuals (beneficial owners, directors) to complete individual KYC before the business verification is approved.

Webhook Integration

To receive real-time updates when verification status changes, configure webhooks. See the Webhooks documentation for:

  • Webhook payload structure
  • Event types and triggers
  • Implementation examples

SDK Fields Reference

The following fields are available in the SDK's user data callbacks:

FieldTypeDescription
idstringUnique identifier for the verification record
externalUserIdstringYour internal user identifier
reviewStatusstringCurrent verification status
reviewResultobjectVerification outcome (when completed)
createdAttimestampWhen verification was initiated
updatedAttimestampLast status update time

Best Practices

  1. Handle all statuses - Implement UI states for each reviewStatus value
  2. Support retries - When reviewRejectType is RETRY, allow users to resubmit
  3. Use webhooks - Don't poll for status; use webhooks for real-time updates
  4. Secure tokens - Always generate init tokens server-side
  5. Test in sandbox - Use development environment before going to production
Know Your Customer (KYC) Verification has loaded