URL: /baas/api/integration/flows/organization-customer/personnel-management
---
title: 'Phase 2: Personnel Management'
description: 'Add directors, shareholders, and employees to the organization'
---
# Phase 2: Personnel Management
Personnel must be added **AFTER** organization registration. Each person added also creates an individual customer record with login credentials.
## Personnel Types
| Type | Description | Creates Individual Record |
|------|-------------|---------------------------|
| **Directors** | Board members (verification required) | ✅ Yes |
| **Shareholders** | Ownership stakeholders | ✅ Yes (for individuals) |
| **Employees** | Operations staff with specific roles | ✅ Yes |
**First Employee Rule:** The first employee added to an organization MUST have the `ADMIN_USER` role. Without this role, the request will fail with a 400 error.
---
## Add Director
Directors are automatically created as individual customers with temporary passwords.
**Endpoint:** `POST /api/v2.1/customer/organization/{organizationId}/director`
**Headers:**
```http
Authorization: Bearer {admin-jwt-token}
Content-Type: application/json
```
**Request Body:**
```json
{
"tenantId": "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd",
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"email": "director@acme-corp.com",
"firstName": "Michael",
"middleName": "Robert",
"lastName": "Brown",
"dateOfBirth": "1970-09-25",
"nationality": "GB",
"phoneNumber": "+442071234572",
"position": "Board Director",
"directorType": "NON_EXECUTIVE",
"appointmentDate": "2010-06-01",
"isPEP": false,
"ownershipPercentage": 0,
"address": {
"street": "321 Director Avenue",
"city": "London",
"postalCode": "EC3A 1BB",
"country": "GB"
},
"identificationDocument": {
"type": "PASSPORT",
"number": "GB987654321",
"issuingCountry": "GB",
"expiryDate": "2030-12-31"
}
}
```
**Status:** `200 OK`
```json
{
"code": 200,
"message": "Director added successfully",
"data": {
"organization": {
"id": "org-dir-bb0e8400-e29b-41d4-a716-446655440140",
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"email": "director@acme-corp.com",
"firstName": "Michael",
"lastName": "Brown",
"position": "Board Director",
"directorType": "NON_EXECUTIVE",
"appointmentDate": "2010-06-01",
"status": "ACTIVE",
"verificationStatus": "PENDING"
},
"individual": {
"id": "ind-cc0e8400-e29b-41d4-a716-446655440141",
"email": "director@acme-corp.com",
"firstName": "Michael",
"lastName": "Brown",
"username": "director@acme-corp.com",
"password": "Auto-Generated-P@ssw0rd456",
"status": "ACTIVE",
"linkedOrganization": "org-880e8400-e29b-41d4-a716-446655440110"
}
}
}
```
**Key IDs Created:**
- Director's individual customer ID
- Director's user ID
- Temporary password (should be changed on first login)
### Director Types
| Type | Description |
|------|-------------|
| `EXECUTIVE` | Full-time executive director |
| `NON_EXECUTIVE` | Part-time non-executive director |
| `MANAGING` | Managing director |
| `CHAIRMAN` | Board chairman |
---
## Add Shareholders (Bulk)
Shareholders can be added in bulk using an array.
**Endpoint:** `POST /api/v2.1/customer/organization/{organizationId}/shareholders`
**Request Body (Array):**
```json
[
{
"tenantId": "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd",
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"name": "Investment Fund Alpha Ltd",
"shareholderType": "CORPORATE",
"ownershipPercentage": 55.0,
"numberOfShares": 5500,
"shareClass": "ORDINARY",
"votingRights": true,
"registrationNumber": "REG-FUND-001",
"taxId": "TAX-FUND-001",
"country": "GB",
"address": {
"street": "100 Investment Street",
"city": "London",
"postalCode": "EC4A 1BB",
"country": "GB"
},
"contactPerson": {
"name": "Fund Manager",
"email": "manager@investment-alpha.com",
"phone": "+442071234580"
}
},
{
"tenantId": "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd",
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"name": "John Investor",
"shareholderType": "INDIVIDUAL",
"ownershipPercentage": 45.0,
"numberOfShares": 4500,
"shareClass": "ORDINARY",
"votingRights": true,
"dateOfBirth": "1965-04-12",
"nationality": "GB",
"identificationDocument": {
"type": "PASSPORT",
"number": "GB123789456",
"issuingCountry": "GB"
},
"address": {
"street": "200 Investor Road",
"city": "London",
"postalCode": "EC5A 1BB",
"country": "GB"
}
}
]
```
**Status:** `200 OK`
```json
{
"code": 200,
"message": "Shareholders added successfully",
"data": {
"count": 2,
"shareholders": [
{
"id": "share-dd0e8400-e29b-41d4-a716-446655440150",
"name": "Investment Fund Alpha Ltd",
"shareholderType": "CORPORATE",
"ownershipPercentage": 55.0
},
{
"id": "share-ee0e8400-e29b-41d4-a716-446655440151",
"name": "John Investor",
"shareholderType": "INDIVIDUAL",
"ownershipPercentage": 45.0
}
],
"totalOwnership": 100.0,
"validationStatus": "VALID"
}
}
```
### Shareholder Types
| Type | Description |
|------|-------------|
| `INDIVIDUAL` | Personal shareholder |
| `CORPORATE` | Company shareholder |
### Share Classes
| Class | Description |
|-------|-------------|
| `ORDINARY` | Standard voting shares |
| `PREFERENCE` | Preference shares with dividends |
| `REDEEMABLE` | Redeemable shares |
---
## Add Employee
**Endpoint:** `POST /api/v2.1/customer/organization/{organizationId}/employee`
**Request Body:**
```json
{
"tenantId": "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd",
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"email": "compliance@acme-corp.com",
"firstName": "Sarah",
"middleName": "Jane",
"lastName": "Johnson",
"dateOfBirth": "1985-06-10",
"nationality": "GB",
"phoneNumber": "+442071234571",
"department": "Compliance",
"position": "Chief Compliance Officer",
"employeeNumber": "EMP001",
"startDate": "2015-03-01",
"roles": ["EMPLOYEE", "COMPLIANCE_OFFICER", "ADMIN_USER"],
"permissions": [
"VIEW_TRANSACTIONS",
"INITIATE_VERIFICATION",
"APPROVE_SMALL_TRANSACTIONS"
],
"address": {
"street": "789 Employee Street",
"city": "London",
"postalCode": "EC2A 1BB",
"country": "GB"
}
}
```
**Status:** `200 OK`
```json
{
"code": 200,
"message": "Employee added successfully with role validation",
"data": {
"organization": {
"id": "org-emp-990e8400-e29b-41d4-a716-446655440130",
"organizationId": "org-880e8400-e29b-41d4-a716-446655440110",
"email": "compliance@acme-corp.com",
"firstName": "Sarah",
"lastName": "Johnson",
"department": "Compliance",
"position": "Chief Compliance Officer",
"roles": ["EMPLOYEE", "COMPLIANCE_OFFICER", "ADMIN_USER"],
"status": "ACTIVE",
"createdAt": "2026-01-13T10:30:00.000Z"
},
"individual": {
"id": "ind-aa0e8400-e29b-41d4-a716-446655440131",
"email": "compliance@acme-corp.com",
"firstName": "Sarah",
"lastName": "Johnson",
"username": "compliance@acme-corp.com",
"password": "Auto-Generated-P@ssw0rd123",
"status": "ACTIVE",
"linkedOrganization": "org-880e8400-e29b-41d4-a716-446655440110"
}
}
}
```
**Status:** `400 Bad Request`
```json
{
"code": 400,
"message": "Missing required role 'ADMIN_USER' for BUSINESS_TYPE_CLIENT_TO_TENANT organization. At least one employee must have this role."
}
```
---
## Employee Roles
| Role | Description |
|------|-------------|
| `EMPLOYEE` | Base role for all employees |
| `ADMIN_USER` | Administrative access (required for first employee) |
| `COMPLIANCE_OFFICER` | Compliance and verification access |
| `TRANSACTION_APPROVER` | Approve transactions |
| `OPERATIONS_MANAGER` | Operations management |
### Auto-Role Assignment
Roles can be auto-assigned based on department:
| Department | Auto-Assigned Roles |
|------------|---------------------|
| Compliance | `COMPLIANCE_OFFICER` |
| Finance | `TRANSACTION_APPROVER` |
| Management | `ADMIN_USER` |
| Operations | `OPERATIONS_MANAGER` |
---
## Get Organization Definitions
**Endpoint:** `GET /api/v2.1/customer/organization/definitions`
```json
{
"code": 200,
"message": "Definitions retrieved successfully",
"data": {
"ORG_REQUIRED_FIELDS": {
"mandatory": [
"legalName",
"businessType",
"registrationNumber",
"taxId",
"incorporationDate",
"registeredAddress"
]
},
"SHAREHOLDER_RULES": {
"totalOwnership": {
"mustEqual": 100,
"message": "Total ownership must equal 100%"
},
"minimumShareholders": 1,
"shareholderTypes": ["INDIVIDUAL", "CORPORATE"],
"shareClasses": ["ORDINARY", "PREFERENCE", "REDEEMABLE"]
}
}
}
```
---
## Next Step
After adding personnel, proceed to **Phase 3: Verification** for KYB verification.
Initiate KYB verification process