URL: /baas/api/reference/customer-apis/organization/shareholders --- title: 'Organization Shareholders API' description: 'Manage beneficial owners and shareholders' api: 'POST https://sandbox.finhub.cloud/api/v2.1/customer/organization/{organizationId}/shareholders' --- # Organization Shareholders API APIs for managing beneficial owners and shareholders of business organizations. **Base URL:** `https://sandbox.finhub.cloud` ## Available Operations `POST /v2.1/.../shareholders` `GET /v2/organizations/{id}/shareholders` `DELETE /v2/organizations/{id}/shareholders/{shareholderId}` **Note:** List and Remove operations use the `/api/v2/` endpoint path, while Add uses `/api/v2.1/`. --- ## Add Shareholders (v2.1) Adds one or more shareholders to the specified organization. For complete details on authentication and headers, refer to the [Standard HTTP Headers](../../schemas/standard-headers) reference documentation. ### Before You Start **Prerequisites:** - Organization must be registered - You must have ADMIN_USER role - Total ownership across all shareholders must equal 100% **Important Validation Rules:** - Individual vs Corporate shareholders have different required fields - Beneficial owners (≥25% ownership) require enhanced due diligence - Ownership percentages must sum to exactly 100% ### Endpoint `POST /api/v2.1/customer/organization/{organizationId}/shareholders` ### Request Organization identifier Shareholder type: `INDIVIDUAL` or `CORPORATE` Ownership percentage (0-100) First name (required for INDIVIDUAL) Last name (required for INDIVIDUAL) Company name (required for CORPORATE) Whether this is a beneficial owner (25%+ ownership) Politically Exposed Person status ### Code Examples ```bash cURL curl -X POST "https://sandbox.finhub.cloud/api/v2.1/customer/organization/org_12345/shareholders" \ -H "Accept: application/json, text/plain, */*" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "X-Tenant-ID: 97e7ff29-15f3-49ef-9681-3bbfcce4f6cd" \ -H "X-Forwarded-From: e2e-test" \ -H "platform: web" \ -H "deviceId: 356938035643809" \ -d '{ "type": "INDIVIDUAL", "firstName": "Sarah", "lastName": "Investor", "dateOfBirth": "1980-05-10", "nationality": "FR", "ownershipPercentage": 25.0, "isBeneficialOwner": true, "isPEP": false, "address": { "street": "789 Investor Blvd", "city": "Paris", "postalCode": "75001", "country": "FR" } }' ``` ```javascript JavaScript const response = await fetch( 'https://sandbox.finhub.cloud/api/v2.1/customer/organization/org_12345/shareholders', { method: 'POST', headers: { 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json', 'Authorization': `Bearer ${accessToken}`, 'X-Tenant-ID': '97e7ff29-15f3-49ef-9681-3bbfcce4f6cd', 'X-Forwarded-From': 'e2e-test', 'platform': 'web', 'deviceId': '356938035643809' }, body: JSON.stringify({ type: 'INDIVIDUAL', firstName: 'Sarah', lastName: 'Investor', nationality: 'FR', ownershipPercentage: 25.0, isBeneficialOwner: true, isPEP: false }) } ); const { data } = await response.json(); console.log('Shareholder ID:', data.shareholderId); ``` ```json 201 - Success { "success": true, "data": { "shareholderId": "sh_11111", "status": "PENDING_VERIFICATION", "createdAt": "2024-01-15T10:30:00Z" } } ``` --- ## List Shareholders (v2) Retrieves all shareholders for an organization with ownership percentages. ### Endpoint `GET /api/v2/organizations/{organizationId}/shareholders` ### Code Examples ```bash cURL curl -X GET "https://sandbox.finhub.cloud/api/v2/organizations/org_12345/shareholders" \ -H "Accept: application/json, text/plain, */*" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "X-Tenant-ID: 97e7ff29-15f3-49ef-9681-3bbfcce4f6cd" \ -H "X-Organization-ID: org_12345" \ -H "X-Forwarded-From: e2e-test" \ -H "platform: web" \ -H "deviceId: 356938035643809" ``` ```javascript JavaScript const response = await fetch( 'https://sandbox.finhub.cloud/api/v2/organizations/org_12345/shareholders', { headers: { 'Accept': 'application/json, text/plain, */*', 'Authorization': `Bearer ${accessToken}`, 'X-Tenant-ID': '97e7ff29-15f3-49ef-9681-3bbfcce4f6cd', 'X-Organization-ID': 'org_12345', 'X-Forwarded-From': 'e2e-test', 'platform': 'web', 'deviceId': '356938035643809' } } ); const { data } = await response.json(); data.shareholders.forEach(s => { const name = s.type === 'INDIVIDUAL' ? `${s.firstName} ${s.lastName}` : s.companyName; console.log(`${name}: ${s.ownershipPercentage}%`); }); ``` ```json 200 - Success { "success": true, "data": { "shareholders": [ { "shareholderId": "sh_12345", "type": "INDIVIDUAL", "firstName": "Max", "lastName": "Owner", "ownershipPercentage": 51.0, "isBeneficialOwner": true, "status": "VERIFIED" } ] } } ``` --- ## Remove Shareholder (v2) Removes a shareholder from the organization (requires ADMIN_USER role). ### Endpoint `DELETE /api/v2/organizations/{organizationId}/shareholders/{shareholderId}` ### Code Examples ```bash cURL curl -X DELETE "https://sandbox.finhub.cloud/api/v2/organizations/org_12345/shareholders/sh_12345" \ -H "Accept: application/json, text/plain, */*" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "X-Tenant-ID: 97e7ff29-15f3-49ef-9681-3bbfcce4f6cd" \ -H "X-Organization-ID: org_12345" \ -H "X-User-Roles: ADMIN_USER" \ -H "X-Forwarded-From: e2e-test" \ -H "platform: web" \ -H "deviceId: 356938035643809" ``` ```json 204 - Success { "success": true } ``` --- ## Beneficial Ownership Rules - Individuals owning **25% or more** must be declared as beneficial owners - Corporate shareholders must disclose their own beneficial owners - PEP (Politically Exposed Person) status must be declared --- ## Shareholder Types Comparison | Field | Individual Shareholder | Corporate Shareholder | |-------|----------------------|----------------------| | **Required** | firstName, lastName, dateOfBirth, nationality | companyName, registrationNumber, country | | **Ownership** | ownershipPercentage, numberOfShares | ownershipPercentage, numberOfShares | | **Identity** | Passport/ID number | Tax ID, incorporation docs | | **Contact** | Personal email, phone | Contact person details | | **Due Diligence** | PEP check if ≥25% | UBO disclosure required | --- ## Ownership Validation (100% Rule) When adding shareholders, the system validates that total ownership equals 100%: ```javascript // Example: Adding multiple shareholders const shareholders = [ { name: "Founder A", ownershipPercentage: 60.0 }, { name: "Founder B", ownershipPercentage: 30.0 }, { name: "Investor C", ownershipPercentage: 10.0 } ]; // Total: 100% ✅ Valid // This would fail: const invalidShareholders = [ { name: "Founder A", ownershipPercentage: 60.0 }, { name: "Founder B", ownershipPercentage: 30.0 } ]; // Total: 90% ❌ Invalid - missing 10% ``` --- ## Share Classes | Share Class | Description | Voting Rights | |------------|-------------|---------------| | **ORDINARY** | Standard common shares | Yes | | **PREFERENCE** | Preference shares with priority dividends | Usually limited | | **REDEEMABLE** | Can be bought back by company | Yes or No | --- ## Response Codes | Code | Description | |------|-------------| | `200` | Shareholders retrieved/updated successfully | | `201` | Shareholder added successfully | | `204` | Shareholder removed successfully | | `400` | Invalid request data or ownership validation failed | | `409` | Ownership total does not equal 100% | | `404` | Organization or shareholder not found | | `500` | Internal server error | --- ## Common Validation Errors ### Error: Ownership Total Mismatch **Problem:** Total ownership across all shareholders ≠ 100% **Solution:** ```json { "error": "Ownership validation failed", "currentTotal": 95.0, "required": 100.0, "missing": 5.0 } ``` Review all shareholder percentages and ensure they sum to exactly 100%. ### Error: Beneficial Owner Not Declared **Problem:** Shareholder with ≥25% ownership not marked as beneficial owner **Solution:** Set `isBeneficialOwner: true` for any shareholder with 25% or more ownership. ### Error: Missing Required Fields **Problem:** Individual shareholder missing personal details **Solution:** Ensure all required fields are provided: - Individual: firstName, lastName, dateOfBirth, nationality - Corporate: companyName, registrationNumber, taxId, country --- ## API Schema Reference For the complete OpenAPI schema specification, see the [API Schema Mapping](../../../../doc/mint/API_SCHEMA_MAPPING#add-organization-shareholders) document. --- ## Related Endpoints Complete HTTP headers reference Register new organizations Manage organization directors Manage organization employees