Skip to content

KYC Users API

API endpoints for managing KYC users, including listing, searching, and user history retrieval.

Base URL: /admin/users

Endpoints Summary

MethodEndpointDescription
GET/admin/usersList users with filtering
GET/admin/users/:idGet user details
GET/admin/users/searchSearch users
PUT/admin/users/:idUpdate user
DELETE/admin/users/:idArchive user
POST/admin/users/:id/unarchiveRestore archived user
GET/admin/users/statsGet aggregate statistics
GET/admin/users/:id/verificationsGet user verifications
GET/admin/users/:id/transactionsGet user transactions
GET/admin/users/:id/documentsGet user KYC documents
GET/admin/users/:id/historyGet complete user history
POST/admin/users/search-by-phoneFind user by phone
POST/admin/users/:id/add-balanceAdd balance (admin)
DELETE/admin/users/:id/purgePermanently delete user

List Users

GET /admin/users

Query Parameters:

ParameterTypeDefaultDescription
pagenumber1Page number
limitnumber20Items per page
verificationStatusstring-Filter by verification status
riskRatingstring-Filter by risk rating
searchstring-Search term
hasCardboolean-Filter users with/without NFC card
isArchivedboolean-Include archived users

Returns: Paginated list of user objects with id, phoneNumber, email, firstName, lastName, verificationStatus, riskRating, currentRiskScore, balance, isVerified, createdAt


Get User by ID

GET /admin/users/:id

Path Parameters:

ParameterTypeDescription
idstringUser UUID

Returns: Full user object including:

FieldTypeDescription
idstringUser UUID
phoneNumberstringPhone with country code
emailstringEmail address
firstName, lastNamestringName fields
names, surnamestringLegacy name fields
idNumberstringGovernment ID number
dateOfBirthstringYYYY-MM-DD format
sexstringMALE or FEMALE
verificationStatusstringPENDING, VERIFIED, REJECTED
riskRatingstringLOW, MEDIUM, HIGH
currentRiskScorenumber0-100 risk score
balancenumberWallet balance in Emalageni
nfcCardNumberstringLinked NFC card
rewardsPointsnumberCurrent rewards balance
referralCodestringUser's referral code
isVerifiedbooleanVerification complete
isArchivedbooleanSoft-deleted status

Search Users

GET /admin/users/search?q={searchTerm}

Query Parameters:

ParameterTypeDescription
qstringSearch term (min 3 characters)
pagenumberPage number
limitnumberItems per page

Searches: Name, phone, email, ID number

Returns: Paginated list of matching users with basic info


Update User

PUT /admin/users/:id

Updatable Fields:

FieldTypeDescription
firstNamestringFirst name
lastNamestringLast name
emailstringEmail address

Returns: Updated user object


Archive / Unarchive User

  • Archive: DELETE /admin/users/:id - Soft deletes the user
  • Unarchive: POST /admin/users/:id/unarchive - Restores archived user

Get User Statistics

GET /admin/users/stats

Returns:

FieldDescription
totalUsersTotal registered users
verifiedUsersUsers with completed KYC
pendingVerificationAwaiting verification
rejectedVerificationFailed verification
newUsersTodayToday's registrations
newUsersThisWeekThis week's registrations
newUsersThisMonthThis month's registrations

Get User Verifications

GET /admin/users/:id/verifications

Returns: List of verification records with id, status, type, createdAt, completedAt


Get User Transactions

GET /admin/users/:id/transactions

Returns: List of transactions with id, type, amount, status, createdAt


Get User Documents

GET /admin/users/:id/documents

Returns: List of KYC documents with:

Document TypeDescription
ID_FRONTFront of ID document
ID_BACKBack of ID document
SELFIEUser selfie for face verification

Each includes type, url, uploadedAt


Get User Full History

GET /admin/users/:id/history

Returns: Complete user history including:

  • User profile data
  • All verifications
  • All transactions
  • All documents
  • Timeline of events
  • Aggregate statistics (totalTransactions, totalVolume, avgTransaction, daysActive)

Search User by Phone

POST /admin/users/search-by-phone

Request Body:

FieldTypeRequiredDescription
phoneNumberstringYesPhone with country code (e.g., +26878123456)

Returns: User with id, phoneNumber, firstName, lastName, fullName, verificationStatus, isVerified, nfcCardNumber

Use Case: Card linking in vendor app


Add Balance

POST /admin/users/:id/add-balance

Request Body:

FieldTypeRequiredDescription
amountnumberYesAmount in Emalageni
reasonstringYesReason for credit

Returns: previousBalance, addedAmount, newBalance

Note: Admin-only action for promotional credits or corrections


Purge User

DELETE /admin/users/:id/purge

Warning: Permanently deletes user and all associated data. Cannot be undone.


Error Responses

StatusErrorDescription
404User not foundInvalid user ID
400Search term is requiredMissing search query
400Validation errorInvalid request body

Internal use only - Keshless Payment Platform