URL: /baas/api/integration/flows/organization-customer/registration
---
title: 'Phase 1: Organization Registration'
description: 'Register organization with legal information and representatives'
---
# Phase 1: Organization Registration
Organization registration creates the foundation for all B2B operations including the organization entity, legal information, addresses, and default admin user.
## What Gets Created
| Component | Status | Description |
|-----------|--------|-------------|
| Organization Record | `PENDING_VERIFICATION` | Core organization entity |
| Default Admin User | `PENDING_ACTIVATION` | Created via Kafka event |
| Wallet | `INACTIVE` | Default wallet (activated later) |
| Categorization | Assigned | Feature-based category (if provided) |
**Important:** Employees, directors, and shareholders arrays in the registration request are **ignored**. Use separate endpoints to add these entities.
---
## Register Organization
**Endpoint:** `POST /api/v2.1/customer/organization/registration`
**Headers:**
```http
X-Tenant-ID: fh_api_finsei_ltd_7f957f77
Authorization: Bearer {admin-jwt-token}
Content-Type: application/json
```
**Request Body:**
```json
{
"tenantId": "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd",
"legalName": "Acme Corporation Limited",
"tradingName": "Acme Corp",
"businessType": "B2B",
"registrationNumber": "REG123456789",
"taxId": "TAX987654321",
"vatNumber": "GB123456789",
"incorporationDate": "2010-05-20",
"legalForm": "LIMITED_LIABILITY_COMPANY",
"industry": "TECHNOLOGY",
"sector": "SOFTWARE_DEVELOPMENT",
"numberOfEmployees": 50,
"annualRevenue": "5000000",
"website": "https://www.acme-corp.com",
"description": "Leading provider of enterprise software solutions",
"registeredAddress": {
"street": "456 Business Avenue",
"streetNumber": "456",
"building": "Tech Tower",
"floor": "5th Floor",
"city": "London",
"state": "Greater London",
"postalCode": "EC1A 1BB",
"country": "GB",
"addressType": "REGISTERED_OFFICE"
},
"tradingAddress": {
"street": "456 Business Avenue",
"city": "London",
"postalCode": "EC1A 1BB",
"country": "GB",
"addressType": "TRADING_ADDRESS"
},
"contactEmail": "contact@acme-corp.com",
"contactPhone": "+442071234567",
"contactPerson": {
"firstName": "Jane",
"lastName": "Smith",
"position": "CEO",
"email": "jane.smith@acme-corp.com",
"phone": "+442071234569"
},
"representatives": [
{
"firstName": "Jane",
"lastName": "Smith",
"role": "CEO",
"email": "jane.smith@acme-corp.com",
"ownershipPercentage": 60.0,
"nationality": "GB",
"dateOfBirth": "1975-03-15",
"isPEP": false
},
{
"firstName": "John",
"lastName": "Doe",
"role": "CFO",
"email": "john.doe@acme-corp.com",
"ownershipPercentage": 40.0,
"nationality": "GB",
"dateOfBirth": "1978-07-22",
"isPEP": false
}
],
"categorization": {
"id": "org-cat-550e8400-e29b-41d4-a716-446655440100",
"name": "MEDIUM_RISK_BUSINESS",
"isActive": true,
"categoryFeatureRelations": [
{
"feature": {
"id": "org-feat-660e8400-e29b-41d4-a716-446655440101",
"code": "BUSINESS_TRANSACTION_LIMITS"
},
"enabled": true,
"parametrization": [
{ "name": "riskLevel", "value": "MEDIUM" },
{ "name": "riskScore", "value": "55" },
{ "name": "monthlyLimit", "value": "500000" },
{ "name": "transactionLimit", "value": "100000" },
{ "name": "dailyLimit", "value": "200000" }
]
},
{
"feature": {
"id": "org-feat-770e8400-e29b-41d4-a716-446655440102",
"code": "INTERNATIONAL_PAYMENTS"
},
"enabled": true,
"parametrization": [
{ "name": "swiftEnabled", "value": "true" },
{ "name": "sepaEnabled", "value": "true" },
{ "name": "crossBorderLimit", "value": "50000" }
]
}
]
}
}
```
**Status:** `201 Created`
```json
{
"code": 201,
"message": "Organization registered successfully. Default admin will be created automatically. Use separate endpoints to add employees, directors, and shareholders.",
"data": {
"id": "org-880e8400-e29b-41d4-a716-446655440110",
"legalName": "Acme Corporation Limited",
"tradingName": "Acme Corp",
"businessType": "B2B",
"status": "PENDING_VERIFICATION",
"registrationNumber": "REG123456789",
"taxId": "TAX987654321",
"incorporationDate": "2010-05-20",
"industry": "TECHNOLOGY",
"categorization": {
"id": "org-cat-550e8400-e29b-41d4-a716-446655440100",
"name": "MEDIUM_RISK_BUSINESS"
},
"addresses": {
"registered": {...},
"trading": {...}
},
"contacts": {
"email": "contact@acme-corp.com",
"phone": "+442071234567"
},
"representatives": [...],
"employees": [],
"directors": [],
"shareholders": [],
"createdAt": "2026-01-13T10:00:00.000Z"
}
}
```
**Key ID to Store:**
- `id` → Organization ID (for all subsequent calls)
**400 - Missing Required Fields:**
```json
{
"code": 400,
"message": "Validation failed",
"data": {
"errors": [
{
"field": "registrationNumber",
"message": "Registration number is required"
},
{
"field": "taxId",
"message": "Tax ID is required"
}
]
}
}
```
**409 - Organization Already Exists:**
```json
{
"code": 409,
"message": "Organization already exists",
"data": {
"error": "Duplicate organization",
"registrationNumber": "REG123456789",
"existingOrganizationId": "org-880e8400..."
}
}
```
---
## Required Fields
| Field | Required | Description |
|-------|----------|-------------|
| `legalName` | ✅ | Official legal name |
| `businessType` | ✅ | B2B, B2C, etc. |
| `registrationNumber` | ✅ | Company registration number |
| `taxId` | ✅ | Tax identification number |
| `incorporationDate` | ✅ | Date of incorporation |
| `registeredAddress` | ✅ | Official registered address |
| `contactEmail` | ✅ | Primary contact email |
| `vatNumber` | Conditional | Required if VAT registered |
---
## Ownership Validation
Representatives' ownership must total 100%:
```javascript
function validateOwnership(representatives) {
const totalOwnership = representatives.reduce(
(sum, rep) => sum + rep.ownershipPercentage, 0
);
if (totalOwnership !== 100) {
throw new ValidationError(
`Total ownership must equal 100%. Current: ${totalOwnership}%`
);
}
}
```
---
## Default Admin Creation
After organization creation, a Kafka event triggers automatic admin user creation:
```
OrganizationCreatedEvent → Create Admin User
→ Send Activation Email
```
The default admin receives:
- Email: `contactEmail` from registration
- Roles: `ADMIN`, `ADMIN_USER`
- Status: `PENDING_ACTIVATION`
---
## Get Organization Details
**Endpoint:** `GET /api/v2.1/customer/organization/{organizationId}`
**Headers:**
```http
Authorization: Bearer {jwt-token}
```
**Status:** `200 OK`
```json
{
"code": 200,
"message": "Organization retrieved successfully",
"data": {
"id": "org-880e8400-e29b-41d4-a716-446655440110",
"legalName": "Acme Corporation Limited",
"status": "PENDING_VERIFICATION",
"employees": [],
"directors": [],
"shareholders": [],
"verificationStatus": null,
"activationStatus": null,
"wallet": {
"id": "wallet-aa0e8400...",
"status": "INACTIVE",
"iban": null
},
"metadata": {
"personnelCount": {
"employees": 0,
"directors": 0,
"shareholders": 0
},
"complianceStatus": {
"verification": "NOT_STARTED",
"consents": "NOT_STARTED",
"activation": "NOT_ELIGIBLE"
}
}
}
}
```
---
## Next Step
After registration, proceed to **Phase 2: Personnel Management** to add directors, shareholders, and employees.
Add directors, shareholders, and employees