Skip to main content

Phase 1: Registration & Onboarding

Registration is the entry point for all individual customers. This phase creates the customer record, user credentials, and default inactive wallet.

What Gets Created

ComponentStatusDescription
Customer RecordPENDING_VERIFICATIONCore customer entity
User CredentialsActiveLogin credentials (hashed)
WalletINACTIVEDefault wallet (activated later)
CategorizationAssignedFeature-based category (if provided)

Step 1: Get Categorization Hierarchy

Before registration, retrieve available categories and features for smart categorization.
Endpoint: GET /api/v2.1/customer/individual/categorization/hierarchy/{tenantId}Headers:
Authorization: Bearer {admin-jwt-token}
X-Tenant-ID: fh_api_finsei_ltd_7f957f77

Step 2: Register Individual Customer

Endpoint: POST /api/v2.1/customer/individual/registrationHeaders:
X-Tenant-ID: fh_api_finsei_ltd_7f957f77
Authorization: Bearer {admin-jwt-token}
Content-Type: application/json
X-Forwarded-For: 192.168.1.100
Request Body:
{
  "tenantId": "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd",
  "email": "[email protected]",
  "password": "SecurePass123!@#",
  "matchingPassword": "SecurePass123!@#",
  "firstName": "John",
  "lastName": "Doe",
  "individualCustomer": {
    "tenantId": "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd",
    "email": "[email protected]",
    "firstName": "John",
    "lastName": "Doe",
    "middleName": "Robert",
    "dateOfBirth": "1990-05-15",
    "placeOfBirth": "New York",
    "nationality": "US",
    "phoneNumber": "+12125551234",
    "alternatePhoneNumber": "+12125559876",
    "address": {
      "street": "123 Main Street",
      "streetNumber": "123",
      "apartment": "Apt 4B",
      "city": "New York",
      "state": "NY",
      "postalCode": "10001",
      "country": "US",
      "addressType": "RESIDENTIAL"
    },
    "occupation": "Software Engineer",
    "employerName": "Tech Corp Inc",
    "annualIncome": "150000",
    "sourceOfFunds": "SALARY",
    "categorization": {
      "id": "550e8400-e29b-41d4-a716-446655440001",
      "name": "HIGH_RISK_INDIVIDUAL",
      "isActive": true,
      "categoryFeatureRelations": [
        {
          "feature": {
            "id": "660e8400-e29b-41d4-a716-446655440002",
            "code": "ENHANCED_AML_MONITORING"
          },
          "enabled": true,
          "parametrization": [
            { "name": "riskLevel", "value": "HIGH" },
            { "name": "riskScore", "value": "85" },
            { "name": "pep", "value": "true" },
            { "name": "pepCategory", "value": "DOMESTIC_PEP" },
            { "name": "sanctionsCheck", "value": "ENHANCED" },
            { "name": "monitoring", "value": "DAILY" },
            { "name": "edd", "value": "true" }
          ]
        },
        {
          "feature": {
            "id": "770e8400-e29b-41d4-a716-446655440003",
            "code": "TRANSACTION_LIMITS"
          },
          "enabled": true,
          "parametrization": [
            { "name": "dailyLimit", "value": "5000" },
            { "name": "monthlyLimit", "value": "50000" },
            { "name": "singleTransactionLimit", "value": "2000" }
          ]
        }
      ]
    }
  }
}

Business Logic

Tenant ID Resolution

The system resolves tenant ID from the header:
1. Extract X-Tenant-ID header (e.g., "fh_api_finsei_ltd_7f957f77")
2. Resolve to UUID (e.g., "97e7ff29-15f3-49ef-9681-3bbfcce4f6cd")
3. Override tenant ID in request body

Password Validation Rules

RuleRequirement
Minimum Length8 characters
UppercaseAt least 1
LowercaseAt least 1
NumbersAt least 1
Special CharactersAt least 1
Must MatchmatchingPassword field
Cannot ContainUsername or email

Categorization Validation

1. Check if categorization provided
2. Validate category exists in tenant hierarchy
3. For each feature:
   a. Validate feature exists for tenant
   b. Check all mandatory keys provided
   c. Validate values against allowedValues
4. Store validated categorization

Auto-Generated Components

ComponentFormat
Customer IDUUID v4
User IDUUID v4
Wallet IDUUID v4 (inactive)
Email Verification Token64-char hex string

Smart Categorization Examples

High-Risk Customer

Selection Criteria:
  • PEP (Politically Exposed Person)
  • High transaction volume expected
  • High-risk occupation or industry
  • High-risk country
Configuration:
{
  "riskLevel": "HIGH",
  "riskScore": "85",
  "pep": "true",
  "pepCategory": "DOMESTIC_PEP",
  "sanctionsCheck": "ENHANCED",
  "monitoring": "DAILY",
  "edd": "true",
  "transactionMonitoring": "REAL_TIME"
}

Standard Customer

Configuration:
{
  "riskLevel": "MEDIUM",
  "riskScore": "45",
  "pep": "false",
  "sanctionsCheck": "STANDARD",
  "monitoring": "WEEKLY",
  "edd": "false",
  "transactionMonitoring": "BATCH_DAILY"
}

Next Step

After successful registration, proceed to Phase 2: Session Management to authenticate the customer.

Phase 2: Session Management

Create customer session and obtain JWT token