Skip to main content
POST
/
api
/
v2.1
/
customer
/
organization
/
registration
Register organization
curl --request POST \
  --url https://sandbox.finhub.cloud/api/v2.1/customer/organization/registration \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: application/json' \
  --header 'User-Agent: <user-agent>' \
  --header 'X-Forwarded-For: <x-forwarded-for>' \
  --header 'X-Forwarded-From: <x-forwarded-from>' \
  --header 'X-Tenant-ID: <x-tenant-id>' \
  --header 'deviceId: <deviceid>' \
  --header 'platform: <platform>' \
  --data '
{
  "email": "admin@acmecorp-1773494453954-tt92yp.com",
  "password": "SecurePass123!",
  "matchingPassword": "SecurePass123!",
  "organizationCustomer": {
    "customerName": "Acme Corporation Ltd",
    "organization": {
      "legalName": "Acme Corporation Limited",
      "registrationNumber": "REG-1773494453954",
      "tradingName": "Acme Corp",
      "taxId": "TAX-1773494453954",
      "incorporationDate": "2015-03-20",
      "legalForm": "LIMITED_LIABILITY_COMPANY",
      "industry": "TECHNOLOGY",
      "businessDescription": "Software development",
      "website": "https://acmecorp-1773494453954.com",
      "email": "admin@acmecorp-1773494453954-tt92yp.com",
      "phone": "+37060012345",
      "addresses": [
        {
          "type": "REGISTERED",
          "street": "123 Business Avenue",
          "city": "Vilnius",
          "postalCode": "LT-01001",
          "country": "Lithuania",
          "isPrimary": true
        }
      ],
      "representatives": [
        {
          "firstName": "John",
          "lastName": "Director",
          "position": "MANAGING_DIRECTOR",
          "email": "director.1773494453954@acmecorp.com",
          "phone": "+37060012346",
          "dateOfBirth": "1980-01-15",
          "nationality": "Lithuania",
          "isPrimaryOwner": false,
          "ownershipShare": 0
        }
      ]
    },
    "user": {
      "username": "admin@acmecorp-1773494453954-tt92yp.com",
      "email": "admin@acmecorp-1773494453954-tt92yp.com",
      "password": "SecurePass123!",
      "status": "PENDING_ACTIVATION",
      "roles": [
        "<string>"
      ]
    }
  },
  "organizationId": "<string>",
  "roleIds": [
    "ACCOUNT_OWNER",
    "ADMIN"
  ],
  "customerCategory": {
    "id": "fs-cat-b2b-small-001",
    "name": "Small Business"
  }
}
'
{
  "code": 200,
  "message": "Organization registered successfully. Default admin will be created automatically. Use separate endpoints to add employees, directors, and shareholders.",
  "data": {
    "individual": false,
    "organization": true,
    "adminEmployees": [],
    "id": "ef4a8be6-602b-4b26-b81d-afa7d6d835fd",
    "organizationId": "ef4a8be6-602b-4b26-b81d-afa7d6d835fd",
    "tenantId": "d1e2f3a4-b5c6-47d8-9e0f-1a2b3c4d5e6f",
    "email": "admin@acmecorp.com",
    "shareholders": [],
    "employees": [],
    "directors": []
  }
}

Organization Registration API

Register a new B2B organization customer with complete company details.
Endpoint: POST /api/v2.1/customer/organization/registration
Important Registration BehaviorEmployees, directors, and shareholders included in the registration request are ignored by the API.The registration endpoint only creates:
  • Organization entity
  • Primary admin user account
You must use separate endpoints after registration:
  1. POST /customer/organization/{id}/director - Add directors
  2. POST /customer/organization/{id}/shareholders - Add shareholders
  3. POST /customer/organization/{id}/employee - Add employees (requires ADMIN_USER role)
See Organization Management API for details.

Endpoint

POST /api/v2.1/customer/organization/registration

Headers

For complete details on authentication, compliance headers, and SDK implementation examples, refer to the Standard HTTP Headers reference documentation.
X-Tenant-ID
string
required
Tenant identifier for multi-tenant operationsExample: 97e7ff29-15f3-49ef-9681-3bbfcce4f6cd
Authorization
string
required
Bearer token for authenticationExample: Bearer eyJ0eXAiOiJKV1QiLCJh...
Content-Type
string
required
Must be application/json
Accept
string
Response format (optional — defaults to application/json)Example: application/json, text/plain, */*
X-Forwarded-From
string
required
Source identifier for request origin trackingExample: e2e-test
User-Agent
string
required
Client application identifier — required by the global request filter for security analysis and device fingerprintingExample: YourApp/1.0 or Mozilla/5.0 (Windows NT 10.0; Win64; x64)
platform
string
required
Client platform identifier. Also accepted as sec-ch-ua-platformExample: web
deviceId
string
required
Unique device identifier for session tracking. Also accepted as X-Device-Id or device-idExample: 356938035643809
sec-ch-ua-platform
string
Browser client hint for OS platform (accepted alias for platform — automatically sent by modern browsers)Example: "Windows"

Request Body

The request body uses a nested structure. All organization details must be inside the organizationCustomer.organization wrapper object.

Top-Level Fields

email
string
required
Primary admin user email address (must be unique)Example: "admin@acmecorp.com"
password
string
required
Password for the admin user accountSecurity Requirements:
  • Minimum 8 characters
  • Must contain uppercase and lowercase
  • Must contain numbers and special characters
matchingPassword
string
required
Password confirmation (must match password)
roleIds
string[]
required
Array of role identifiers for the admin userStandard Roles:
  • ACCOUNT_OWNER: Primary account owner
  • ADMIN: Administrative privileges
Example: ["ACCOUNT_OWNER", "ADMIN"]
customerCategory
object
Customer category assignment (optional)

Organization Customer Object

organizationCustomer
object
required
Nested object containing all organization details

Code Examples

curl -X POST "https://sandbox.finhub.cloud/api/v2.1/customer/organization/registration" \
  -H "Accept: application/json, text/plain, */*" \
  -H "Content-Type: application/json" \
  -H "X-Tenant-ID: 97e7ff29-15f3-49ef-9681-3bbfcce4f6cd" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Forwarded-From: e2e-test" \
  -H "platform: web" \
  -H "deviceId: 356938035643809" \
  -d '{
    "email": "admin@acmecorp.com",
    "password": "SecurePassword123!",
    "matchingPassword": "SecurePassword123!",
    "roleIds": ["ACCOUNT_OWNER", "ADMIN"],
    "organizationCustomer": {
      "customerName": "Acme Corporation Ltd",
      "organization": {
        "legalName": "Acme Corporation Limited",
        "tradingName": "Acme Corp",
        "registrationNumber": "REG-1234567890",
        "taxId": "TAX-1234567890",
        "incorporationDate": "2015-03-20",
        "legalForm": "LIMITED_LIABILITY_COMPANY",
        "industry": "TECHNOLOGY",
        "businessDescription": "Software development and consulting services",
        "website": "https://acmecorp.com",
        "email": "admin@acmecorp.com",
        "phone": "+37060012345",
        "addresses": [
          {
            "type": "REGISTERED",
            "street": "123 Business Avenue",
            "city": "Vilnius",
            "postalCode": "LT-01001",
            "country": "Lithuania",
            "isPrimary": true
          }
        ],
        "representatives": [
          {
            "firstName": "John",
            "lastName": "Director",
            "position": "MANAGING_DIRECTOR",
            "email": "director@acmecorp.com",
            "phone": "+37060012346",
            "dateOfBirth": "1980-01-15",
            "nationality": "Lithuania",
            "isPrimaryOwner": false,
            "ownershipShare": 0
          },
          {
            "firstName": "Alice",
            "lastName": "Shareholder",
            "position": "SHAREHOLDER",
            "email": "shareholder@acmecorp.com",
            "phone": "+37060012348",
            "dateOfBirth": "1975-05-20",
            "nationality": "Lithuania",
            "isPrimaryOwner": true,
            "ownershipShare": 60
          }
        ]
      },
      "user": {
        "username": "admin@acmecorp.com",
        "email": "admin@acmecorp.com",
        "password": "SecurePassword123!",
        "status": "PENDING_ACTIVATION",
        "roles": ["ACCOUNT_OWNER", "ADMIN"]
      },
      "employees": [
        {
          "person": {
            "firstName": "Finance",
            "lastName": "Manager",
            "email": "finance@acmecorp.com",
            "dateOfBirth": "1988-03-10",
            "nationality": "LT",
            "gender": 0,
            "placeOfBirth": "Kaunas",
            "fullName": "Finance Manager"
          },
          "role": "TRANSACTION_APPROVER",
          "roles": ["TRANSACTION_APPROVER", "EMPLOYEE"],
          "department": "Finance",
          "addresses": [
            {
              "type": "HOME",
              "street": "789 Finance Street",
              "city": "Vilnius",
              "postalCode": "01236",
              "country": "LT",
              "isPrimary": true
            }
          ],
          "telephoneNumbers": [
            {
              "number": "+37067890124",
              "country": "LT",
              "phoneType": 1,
              "operator": "Telia",
              "purpose": "personal",
              "isPrimary": true
            }
          ]
        }
      ]
    }
  }'

Advanced: Registration with Categorization

For medium or high-risk business customers, you can include categorization with feature parametrization to define appropriate risk controls during registration. This enables automated compliance and transaction monitoring from day one.

How It Works

  1. Get Categorization Hierarchy - Call GET /customer/individual/categorization/hierarchy/ (use individual endpoint for organizations too)
  2. Filter Business Categories - Client-side filter for categories with “BUSINESS”, “ORGANIZATION”, “B2B”
  3. Build Feature Relations - Map features with business-appropriate values
  4. Include in Registration - Add categorization object to organizationCustomer

Example: Business Registration with Categorization

curl -X POST "https://sandbox.finhub.cloud/api/v2.1/customer/organization/registration" \
  -H "X-Tenant-ID: 97e7ff29-15f3-49ef-9681-3bbfcce4f6cd" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "User-Agent: Mozilla/5.0" \
  -d '{
    "email": "admin@acmecorp.com",
    "password": "SecurePassword123!",
    "matchingPassword": "SecurePassword123!",
    "roleIds": ["ACCOUNT_OWNER", "ADMIN"],
    "customerCategory": {
      "id": "business-medium-risk-7f9a",
      "name": "BUSINESS_MEDIUM_RISK"
    },
    "organizationCustomer": {
      "customerName": "Acme Corporation Ltd",
      "organization": {
        "legalName": "Acme Corporation Limited",
        "tradingName": "Acme Corp",
        "registrationNumber": "REG-1234567890",
        "taxId": "TAX-1234567890",
        "incorporationDate": "2015-03-20",
        "legalForm": "LIMITED_LIABILITY_COMPANY",
        "industry": "TECHNOLOGY",
        "businessDescription": "Software development and consulting services",
        "website": "https://acmecorp.com",
        "email": "admin@acmecorp.com",
        "phone": "+37060012345",
        "businessType": "B2B",
        "addresses": [
          {
            "type": "REGISTERED_OFFICE",
            "street": "456 Tech Boulevard",
            "city": "Vilnius",
            "postalCode": "01234",
            "country": "LT",
            "isPrimary": true
          }
        ],
        "contacts": [
          {
            "type": "EMAIL",
            "value": "admin@acmecorp.com",
            "isPrimary": true
          },
          {
            "type": "PHONE",
            "value": "+37060012345",
            "isPrimary": true
          }
        ],
        "representatives": [
          {
            "firstName": "John",
            "lastName": "Doe",
            "position": "CEO",
            "email": "john.doe@acmecorp.com",
            "phone": "+37060012346",
            "dateOfBirth": "1980-05-15",
            "nationality": "LT",
            "isPrimaryOwner": true,
            "ownershipShare": 51.0
          },
          {
            "firstName": "Jane",
            "lastName": "Smith",
            "position": "CFO",
            "email": "jane.smith@acmecorp.com",
            "phone": "+37060012347",
            "dateOfBirth": "1985-08-20",
            "nationality": "LT",
            "isPrimaryOwner": false,
            "ownershipShare": 49.0
          }
        ]
      },
      "user": {
        "username": "admin@acmecorp.com",
        "email": "admin@acmecorp.com",
        "password": "SecurePassword123!",
        "status": "PENDING_ACTIVATION",
        "roles": ["ACCOUNT_OWNER", "ADMIN"]
      },
      "categorization": {
        "id": "business-medium-risk-7f9a",
        "name": "BUSINESS_MEDIUM_RISK",
        "description": "Medium risk business customer",
        "isActive": true,
        "categoryFeatureRelations": [
          {
            "feature": {
              "id": "business-risk-assessment-3c4d",
              "code": "BUSINESS_RISK_ASSESSMENT"
            },
            "enabled": true,
            "parametrization": [
              {
                "name": "BUSINESS_RISK_LEVEL",
                "value": "MEDIUM"
              },
              {
                "name": "BUSINESS_RISK_SCORE",
                "value": "60"
              },
              {
                "name": "ANNUAL_REVENUE",
                "value": "1000000"
              },
              {
                "name": "EMPLOYEE_COUNT",
                "value": "25"
              },
              {
                "name": "SANCTIONS_CHECK",
                "value": "STANDARD"
              }
            ]
          },
          {
            "feature": {
              "id": "business-transaction-limits-7e2f",
              "code": "BUSINESS_TRANSACTION_LIMITS"
            },
            "enabled": true,
            "parametrization": [
              {
                "name": "MONTHLY_LIMIT",
                "value": "50000"
              },
              {
                "name": "DAILY_LIMIT",
                "value": "10000"
              },
              {
                "name": "PER_TRANSACTION_LIMIT",
                "value": "5000"
              }
            ]
          },
          {
            "feature": {
              "id": "business-verification-requirements-9a1b",
              "code": "BUSINESS_VERIFICATION_REQUIREMENTS"
            },
            "enabled": true,
            "parametrization": [
              {
                "name": "BUSINESS_VERIFICATION",
                "value": "REQUIRED"
              },
              {
                "name": "BENEFICIAL_OWNER_VERIFICATION",
                "value": "REQUIRED"
              },
              {
                "name": "DOCUMENT_VERIFICATION",
                "value": "REQUIRED"
              }
            ]
          }
        ]
      }
    }
  }'

Categorization Benefits for Business Customers

Why Use Categorization During Organization Registration?
  1. Business Risk Assessment - Define risk profile based on annual revenue, employee count, industry
  2. Transaction Limits - Set appropriate limits for business operations (typically higher than individual)
  3. Verification Requirements - Specify KYB checks (business verification, UBO verification, document verification)
  4. Compliance Automation - Ensure AML/CTF requirements are met from day one
  5. Monitoring Frequency - Schedule transaction monitoring appropriate for business risk level

Smart Value Selection for Business

Production-proven patterns for business categorization:
ParameterSmart Selection LogicTypical Values
BUSINESS_RISK_LEVELMatch “MEDIUM”, “STANDARD”MEDIUM, STANDARD, VERIFIED
BUSINESS_RISK_SCOREMatch 50-70 range for medium risk60, 55, 65
ANNUAL_REVENUEMatch 500K-2M range1000000, 500000, 2000000
EMPLOYEE_COUNTMatch 10-50 range25, 20, 30
MONTHLY_LIMITMatch 40K-60K for medium risk50000, 40000, 60000
DAILY_LIMITMatch 8K-12K for medium risk10000, 8000, 12000
SANCTIONS_CHECKMatch “STANDARD” or “PERIODIC”STANDARD, PERIODIC, ENHANCED
Production Pattern: Use the individual categorization endpoint (GET /customer/individual/categorization/hierarchy/{tenantId}) and filter client-side for business categories. The organization-specific endpoint returns 404 in production.
UBO Ownership Validation: If including representatives with ownershipShare, ensure the total adds up to 100%. The API may validate this during verification.

Response

{
  "code": 200,
  "message": "Organization registered successfully. Default admin will be created automatically. Use separate endpoints to add employees, directors, and shareholders.",
  "data": {
    "individual": false,
    "organization": true,
    "adminEmployees": [],
    "id": "ef4a8be6-602b-4b26-b81d-afa7d6d835fd",
    "organizationId": "ef4a8be6-602b-4b26-b81d-afa7d6d835fd",
    "tenantId": "d1e2f3a4-b5c6-47d8-9e0f-1a2b3c4d5e6f",
    "email": "admin@acmecorp.com",
    "shareholders": [],
    "employees": [],
    "directors": []
  }
}
Why are the arrays empty?Even if you send employees, directors, or shareholders in the registration request, they will not be processed. The API intentionally returns empty arrays to indicate you must use the dedicated management endpoints.This design ensures proper validation and role requirements for each organizational role type.

Next Steps After Registration

1. Add Directors

POST /api/v2.1/customer/organization/{organizationId}/director
See Add Director for details.

2. Add Shareholders

POST /api/v2.1/customer/organization/{organizationId}/shareholders
See Add Shareholders for details.

3. Add Additional Employees

POST /api/v2.1/customer/organization/{organizationId}/employee
Important: At least one employee must have the ADMIN_USER role.

4. Complete Verification

POST /api/v2.1/customer/organization/{organizationId}/verify
See Business Verification for details.

5. Accept Consents

Required consents:
  • Terms and Conditions
  • Privacy Policy
  • Data Processing
See Consent Management for details.

6. Activate Organization

POST /api/v2.1/customer/organization/{organizationId}/activation
See Organization Activation for details.

Common Validation Errors

Missing ADMIN_USER Role

Error:
{
  "code": 400,
  "message": "Missing required role 'ADMIN_USER' for BUSINESS_TYPE_CLIENT_TO_TENANT organization. At least one employee must have this role."
}
Solution: Ensure at least one employee has the ADMIN_USER role.

Duplicate Registration Number

Error:
{
  "code": 409,
  "message": "Organization with registration number 'REG-123' already exists"
}
Solution: Registration numbers must be unique within the tenant.

Invalid Nested Structure

Error:
{
  "code": 400,
  "message": "organizationCustomer is required"
}
Solution: Use the nested structure with organizationCustomer.organization.*

API Schema Reference

For the complete OpenAPI schema specification of this endpoint, including all request and response structures, see the API Schema Mapping document.

Changelog

VersionDateChanges
v2.12026-01-13Initial release

Headers

User-Agent
string
required

Browser user agent

Example:

"Mozilla/5.0"

X-Forwarded-For
string
required

Client/application Ip address

Example:

"192.168.0.1"

X-Forwarded-From
string
required

Client/application identifier for request source tracking

Example:

"playground"

X-Tenant-ID
string
required

Tenant identifier

Example:

"97e7ff29-15f3-49ef-9681-3bbfcce4f6cd"

platform
string
required

Client platform identifier. Also accepted as sec-ch-ua-platform

Example:

"web"

deviceId
string
required

Device identifier

Example:

"e2e-test-device"

Authorization
string
required

Bearer token from admin or customer session creation

Example:

"Bearer <token>"

Body

application/json
email
string
required
Example:

"admin@acmecorp-1773494453954-tt92yp.com"

password
string
required
Example:

"SecurePass123!"

matchingPassword
string
required
Example:

"SecurePass123!"

organizationCustomer
object
required
organizationId
string
roleIds
string[]
Example:
["ACCOUNT_OWNER", "ADMIN"]
customerCategory
object

Response

Organization registered successfully

Standard API response wrapper used by all endpoints

code
integer

HTTP status code

Example:

200

data
object

Response from organization registration

message
string

Human-readable status message

Example:

"Success"