Phase 3: Verification Process
KYC verification, document submission, and approval workflow
Phase 3: Verification Process
Verification is the MOST CRITICAL phase. Without APPROVED verification, customers CANNOT be activated.
Verification Levels
| Level | Approver | Customer Type |
|---|---|---|
TENANT_VERIFIED | Tenant Admin | Standard/Low-risk |
POWER_TENANT_VERIFIED | Power Tenant (Sonnect) | High-risk |
Step 1: Initiate Verification
Endpoint: POST /api/v2.1/customer/individual/{customerId}/verification/initiate
Headers:
X-Tenant-Id: 97e7ff29-15f3-49ef-9681-3bbfcce4f6cd
Authorization: Bearer {customer-jwt-token}Status: 200 OK
{
"code": 200,
"message": "Verification initiated successfully",
"data": {
"verificationId": "verif-880e8400-e29b-41d4-a716-446655440030",
"customerId": "cust-550e8400-e29b-41d4-a716-446655440010",
"status": "IN_PROGRESS",
"level": "ENHANCED",
"requiredDocuments": [
"GOVERNMENT_ID",
"PROOF_OF_ADDRESS",
"SOURCE_OF_FUNDS",
"PEP_DECLARATION",
"BENEFICIAL_OWNERSHIP"
],
"verificationTypes": [
"IDENTITY_VERIFICATION",
"DOCUMENT_VERIFICATION",
"ENHANCED_DUE_DILIGENCE",
"SANCTIONS_CHECK"
],
"startedAt": "2026-01-13T12:00:00.000Z",
"dueDate": "2026-01-16T12:00:00.000Z",
"priority": "HIGH"
}
}Step 2: Submit Verification Documents
Endpoint: POST /api/v2.1/customer/individual/{customerId}/verification
Request Body (Identity Verification):
{
"verificationType": "IDENTITY",
"verificationData": {
"documentType": "PASSPORT",
"documentNumber": "AB1234567",
"issuingCountry": "US",
"issuingAuthority": "U.S. Department of State",
"issueDate": "2020-01-15",
"expiryDate": "2030-01-14",
"selfieImage": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
"documentFrontImage": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
"documentBackImage": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
"additionalData": {
"hologramPresent": true,
"chipPresent": true,
"biometricData": true
}
}
}Status: 200 OK
{
"code": 200,
"message": "Verification submitted successfully",
"data": {
"verificationId": "verif-880e8400-e29b-41d4-a716-446655440030",
"status": "PENDING_REVIEW",
"submittedAt": "2026-01-13T12:30:00.000Z",
"reviewedBy": null,
"approvalRequired": "POWER_TENANT",
"estimatedReviewTime": "1-3 business days",
"nextSteps": [
"Wait for power tenant review",
"You will be notified via email when review is complete",
"Additional documents may be requested if needed"
]
}
}Document Types
Required Documents by Verification Level
| Verification Type | Required Documents |
|---|---|
IDENTITY_VERIFICATION | PASSPORT or GOVERNMENT_ID |
DOCUMENT_VERIFICATION | PROOF_OF_ADDRESS |
ENHANCED_DUE_DILIGENCE | SOURCE_OF_FUNDS, BENEFICIAL_OWNERSHIP, PEP_DECLARATION |
SANCTIONS_CHECK | All above documents |
Document Specifications
| Document Type | Accepted Formats | Max Size |
|---|---|---|
| PASSPORT | PDF, JPEG, PNG | 5 MB |
| GOVERNMENT_ID | PDF, JPEG, PNG | 5 MB |
| PROOF_OF_ADDRESS | PDF, JPEG | 5 MB |
| SOURCE_OF_FUNDS | 10 MB | |
| PEP_DECLARATION | 5 MB |
Step 3: Check Verification Status
Endpoint: GET /api/v2.1/verifications/{verificationId}
Headers:
Authorization: Bearer {jwt-token}Status: 200 OK
{
"code": 200,
"message": "Verification status retrieved successfully",
"data": {
"verificationId": "verif-880e8400-e29b-41d4-a716-446655440030",
"customerId": "cust-550e8400-e29b-41d4-a716-446655440010",
"status": "APPROVED",
"type": "IDENTITY_VERIFICATION",
"level": "POWER_TENANT_VERIFIED",
"startedAt": "2026-01-13T12:00:00.000Z",
"submittedAt": "2026-01-13T12:30:00.000Z",
"reviewedAt": "2026-01-14T10:00:00.000Z",
"approvedAt": "2026-01-14T10:00:00.000Z",
"reviewedBy": "power-tenant-admin-id",
"completedAt": "2026-01-14T10:00:00.000Z",
"expiresAt": "2027-01-14T10:00:00.000Z",
"submittedDocuments": 5,
"reviewNotes": "All documents verified. Customer identity confirmed.",
"verificationHistory": [
{
"status": "INITIATED",
"timestamp": "2026-01-13T12:00:00.000Z",
"actor": "system"
},
{
"status": "IN_PROGRESS",
"timestamp": "2026-01-13T12:00:00.000Z",
"actor": "customer"
},
{
"status": "PENDING_REVIEW",
"timestamp": "2026-01-13T12:30:00.000Z",
"actor": "customer"
},
{
"status": "UNDER_REVIEW",
"timestamp": "2026-01-14T09:30:00.000Z",
"actor": "power-tenant-admin"
},
{
"status": "APPROVED",
"timestamp": "2026-01-14T10:00:00.000Z",
"actor": "power-tenant-admin"
}
]
}
}{
"code": 200,
"message": "Verification status retrieved successfully",
"data": {
"verificationId": "verif-880e8400-e29b-41d4-a716-446655440030",
"status": "PENDING_REVIEW",
"estimatedCompletionTime": "1-2 business days",
"submittedDocuments": 5,
"requiredDocuments": 5
}
}Verification Status Flow
flowchart LR
A[INITIATED] --> B[IN_PROGRESS]
B --> C[PENDING_REVIEW]
C --> D[UNDER_REVIEW]
D --> E{Decision}
E -->|Approved| F[APPROVED]
E -->|Rejected| G[REJECTED]
E -->|More Info| H[ADDITIONAL_INFO_REQUIRED]
H --> B
Status Descriptions
| Status | Description |
|---|---|
INITIATED | Verification process started |
IN_PROGRESS | Customer submitting documents |
PENDING_REVIEW | All documents submitted, awaiting review |
UNDER_REVIEW | Admin reviewing documents |
APPROVED | Verification approved ✅ |
REJECTED | Verification rejected ❌ |
ADDITIONAL_INFO_REQUIRED | More documents needed |
Verification Approval (Admin)
Endpoint: POST /api/v2.1/verifications/{verificationId}/approve
Headers:
Authorization: Bearer {admin-jwt-token}
X-User-ID: admin-user-id
X-User-Roles: COMPLIANCE_OFFICERRequest Body:
{
"adminNotes": "All documents verified. Customer identity confirmed.",
"approvedBy": "ADMIN_USER",
"approvalReason": "All documents verified for individual customer"
}Status: 200 OK
{
"code": 200,
"message": "Verification approved successfully",
"data": {
"level": "TENANT_VERIFIED",
"approvedBy": "admin-user",
"approvedAt": "2026-01-14T10:00:00.000Z",
"verificationId": "verif-880e8400-e29b-41d4-a716-446655440030",
"status": "APPROVED"
}
}Next Step
After verification is APPROVED, proceed to Phase 4: Consent Management.
Phase 4: Consent Management
Accept mandatory consents before activation