URL: /baas/api/integration/flows/organization-customer/verification
---
title: 'Phase 3: Organization Verification'
description: 'KYB verification, document upload, and approval workflow'
---
# Phase 3: Organization Verification
Organization verification (KYB - Know Your Business) is more comprehensive than individual verification, including business entity verification, UBO verification, and financial statement review.
## Verification Requirements
| Verification Type | Description |
|-------------------|-------------|
| `BUSINESS_VERIFICATION` | Company registration and legal status |
| `DOCUMENT_VERIFICATION` | Business documents authentication |
| `BENEFICIAL_OWNER_VERIFICATION` | UBO identification and verification |
| `FINANCIAL_VERIFICATION` | Financial statements review |
---
## Required Documents
| Document Type | Description | Format | Max Size |
|---------------|-------------|--------|----------|
| `CERTIFICATE_OF_INCORPORATION` | Official incorporation certificate | PDF | 5 MB |
| `ARTICLES_OF_ASSOCIATION` | Company articles | PDF | 10 MB |
| `PROOF_OF_REGISTERED_ADDRESS` | Utility bill or bank statement | PDF/JPEG | 5 MB |
| `BENEFICIAL_OWNERS_DECLARATION` | UBO declaration form | PDF | 5 MB |
| `FINANCIAL_STATEMENTS` | Latest audited statements | PDF | 20 MB |
| `DIRECTOR_IDS` | ID documents for each director | PDF/JPEG | 5 MB each |
| `BANK_REFERENCE_LETTER` | Bank reference letter | PDF | 5 MB |
| `BUSINESS_LICENSE` | Industry-specific licenses | PDF | 5 MB |
| `TAX_CLEARANCE_CERTIFICATE` | Tax authority clearance | PDF | 5 MB |
---
## Initiate Organization Verification
**Endpoint:** `POST /api/v2.1/customer/organization/{organizationId}/verify`
**Required Role:** `COMPLIANCE_OFFICER` or `ADMIN_USER`
**Headers:**
```http
X-User-ID: user-660e8400-e29b-41d4-a716-446655440011
X-User-Roles: COMPLIANCE_OFFICER
Authorization: Bearer {jwt-token}
```
**Request Body:**
```json
{
"verificationType": "KYB",
"verificationLevel": "ENHANCED",
"priority": "NORMAL",
"verificationData": {
"businessType": "B2B",
"annualRevenue": "5000000",
"employeeCount": "50",
"businessDescription": "Enterprise software development",
"mainProducts": ["Software Development", "Cloud Services"],
"targetMarkets": ["UK", "EU", "US"],
"regulatoryCompliance": ["GDPR", "PCI-DSS", "ISO27001"],
"bankingRelationships": [
{
"bankName": "Westminster Bank",
"accountNumber": "12345678",
"sortCode": "12-34-56"
}
]
}
}
```
**Status:** `200 OK`
```json
{
"code": 200,
"message": "Verification initiated successfully",
"data": {
"verificationId": "verif-ff0e8400-e29b-41d4-a716-446655440160",
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"status": "IN_PROGRESS",
"type": "IDENTITY_VERIFICATION",
"level": "ENHANCED",
"startedAt": "2026-01-13T12:00:00.000Z",
"dueDate": "2026-01-20T12:00:00.000Z",
"requiredDocuments": [
"CERTIFICATE_OF_INCORPORATION",
"ARTICLES_OF_ASSOCIATION",
"PROOF_OF_REGISTERED_ADDRESS",
"BENEFICIAL_OWNERS_DECLARATION",
"FINANCIAL_STATEMENTS",
"BANK_REFERENCE_LETTER",
"DIRECTOR_IDS",
"BUSINESS_LICENSE",
"TAX_CLEARANCE_CERTIFICATE"
],
"verificationTypes": [
"BUSINESS_VERIFICATION",
"DOCUMENT_VERIFICATION",
"BENEFICIAL_OWNER_VERIFICATION",
"FINANCIAL_VERIFICATION"
],
"assignedTo": "compliance-team",
"estimatedCompletionTime": "3-5 business days"
}
}
```
**Status:** `403 Forbidden`
```json
{
"code": 403,
"message": "Access denied: Only COMPLIANCE_OFFICER or ADMIN_USER can initiate verification",
"data": {
"userId": "user-660e8400...",
"currentRoles": ["EMPLOYEE", "TRANSACTION_APPROVER"],
"requiredRoles": ["COMPLIANCE_OFFICER", "ADMIN_USER"]
}
}
```
---
## Upload Verification Document
Use the **generic verification document endpoint** for both individual and organization verifications.
**Endpoint:** `POST /api/v2.1/verifications/{verificationId}/documents`
**Content-Type:** `application/json`
**Headers:**
```http
Authorization: Bearer {jwt-token}
Content-Type: application/json
```
**Request Body:**
```json
{
"docId": "550e8400-e29b-41d4-a716-446655440000",
"documentType": "CERTIFICATE_OF_INCORPORATION",
"fileName": "certificate_of_incorporation.pdf",
"fileContent": "JVBERi0xLjQKJeLjz9MKMyAwIG9iaiA8PAovVHlwZSAvUGFnZQovUGFy...",
"customerId": "org-880e8400-e29b-41d4-a716-446655440110",
"description": "Certificate of Incorporation - Acme Corp",
"documentCategory": "VERIFICATION",
"metadata": {
"issuer": "Companies House",
"issueDate": "2010-05-20",
"documentNumber": "REG123456789",
"certificateType": "ORIGINAL"
}
}
```
**Field Descriptions:**
- `fileContent`: Base64-encoded file content
- `documentCategory`: Use `VERIFICATION` for KYB documents
- `customerId`: Organization ID (from verification initiation)
**Status:** `201 Created`
```json
{
"code": 201,
"message": "Document uploaded successfully",
"data": {
"documentId": "doc-0011e8400-e29b-41d4-a716-446655440170",
"verificationId": "verif-ff0e8400-e29b-41d4-a716-446655440160",
"customerId": "org-880e8400-e29b-41d4-a716-446655440110",
"documentType": "CERTIFICATE_OF_INCORPORATION",
"fileName": "certificate_of_incorporation.pdf",
"fileSize": 2048576,
"uploadedAt": "2026-01-13T13:00:00.000Z",
"status": "UPLOADED",
"verificationStatus": "IN_PROGRESS"
}
}
```
---
## Get Verification Status
**Endpoint:** `GET /api/v2.1/customer/organization/{organizationId}/verification`
**Status:** `200 OK`
```json
{
"code": 200,
"message": "Verification status retrieved successfully",
"data": {
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"verificationId": "verif-ff0e8400-e29b-41d4-a716-446655440160",
"status": "PENDING_REVIEW",
"type": "IDENTITY_VERIFICATION",
"level": "TENANT_VERIFIED",
"startedAt": "2026-01-13T12:00:00.000Z",
"completedAt": null,
"expiresAt": "2026-04-13T12:00:00.000Z",
"submittedDocuments": 5,
"documentStatus": {
"CERTIFICATE_OF_INCORPORATION": "SUBMITTED",
"ARTICLES_OF_ASSOCIATION": "SUBMITTED",
"PROOF_OF_REGISTERED_ADDRESS": "SUBMITTED",
"BENEFICIAL_OWNERS_DECLARATION": "SUBMITTED",
"FINANCIAL_STATEMENTS": "SUBMITTED",
"DIRECTOR_IDS": "PENDING",
"BANK_REFERENCE_LETTER": "PENDING"
},
"verificationHistory": [
{
"status": "IN_PROGRESS",
"timestamp": "2026-01-13T12:00:00.000Z",
"actor": "COMPLIANCE_OFFICER"
},
{
"status": "PENDING_REVIEW",
"timestamp": "2026-01-14T10:00:00.000Z",
"actor": "system",
"note": "All required documents submitted"
}
],
"nextSteps": [
"Upload remaining director ID documents",
"Upload bank reference letter",
"Wait for tenant admin review"
]
}
}
```
---
## Verification Status Flow
```mermaid
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
```
---
## Approve Verification (Admin)
**Endpoint:** `POST /api/v2.1/verifications/{verificationId}/approve`
**Headers:**
```http
Authorization: Bearer {admin-jwt-token}
X-User-ID: admin-user-id
X-User-Roles: COMPLIANCE_OFFICER
```
**Request Body:**
```json
{
"adminNotes": "All documents verified. Organization identity confirmed.",
"approvedBy": "ADMIN_USER",
"approvalReason": "All documents verified for organization customer"
}
```
**Status:** `200 OK`
```json
{
"code": 200,
"message": "Verification approved successfully",
"data": {
"level": "TENANT_VERIFIED",
"approvedBy": "admin-user",
"approvedAt": "2026-01-15T10:00:00.000Z",
"verificationId": "verif-ff0e8400-e29b-41d4-a716-446655440160",
"status": "APPROVED"
}
}
```
---
## Next Step
After verification is APPROVED, proceed to **Phase 4: Consent Management**.
Accept organization-level consents