Identity Verification (KYC & KYB)

Who needs verifying, at what level, and how

Individuals go through KYC; businesses through KYB. Verification is required before a user can fund an order, and a higher level is requested as their volume grows.

Levels

Thresholds depend on country and risk; your account manager has the exact figures. Roughly:

LevelIndividual (KYC)Business (KYB)
Basic · Level 0Name, date of birth, country, email, phone, address — given at user creationBusiness name, country, incorporation date, registration number, contact details, address — given at creation
Standard · Level 1ID document, selfie, address, phoneUBO KYC, directors, certificate of incorporation, shareholder register, UBO proof of address
Enhanced · Level 2Proof of source of funds, proof of addressArticles of association, director list, corporate shareholder register, source of funds

When an order crosses a threshold it is rejected with STANDARD_KYC_REQUIRED, ENHANCED_KYC_REQUIRED, STANDARD_KYB_REQUIRED or ENHANCED_KYB_REQUIRED. Start the next level and retry.

Four ways to verify

MethodWhenEndpoint
TransFi hostedDefault. You get a URL; the user completes verification there (ID, selfie, liveness, review)Standard KYC · Advanced KYC · Standard KYB · Advanced KYB
Import from SumsubYou already verified the user with Sumsub — share a token, no second verificationImport Shared KYC
Submit from another providerYou verified them elsewhere — send the data and documents directlySubmit KYC Documents
Add documents laterHigher volumes need more from the sender — supply them without restartingShare Additional Docs

Start hosted verification

curl -X POST 'https://sandbox-api.transfi.com/v3/kyc/standard' \
  -H 'Authorization: Basic YOUR_BASE64_CREDENTIALS' \
  -H 'mid: YOUR_MID' \
  -H 'Content-Type: application/json' \
  -d '{ "userId": "UX-250930062608488" }'

Send the user to the URL in the response. The result arrives by webhook — don't block on it.

Import from Sumsub

Generate a share token on your Sumsub account for forClientId (TransFi gives you this value during integration), then pass it:

curl -X POST 'https://sandbox-api.transfi.com/v3/kyc/share/same-vendor' \
  -H 'Authorization: Basic YOUR_BASE64_CREDENTIALS' \
  -H 'mid: YOUR_MID' \
  -H 'Content-Type: application/json' \
  -d '{ "token": "_act-...", "email": "[email protected]", "name": "Asha Kamau" }'

Statuses

StatusMeaningCan retry?
user_createdAccount created—
user_approvedPassed basic screening—
user_manual_reviewCompliance reviewing the account—
user_rejectedAccount rejected—
kyc_initiatedVerification started—
kyc_pendingSubmitted, being checked—
kyc_successVerified—
kyc_failedDocuments couldn't be verifiedYes
kyc_manual_reviewCompliance reviewingYes
kyc_edd_pendingEnhanced verification in progressYes
kyc_expiredID document expired — found in ongoing monitoringYes
kyc_rejected · kyc_blockedNo further transactionsNo

→ KYC Status · KYB Status · per role: KYC Account Status · KYB Account Status

⚠️

Check by role. A person can be cleared to receive but not to send. Check the role you're about to use.

📘

Why a verification failed: every rejection carries a label — see KYC Reject Labels. Which documents are accepted: Supported Documents.

Questions on thresholds: your account manager, or [email protected].


Did this page help you?