exclamationMigration Guide: The New Entity-Role Model

Overview

The TradeVest API has been restructured to improve clarity and separation of concerns. The monolithic customers.yaml has been split into two specialized APIs:

  • entities.yaml: Manages entity data (natural persons, legal entities, joint persons, beneficial owners, legal representatives)

  • roles.yaml: Manages role assignments (customers, proxies)

Quick Reference: Endpoint Mapping

General

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type

GET /partner-details

GET /v2/partner-details

✏️ Path change

Natural Persons

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type

GET /natural-persons

GET /entities/natural-persons

✏️ Path change

POST /natural-persons

POST /entities/natural-persons

✏️ Path change

GET /natural-persons/{id}

GET /entities/natural-persons/{id}

✏️ Path change

PATCH /natural-persons/{id}

PATCH /entities/natural-persons/{id}

✏️ Path change

POST /natural-persons/{id}/identification

POST /entities/natural-persons/{id}/identification

✏️ Path change

Beneficial Owners

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type

POST /customers/natural-persons/{customerId}/beneficial-owners

POST /entities/{legalEntityId}/beneficial-owners

GET /customers/natural-persons/{customerId}/beneficial-owners

GET /entities/{legalEntityId}/beneficial-owners

GET /customers/natural-persons/{customerId}/beneficial-owners/{id}

GET /entities/beneficial-owners/{id}

PATCH /customers/natural-persons/{customerId}/beneficial-owners/{id}

PATCH /entities/beneficial-owners/{id}

Important: Beneficial owners are now associated directly with legal entities, not with customer roles.

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml + roles.yaml)
Change Type

POST /customers/legal-entities

🔀 Split → ➕ POST /entities/legal-entities + POST /roles/customers

🔄 Breaking change

GET /customers/legal-entities/{customerId}

GET /roles/customers/{customerId} (role data) + GET /entities/legal-entities/{id} (entity data)

🔄 Breaking change

PATCH /customers/legal-entities/{customerId}

PATCH /roles/customers/{customerId} + PATCH /entities/legal-entities/{id}

🔄 Breaking change

GET /customers/vendor/search/legal-entities

GET /entities/vendor/legal-entities

✏️ Path change

POST /customers/vendor/prepare/legal-entities

POST /entities/vendor/legal-entities

✏️ Path change

GET /customers/vendor/prepare/legal-entities/{searchId}

GET /entities/vendor/legal-entities/{searchId}

✏️ Path change

Important: Legal entities are now independent entities with their own UUID and status, no longer embedded as customer sub-objects. They have dedicated endpoints for full CRUD operations.

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type

Inline in POST /customers/legal-entities

POST /entities/{legalEntityId}/legal-representatives

🔄 Breaking change

Inline in GET /customers/legal-entities/{id}

GET /entities/{legalEntityId}/legal-representatives

🔄 Breaking change

Inline in PATCH /customers/legal-entities/{id}

GET /entities/legal-representatives/{id}

🔄 Breaking change

-

PATCH /entities/legal-representatives/{id}

New endpoint

-

DELETE /entities/legal-representatives/{id}

New endpoint

Important: Legal representatives are no longer embedded in legal entity payloads. They have dedicated endpoints for full CRUD operations.

Joint Persons

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type

POST /customers/joint-persons

🔀 Split → ➕ POST /entities/joint-persons + POST /roles/customers

🔄 Breaking change

GET /customers/joint-persons/{customerId}

🔀 Split → ➕ GET /roles/customers/{customerId} + GET /entities/joint-persons/{id}

🔄 Breaking change

PATCH /customers/joint-persons/{customerId}

PATCH /roles/customers/{customerId} + PATCH /entities/joint-persons/{id}

🔄 Breaking change

-

GET /entities/joint-persons

New endpoint

Important: Joint persons are now independent entities with their own UUID and status, no longer embedded as customer sub-objects. They require separate entity creation and customer role assignment.

Customers (Role Management)

Old Endpoint (customers.yaml)
New Endpoint (roles.yaml)
Change Type

GET /customers

GET /roles/customers

🔄 Breaking change

GET /customers/{customerId}

GET /roles/customers/{customerId}

✏️ Path change

POST /customers/natural-persons

🔀 Split → ➕ POST /entities/legal-entities + POST /roles/customers

🔄 Breaking change

POST /customers/joint-persons

🔀 Split → ➕ POST /entities/joint-persons + POST /roles/customers

🔄 Breaking change

PATCH /customers/natural-persons/{customerId}

PATCH /roles/customers/{customerId}

✏️ Path change

PATCH /customers/joint-persons/{customerId}

PATCH /roles/customers/{customerId}

✏️ Path change

Proxies

Old Endpoint (customers.yaml)
New Endpoint (roles.yaml)
Change Type

POST /natural-persons/{naturalPersonId}/proxy

POST /roles/proxies

GET /proxies

GET /roles/proxies

✏️ Path change

GET /proxies/{proxyId}

GET /roles/proxies/{proxyId}

✏️ Path change

PATCH /proxies/{proxyId}

PATCH /roles/proxies/{proxyId}

✏️ Path change

Customer Labels

Old Endpoint (customers.yaml)
New Endpoint (roles.yaml)
Change Type

GET /customer-labels

GET /roles/customer-labels

✏️ Path change

PATCH /customer-labels/{labelName}

PATCH /roles/customer-labels/{labelName}

✏️ Path change

DELETE /customer-labels/{labelName}

DELETE /roles/customer-labels/{labelName}

✏️ Path change

PATCH /customer-labels/{labelName}/customers

PATCH /roles/customer-labels/{labelName}/customers

✏️ Path change

POST /customer-labels/{labelName}/customers

POST /roles/customer-labels/{labelName}/customers

✏️ Path change

Identification Verification

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type

POST /identification-verifications

POST /entities/identification-verifications

✏️ Path change

GET /identification-verifications

GET /entities/identification-verifications

✏️ Path change

GET /identification-verifications/{id}

GET /entities/identification-verifications/{id}

✏️ Path change

Documents

Old Endpoint (customers.yaml)
New Endpoint (documents.yaml)
Change Type

GET /documents

GET /v2/documents

POST /documents

POST /v2/documents

GET /documents/{id}

GET /v2/documents/{id}

✏️ Path change

GET /documents/{id}/file

GET /v2/documents/{id}/file

✏️ Path change

POST /documents/sign

POST /v2/documents/sign

✏️ Path change

Important: Document model has changed - entityTyperesourceType with new enum values and improved resource categorization.

Onboarding & Offboarding (Centralized → Distributed)

Old Endpoint (onboardings.yaml)
New Endpoint (entities.yaml + roles.yaml)
Change Type

POST /onboardings

POST /entities/onboardings OR POST /roles/onboardings OR POST /user-onboardings

GET /onboardings

GET /entities/onboardings OR GET /roles/onboardings OR GET /user-onboardings

GET /onboardings/{id}

GET /entities/onboardings/{id} OR GET /roles/onboardings/{id} OR GET /user-onboardings/{id}

POST /offboardings

POST /entities/offboardings OR POST /roles/offboardings

GET /offboardings

GET /entities/offboardings OR GET /roles/offboardings

GET /offboardings/{id}

GET /entities/offboardings/{id} OR GET /roles/offboardings/{id}

DELETE /offboardings/{id}

DELETE /entities/offboardings/{id} OR DELETE /roles/offboardings/{id}

Important: Onboarding is now dorelease-test-specific. Use entities.yaml for entity onboarding (beneficial owners), roles.yaml for role onboarding (customers, proxies) and users.yaml for user onboarding..

Search NACE Sectors

Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type

GET /customers/natural-persons/search/nace-sectors

GET /entities/natural-persons/search/nace-sectors

✏️ Path change

GET /customers/legal-entities/search/nace-sectors

GET /entities/legal-entities/search/nace-sectors

✏️ Path change

Customer Statistics

Old Endpoint (customers.yaml)
New Endpoint (roles.yaml)
Change Type

GET /customers/status-counts

GET /roles/customers/statistics/status-counts

✏️ Path change

Natural Person Wizard (Completely Removed)

Old Endpoint (customers.yaml)
New Endpoint
Change Type

POST /customers/natural-persons/wizard

-

Removed

GET /customers/natural-persons/wizard

-

Removed

GET /customers/natural-persons/wizard/{wizardInstanceId}

-

Removed

PATCH /customers/natural-persons/wizard/{wizardInstanceId}

-

Removed

DELETE /customers/natural-persons/wizard/{wizardInstanceId}

-

Removed

Important: Natural person wizard functionality has been completely removed. Use the comprehensive onboarding process available in entities.yaml and roles.yaml instead.

New Endpoints (Not Available in customers.yaml)

Entity Management

  • GET /entities - Unified view of all entities

  • GET /entities/legal-representatives/{id} - Get specific legal representative

  • PATCH /entities/legal-representatives/{id} - Update legal representative

  • DELETE /entities/legal-representatives/{id} - Delete legal representative

  • POST /entities/{legalEntityId}/legal-representatives - Create legal representative

  • GET /entities/{legalEntityId}/legal-representatives - List legal representatives

Onboarding & Offboarding

  • POST /entities/onboardings - Start entity onboarding

  • GET /entities/onboardings - List entity onboardings

  • GET /entities/onboardings/{id} - Get entity onboarding

  • POST /entities/offboardings - Start entity offboarding

  • GET /entities/offboardings - List entity offboardings

  • GET /entities/offboardings/{id} - Get entity offboarding

  • DELETE /entities/offboardings/{id} - Cancel entity offboarding

Role Onboarding & Offboarding

  • POST /roles/onboardings - Start role onboarding

  • GET /roles/onboardings - List role onboardings

  • GET /roles/onboardings/{id} - Get role onboarding

  • POST /roles/offboardings - Start role offboarding

  • GET /roles/offboardings - List role offboardings

  • GET /roles/offboardings/{id} - Get role offboarding

  • DELETE /roles/offboardings/{id} - Cancel role offboarding

User Onboarding

  • POST /user-onboardings - Start user onboarding

  • GET /user-onboardings - List user onboardings

  • GET /user-onboardings/{id} - Get user onboarding

Document Management (v2)

  • GET /v2/documents - Get documents with new resource model

  • POST /v2/documents - Upload documents with new resource model

  • GET /v2/documents/{id} - Get document with new model

  • GET /v2/documents/{id}/file - Get document file

  • POST /v2/documents/sign - Sign document with new model

Key Model Changes

Beneficial Owner Model

Old Model (customers.yaml):

New Model (entities.yaml):

Key Changes:

  • Removed: boType field (all beneficial owners are now REAL_UBO_25)

  • Added: votingRights field (required)

  • Required: uboRelationship field is now mandatory

Proxy Model

Old Model (customers.yaml):

New Model (roles.yaml):

Key Changes:

  • 🔄 Changed: customerIdentityId

  • Added: entityType field

Old Model (customers.yaml):

New Model (entities.yaml + roles.yaml):

Key Changes:

  • Removed: legalRepresentatives array from legal entity payload

  • 🔄 Separated: Customer role data moved to roles.yaml

  • Added: Dedicated legal representative endpoints

Document Model

Old Model (documents.yaml):

New Model (documents.yaml v2):

Key Changes:

  • 🔄 Renamed: entityTyperesourceType

  • 🔄 Renamed: entityIdresourceId

  • Added: New resource types (LEGAL_ENTITY in addition to existing ones)

Onboarding Model

Old Model (onboardings.yaml - Centralized):

New Model (entities.yaml + roles.yaml - Distributed):

Key Changes:

  • 🔄 Split: Centralized onboarding → dorelease-test-specific onboarding

  • 🔄 Changed: Different parameters for entity vs role vs user onboarding

  • Added: onboardingRoleType field for role onboarding

Practical Migration Examples

1. Creating a Beneficial Owner

Before (customers.yaml):

After (entities.yaml):

2. Creating a Proxy

Before (customers.yaml):

After (roles.yaml):

3. Creating a Natural Person Customer

Before (customers.yaml) - Two steps:

Step 1: Create Natural Person

Step 2: Create Natural Person Customer

After (entities.yaml + roles.yaml) - Two steps:

Step 1: Create Natural Person Entity

Step 2: Assign Customer Role

Key Change: Same two-step process, but different API domains:

  • Before: /natural-persons/customers/natural-persons

  • After: /entities/natural-persons/roles/customers

Before (customers.yaml) - Single step:

After (entities.yaml + roles.yaml) - Three steps:

Step 1: Create Legal Entity

Step 2: Create Legal Representatives

Step 3: Create Customer Role

5. Creating a Joint Person Customer

Before (customers.yaml) - Single step:

After (entities.yaml + roles.yaml) - Two steps:

Step 1: Create Joint Person

Step 2: Create Customer Role

Before (customers.yaml) - Inline in legal entity:

After (entities.yaml) - Dedicated endpoints:

7. Uploading Documents

Before (documents.yaml):

After (documents.yaml v2):

8. Starting Onboarding Process

Before (onboardings.yaml - Centralized):

After (entities.yaml + roles.yaml + users.yaml- Distributed):

9. Updating a Customer Role

Before (customers.yaml):

After (roles.yaml):

Key Change: Customer role updates are now separate from entity updates. To update entity data (like address, contact), use the appropriate entity endpoint (/entities/natural-persons/{entityId} or /entities/legal-entities/{entityId}).

Migration Checklist

Phase 1: Update Base URLs

Phase 2: Path Updates

Phase 3: Model Updates

Phase 4: Breaking Changes

Phase 5: New Features

Validation Rules Changes

Beneficial Owners

  • uboRelationship is now required for all beneficial owners

  • votingRights is now required (0-100%, multiple of 0.01)

  • For DIRECTLY_HOLDING_25 or INDIRECTLY_HOLDING_25: either share OR voting rights must be ≥ 25%

  • For DOMINANT_INFLUENCE_OVER_SHARE_CAPITAL: no minimum requirements

New Webhook Notifications

The entity-role architecture introduces several new webhook notifications to support the distributed model:

Webhook Endpoint
Purpose
Entity Type

/joint-person-notification

Joint Person lifecycle events

Joint Persons

/legal-entity-notification

Legal Entity lifecycle events

Legal Entities

/legal-representative-notification

Legal Representative lifecycle events

Legal Representatives

/legal-entity-search-notification

Legal Entity search process updates

Legal Entity Search

Webhook Endpoint
Purpose
Description

/offboarding-notification

Offboarding process updates

Entity and role offboarding events

Enhanced Existing Webhooks

Webhook Endpoint
Enhancement
Description

/customer-notification

Role-focused

Now specifically for customer role events

/proxy-notification

Entity-aware

Now supports entity-based proxy relationships

/beneficial-owner-notification

Entity-focused

Now directly associated with legal entities

Notification Types

All new webhooks support standard notification types:

  • CREATED - Entity/role was created

  • UPDATED - Entity/role was updated

  • DELETED - Entity/role was deleted

  • VALIDATION_ERROR - Validation failed

Migration Impact: Update your webhook handlers to support the new entity-focused notifications and ensure proper handling of the distributed event model.

Additional Resources

  • Check the detailed API reference in entities.yaml, roles.yaml, documents.yaml, and onboardings.yaml

  • Review the comprehensive architectural changes in the main README

  • Test your migration against the new endpoints in the test environment

  • Consult webhooks.yaml for notification updates

Legend:

  • ✏️ Simple path change

  • 🔄 Breaking change requiring code updates

  • ➕ New endpoint/feature

  • ❌ Removed field/endpoint

  • 🔀 Split into multiple endpoints

  • ✅ New requirement

Last updated