Skip to main content

GetCustomerKycInformationQuery

Overview​

Retrieves KYC (Know Your Customer) verification status for a customer. This is a lightweight, fast command that returns only verification statuses for address, identity, mobile, and email without fetching the complete user profile.

Performance: ~85ms (65% faster than GetCustomerBasicDetailsQuery)

Command Structure​

{
"cmd": "GetCustomerKycInformationQuery",
"data": "{\"userId\":\"129\"}"
}

Parameters​

ParameterTypeRequiredDescription
userIdlongYesThe ID of the customer

Authorization​

Same as GetCustomerBasicDetailsQuery:

  • BACKOFFICE_ADMINISTRATORS: Can query any user
  • Organization users: Can only query their organization's main user

Response Structure​

Success Response​

{
"ok": true,
"statusCode": "00",
"message": "KYC information retrieved successfully",
"outData": {
"KycInformations": {
"mobileKyc": {
"VerificationStatus": "VERIFICATION_SUCCESSFUL",
"Comment": "The mobile number has been verified and approved"
},
"emailKyc": {
"VerificationStatus": "VERIFICATION_SUCCESSFUL",
"Comment": "The email has been verified and approved"
},
"AddressKyc": {
"VerificationStatus": "PENDING",
"Comment": null
},
"IdentityKyc": {
"VerificationStatus": "VERIFICATION_SUCCESSFUL",
"Comment": "ID verified"
}
},
"PerformanceTimings": {
"TotalExecutionTimeMs": 85,
"ParseParametersMs": 1,
"UserAuthorizationCheckMs": 15,
"KycFetchMs": 69
}
}
}

KYC Verification Types​

1. mobileKyc​

  • Status: Always VERIFICATION_SUCCESSFUL for registered users
  • Purpose: Confirms mobile number is verified during registration

2. emailKyc​

  • Status: Always VERIFICATION_SUCCESSFUL for registered users
  • Purpose: Confirms email is verified during registration

3. AddressKyc​

  • Status: From SelfServiceAddressInformation table
  • Possible Values:
    • PENDING: Awaiting verification
    • VERIFICATION_SUCCESSFUL: Address verified
    • VERIFICATION_FAILED: Address rejected
  • Purpose: Physical address verification for compliance

4. IdentityKyc​

  • Status: From SelfServiceIdentityInformation table
  • Possible Values:
    • PENDING: Awaiting verification
    • VERIFICATION_SUCCESSFUL: Identity document approved
    • VERIFICATION_FAILED: Identity document rejected
  • Purpose: Government-issued ID verification

Usage Examples​

JavaScript - Check if KYC is Complete​

const response = await api.query({
cmd: "GetCustomerKycInformationQuery",
data: JSON.stringify({ userId: 129 })
});

if (response.ok) {
const kyc = response.outData.KycInformations;

// Check if all KYC is complete
const isKycComplete =
kyc.mobileKyc.VerificationStatus === "VERIFICATION_SUCCESSFUL" &&
kyc.emailKyc.VerificationStatus === "VERIFICATION_SUCCESSFUL" &&
kyc.AddressKyc.VerificationStatus === "VERIFICATION_SUCCESSFUL" &&
kyc.IdentityKyc.VerificationStatus === "VERIFICATION_SUCCESSFUL";

if (isKycComplete) {
console.log("✅ KYC is complete - customer can apply for loans");
} else {
console.log("⚠️ KYC is incomplete:");
if (kyc.AddressKyc.VerificationStatus !== "VERIFICATION_SUCCESSFUL") {
console.log(" - Address verification pending");
}
if (kyc.IdentityKyc.VerificationStatus !== "VERIFICATION_SUCCESSFUL") {
console.log(" - Identity verification pending");
}
}

// Performance monitoring
const timing = response.outData.PerformanceTimings;
console.log(`Query completed in ${timing.TotalExecutionTimeMs}ms`);
}

React Component Example​

import { useState, useEffect } from 'react';

function KycStatus({ userId }) {
const [kyc, setKyc] = useState(null);
const [loading, setLoading] = useState(true);

useEffect(() => {
async function fetchKyc() {
const response = await api.query({
cmd: "GetCustomerKycInformationQuery",
data: JSON.stringify({ userId })
});

if (response.ok) {
setKyc(response.outData.KycInformations);
}
setLoading(false);
}

fetchKyc();
}, [userId]);

if (loading) return <div>Loading KYC status...</div>;

return (
<div className="kyc-status">
<h3>KYC Verification Status</h3>
<ul>
<li>
Mobile: <Status value={kyc.mobileKyc.VerificationStatus} />
</li>
<li>
Email: <Status value={kyc.emailKyc.VerificationStatus} />
</li>
<li>
Address: <Status value={kyc.AddressKyc.VerificationStatus} />
</li>
<li>
Identity: <Status value={kyc.IdentityKyc.VerificationStatus} />
</li>
</ul>
</div>
);
}

function Status({ value }) {
const icon = value === "VERIFICATION_SUCCESSFUL" ? "✅" :
value === "VERIFICATION_FAILED" ? "❌" : "⏳";
return <span>{icon} {value}</span>;
}

When to Use This Command​

✅ Use GetCustomerKycInformationQuery when:​

  • Checking loan eligibility (KYC must be complete)
  • Displaying KYC status on dashboard
  • Validating customer before loan application
  • Building customer verification reports
  • Need fast response time

❌ Don't use when:​

  • You need full customer details
  • You need branch/role associations
  • You need corporate profile information
  • Use GetCustomerBasicDetailsQuery instead for complete profile

Performance Comparison​

CommandTimeData ReturnedUse Case
GetCustomerKycInformationQuery~85msKYC status onlyQuick KYC check
GetCustomerBasicDetailsQuery~245msComplete profileFull customer data

Savings: 65% faster when you only need KYC status

Error Responses​

User Not Found or Unauthorized​

{
"ok": false,
"statusCode": "04",
"message": "User not found or unauthorized."
}

System Error​

{
"ok": false,
"statusCode": "99",
"message": "Error retrieving KYC information: Database connection timeout"
}

Best Practices​

✅ DO use this command for quick KYC checks
✅ DO cache KYC status (updates infrequently)
✅ DO check KYC before allowing loan applications
✅ DO use parallel requests when fetching multiple customers

❌ DON'T call repeatedly in loops
❌ DON'T use when you need full customer data
❌ DON'T ignore authorization errors

Integration Example​

Loan Application Pre-Check​

async function canApplyForLoan(userId) {
// Fast KYC check before showing loan application form
const kycResponse = await api.query({
cmd: "GetCustomerKycInformationQuery",
data: JSON.stringify({ userId })
});

if (!kycResponse.ok) {
return { canApply: false, reason: "Unable to verify KYC status" };
}

const kyc = kycResponse.outData.KycInformations;

// Check required KYC elements
if (kyc.IdentityKyc.VerificationStatus !== "VERIFICATION_SUCCESSFUL") {
return {
canApply: false,
reason: "Identity verification required",
action: "Please upload a valid government-issued ID"
};
}

if (kyc.AddressKyc.VerificationStatus !== "VERIFICATION_SUCCESSFUL") {
return {
canApply: false,
reason: "Address verification required",
action: "Please provide proof of address"
};
}

return { canApply: true };
}

// Usage
const eligibility = await canApplyForLoan(129);
if (eligibility.canApply) {
showLoanApplicationForm();
} else {
showKycRequirement(eligibility.reason, eligibility.action);
}

Change Log​

VersionDateChanges
1.02026-01-11Initial implementation with performance timing